mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-22 15:29:25 +02:00
* Fixed unresolved elements in tree
git-svn-id: trunk@23195 -
This commit is contained in:
parent
bc60ea4713
commit
366cd2d9c2
@ -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;
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user