IDE: code help: fixed caching module owner

git-svn-id: trunk@15978 -
This commit is contained in:
mattias 2008-08-06 20:38:38 +00:00
parent b5a227e0d8
commit 6b0f252b00
2 changed files with 38 additions and 4 deletions

View File

@ -113,6 +113,7 @@ type
public
SourceFilename: string;
FPDocFilename: string;
FPDocFileOwner: TObject;
FPDocFilenameTimeStamp: integer;
FilesTimeStamp: integer;
end;
@ -211,8 +212,9 @@ type
out AnOwner: TObject;// package or project
CreateIfNotExists: boolean = false): string;
procedure GetFPDocFilenamesForSources(SrcFilenames: TStringToStringTree;
ResolveIncludeFiles: boolean;
var FPDocFilenames: TStringToStringTree);
ResolveIncludeFiles: boolean;
var FPDocFilenames: TStringToStringTree // Names=Filename, Values=ModuleName
);
function FindModuleOwner(const Modulename: string): TObject;
function GetOwnerModuleName(TheOwner: TObject): string;
function ExpandFPDocLinkID(const LinkID, DefaultUnitName,
@ -1255,6 +1257,7 @@ begin
MapEntry:=TCHSourceToFPDocFile(AVLNode.Data);
if (MapEntry.FPDocFilenameTimeStamp=CompilerParseStamp)
and (MapEntry.FilesTimeStamp=FileStateCache.TimeStamp) then begin
AnOwner:=MapEntry.FPDocFileOwner;
Result:=MapEntry.FPDocFilename;
exit;
end;
@ -1284,6 +1287,7 @@ begin
end;
MapEntry.FPDocFilename:=Result;
MapEntry.FPDocFilenameTimeStamp:=CompilerParseStamp;
MapEntry.FPDocFileOwner:=AnOwner;
MapEntry.FilesTimeStamp:=FileStateCache.TimeStamp;
finally
if (Result='') and CreateIfNotExists then begin
@ -1317,7 +1321,7 @@ begin
if FPDocFilename<>'' then begin
if FPDocFilenames=nil then
FPDocFilenames:=CreateFilenameToStringTree;
FPDocFilenames[FPDocFilename]:=SrcFilename;
FPDocFilenames[FPDocFilename]:=GetOwnerModuleName(AnOwner);
end;
Node:=SrcFilenames.Tree.FindSuccessor(Node);
end;
@ -1603,9 +1607,9 @@ begin
// find corresponding FPDoc file
CHElement.ElementUnitFileName:=CHElement.CodeContext.Tool.MainFilename;
CHElement.ElementUnitName:=CHElement.CodeContext.Tool.GetSourceName(false);
AnOwner:=Self;
FPDocFilename:=GetFPDocFilenameForSource(CHElement.ElementUnitFileName,
false,CacheWasUsed,AnOwner);
DebugLn(['TCodeHelpManager.GetElementChain ',dbgsName(AnOwner)]);
CHElement.ElementModuleName:=GetOwnerModuleName(AnOwner);
//DebugLn(['TCodeHelpManager.GetElementChain FPDocFilename=',FPDocFilename]);
if (not CacheWasUsed) and (not Complete) then exit(chprParsing);

View File

@ -94,6 +94,9 @@ procedure AddReferencesToResultView(DeclarationCode: TCodeBuffer;
function GatherFPDocReferences(PascalFiles: TStringList;
DeclarationCode: TCodeBuffer; const DeclarationCaretXY: TPoint;
var TreeOfPCodeXYPosition: TAVLTree): TModalResult;
function GatherFPDocReferences(const ElementModuleName, ElementName,
FileModuleName, FPDocFilename: string;
var TreeOfPCodeXYPosition: TAVLTree): TModalResult;
implementation
@ -277,6 +280,10 @@ var
Chain: TCodeHelpElementChain;
CHResult: TCodeHelpParseResult;
CHElement: TCodeHelpElement;
AVLNode: TAvgLvlTreeNode;
Item: PStringToStringItem;
FPDocFilename: String;
ModuleName: String;
begin
Result:=mrCancel;
PascalFilenames:=nil;
@ -303,6 +310,18 @@ begin
CHElement:=Chain[0];
DebugLn(['GatherFPDocReferences ModuleName=',CHElement.ElementModuleName,' Name=',CHElement.ElementName]);
// search FPDoc files
AVLNode:=FPDocFilenames.Tree.FindLowest;
while AVLNode<>nil do begin
Item:=PStringToStringItem(AVLNode.Data);
FPDocFilename:=Item^.Name;
ModuleName:=Item^.Value;
Result:=GatherFPDocReferences(CHElement.ElementModuleName,CHElement.ElementName,
ModuleName,FPDocFilename,TreeOfPCodeXYPosition);
if Result<>mrOk then exit;
AVLNode:=FPDocFilenames.Tree.FindSuccessor(AVLNode);
end;
Result:=mrOk;
finally
PascalFilenames.Free;
@ -312,6 +331,17 @@ begin
end;
end;
function GatherFPDocReferences(const ElementModuleName, ElementName,
FileModuleName, FPDocFilename: string; var TreeOfPCodeXYPosition: TAVLTree
): TModalResult;
begin
Result:=mrCancel;
DebugLn(['GatherFPDocReferences ElementModuleName=',ElementModuleName,
' ElementName=',ElementName,' FPDocFilename=',FPDocFilename,
' FileModuleName=',FileModuleName]);
Result:=mrOk;
end;
{ TFindRenameIdentifierDialog }
procedure TFindRenameIdentifierDialog.FindRenameIdentifierDialogCreate(