* Fixed unresolved elements in tree

git-svn-id: trunk@23195 -
This commit is contained in:
michael 2012-12-20 16:21:14 +00:00
parent bc60ea4713
commit 366cd2d9c2
2 changed files with 53 additions and 38 deletions

View File

@ -2395,7 +2395,7 @@ procedure THTMLWriter.CreateClassHierarchyPage(AList : TStringList; AddUnit : Bo
end end
end end
else else
AppendText(CurOutputNode,EN); AppendText(CurOutputNode,E.Nodename);
LL:=TStringList.Create; LL:=TStringList.Create;
try try
N:=E.FirstChild; N:=E.FirstChild;

View File

@ -16,8 +16,8 @@ Type
FPackage: TPasPackage; FPackage: TPasPackage;
FParentObject : TPasClassType; FParentObject : TPasClassType;
Protected Protected
function LookForElement(PE: TDomElement; AElement: TPasElement): TDomNode; function LookForElement(PE: TDomElement; AElement: TPasElement; NoPath : Boolean): TDomNode;
function NodeMatch(N: TDomNode; AElement: TPasElement): Boolean; function NodeMatch(N: TDomNode; AElement: TPasElement; NoPath : Boolean): Boolean;
Function AddToClassTree(AElement : TPasElement; ACount : Integer) : TDomElement; Function AddToClassTree(AElement : TPasElement; ACount : Integer) : TDomElement;
Public Public
Constructor Create(APackage : TPasPackage; AObjectKind : TPasObjKind = okClass); Constructor Create(APackage : TPasPackage; AObjectKind : TPasObjKind = okClass);
@ -71,7 +71,7 @@ begin
end; end;
end; end;
Function TClassTreeBuilder.NodeMatch(N : TDomNode; AElement : TPasElement) : Boolean; Function TClassTreeBuilder.NodeMatch(N : TDomNode; AElement : TPasElement; NoPath : Boolean) : Boolean;
Var Var
PN,S : String; PN,S : String;
@ -81,23 +81,30 @@ begin
if Result then if Result then
begin begin
S:=N.NodeName; S:=N.NodeName;
IF Assigned(Aelement.GetModule) then if NoPath then
PN:=Aelement.GetModule.PackageName Begin
Result:= (CompareText(S,AElement.Name)=0);
end
else else
PN:=FPackage.Name; begin
S:='#'+PN+'.'+TDomElement(N)['unit']+S; IF Assigned(Aelement.GetModule) then
Result:= (CompareText(S,AElement.PathName)=0) PN:=Aelement.GetModule.PackageName
end; else
PN:=FPackage.Name;
S:=PN+'.'+TDomElement(N)['unit']+'.'+S;
Result:= (CompareText(S,AElement.PathName)=0);
end;
end;
end; end;
Function TClassTreeBuilder.LookForElement(PE : TDomElement; AElement : TPasElement) : TDomNode; Function TClassTreeBuilder.LookForElement(PE : TDomElement; AElement : TPasElement; NoPath : boolean) : TDomNode;
Var Var
N : TDomNode; N : TDomNode;
begin begin
Result:=PE; Result:=PE;
While (Result<>Nil) and Not NodeMatch(Result,AElement) do While (Result<>Nil) and Not NodeMatch(Result,AElement,NoPath) do
Result:=Result.NextSibling; Result:=Result.NextSibling;
If (Result=Nil) then If (Result=Nil) then
if Assigned(PE) then if Assigned(PE) then
@ -107,7 +114,7 @@ begin
begin begin
if (N.NodeType=ELEMENT_NODE) then if (N.NodeType=ELEMENT_NODE) then
begin begin
Result:=LookForElement(N as TDomElement,AElement); Result:=LookForElement(N as TDomElement,AElement,NoPath);
end; end;
N:=N.NextSibling; N:=N.NextSibling;
end; end;
@ -121,11 +128,25 @@ Var
PE : TDomElement; PE : TDomElement;
M : TPasModule; M : TPasModule;
N : TDomNode; N : TDomNode;
PF : String;
begin begin
PF:=StringOfChar(' ',ACount);
Result:=Nil; Result:=Nil;
If (AElement=Nil) then If (AElement=Nil) then
Result:=FTreeStart begin
Result:=FTreeStart;
Exit;
end
else If (AElement is TPasUnresolvedTypeRef) then
begin
N:=LookForElement(FTreeStart,AElement,True);
If (N=Nil) then
begin
Write('Symbol ',AElement.Name,' is unresolved');
PE:=FTreeStart;
end
end
else If (AElement is TPasClassType) then else If (AElement is TPasClassType) then
begin begin
if (AElement=FParentObject) then if (AElement=FParentObject) then
@ -135,30 +156,24 @@ begin
PC:=AElement as TPasClassType; PC:=AElement as TPasClassType;
PE:=AddToClassTree(PC.AncestorType,ACount+1); PE:=AddToClassTree(PC.AncestorType,ACount+1);
if PE=Nil then if PE=Nil then
begin PE:=FTreeStart;
Write('Name ',PC.Name,' parent '); N:=LookForElement(PE,PC,False);
if Assigned(PC.AncestorType) then end
Write('(Name: ',PC.AncestorType.Name,' Type:',PC.ANcestorType.ClassName,')'); end;
PE:=FClassTree.CreateElement(PC.AncestorType.Name); If (N<>Nil) then
FTreeStart.AppendChild(PE); Result:=N as TDomElement
end; else
N:=LookForElement(PE,PC); begin
If (N<>Nil) then Inc(ACount);
Result:=N as TDomElement Result:=FClassTree.CreateElement(AElement.Name);
else If Not (AElement is TPasUnresolvedTypeRef) then
begin begin
Inc(ACount); M:=AElement.GetModule;
Result:=FClassTree.CreateElement(AElement.Name); if Assigned(M) then
If Not (AElement is TPasUnresolvedTypeRef) then Result['unit']:=M.Name;
begin end;
M:=AElement.GetModule; PE.AppendChild(Result);
if Assigned(M) then end;
Result['unit']:=M.Name;
end;
PE.AppendChild(Result);
end;
end;
end
end; end;
end. end.