mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 13:18:08 +02:00
ide: comment, codetools: FindSourceNameReferences: search virtual files
This commit is contained in:
parent
435a011e8a
commit
b09fddb930
@ -167,6 +167,8 @@ type
|
|||||||
procedure DoOnGlobalValuesChanged;
|
procedure DoOnGlobalValuesChanged;
|
||||||
function DoOnFindUsedUnit(SrcTool: TFindDeclarationTool; const TheUnitName,
|
function DoOnFindUsedUnit(SrcTool: TFindDeclarationTool; const TheUnitName,
|
||||||
TheUnitInFilename: string): TCodeBuffer;
|
TheUnitInFilename: string): TCodeBuffer;
|
||||||
|
function DoOnFindUsedUnit(const SrcFilename, TheUnitName,
|
||||||
|
TheUnitInFilename: string): TCodeBuffer;
|
||||||
function DoOnGetSrcPathForCompiledUnit(Sender: TObject;
|
function DoOnGetSrcPathForCompiledUnit(Sender: TObject;
|
||||||
const AFilename: string): string;
|
const AFilename: string): string;
|
||||||
function DoOnInternalGetMethodName(const AMethod: TMethod;
|
function DoOnInternalGetMethodName(const AMethod: TMethod;
|
||||||
@ -3054,7 +3056,7 @@ function TCodeToolManager.FindSourceNameReferences(TargetFilename: string; Files
|
|||||||
SkipComments: boolean; out ListOfSrcNameRefs: TObjectList; WithDuplicates: boolean): boolean;
|
SkipComments: boolean; out ListOfSrcNameRefs: TObjectList; WithDuplicates: boolean): boolean;
|
||||||
var
|
var
|
||||||
i, j, InFilenameCleanPos: Integer;
|
i, j, InFilenameCleanPos: Integer;
|
||||||
Filename, Dir, TargetUnitName, InFilename, LocalSrcName: String;
|
Filename, Dir, TargetUnitName, InFilename, LocalSrcName, CurUnitName: String;
|
||||||
Code: TCodeBuffer;
|
Code: TCodeBuffer;
|
||||||
Tools, DirCachesSearch, DirCachesSkip: TFPList;
|
Tools, DirCachesSearch, DirCachesSkip: TFPList;
|
||||||
DirCache: TCTDirectoryCache;
|
DirCache: TCTDirectoryCache;
|
||||||
@ -3062,11 +3064,20 @@ var
|
|||||||
Refs: TSrcNameRefs;
|
Refs: TSrcNameRefs;
|
||||||
Node, NextNode: TAVLTreeNode;
|
Node, NextNode: TAVLTreeNode;
|
||||||
CodeXYPos: PCodeXYPosition;
|
CodeXYPos: PCodeXYPosition;
|
||||||
|
|
||||||
|
function CanFindFile(const CurFilename: string): boolean;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
if FilenameIsAbsolute(TargetFilename) then exit;
|
||||||
|
Result:=DoOnFindUsedUnit(CurFilename,TargetUnitName,'')<>nil;
|
||||||
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
{$IFDEF VerboseFindSourceNameReferences}
|
{$IFDEF VerboseFindSourceNameReferences}
|
||||||
debugln(['TCodeToolManager.FindSourceNameReferences TargetFile="',TargetFilename,'" FileCount=',Files.Count,' SkipComments=',SkipComments]);
|
debugln(['TCodeToolManager.FindSourceNameReferences TargetFile="',TargetFilename,'" FileCount=',Files.Count,' SkipComments=',SkipComments]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Result:=false;
|
Result:=false;
|
||||||
|
TargetUnitName:=ExtractFileNameOnly(TargetFilename);
|
||||||
ListOfSrcNameRefs:=nil;
|
ListOfSrcNameRefs:=nil;
|
||||||
Tools:=TFPList.Create;
|
Tools:=TFPList.Create;
|
||||||
DirCachesSearch:=TFPList.Create;
|
DirCachesSearch:=TFPList.Create;
|
||||||
@ -3089,17 +3100,21 @@ begin
|
|||||||
// check if directory has target in unitpath
|
// check if directory has target in unitpath
|
||||||
Dir:=ExtractFilePath(Filename);
|
Dir:=ExtractFilePath(Filename);
|
||||||
DirCache:=DirectoryCachePool.GetCache(Dir,true,false);
|
DirCache:=DirectoryCachePool.GetCache(Dir,true,false);
|
||||||
if DirCachesSkip.IndexOf(DirCache)>=0 then continue;
|
if DirCachesSkip.IndexOf(DirCache)>=0 then begin
|
||||||
if DirCachesSearch.IndexOf(DirCache)<0 then begin
|
// this directory does not have target in unit path
|
||||||
TargetUnitName:=ExtractFileNameOnly(TargetFilename);
|
// check custom search
|
||||||
|
if not CanFindFile(Filename) then
|
||||||
|
continue;
|
||||||
|
end else if DirCachesSearch.IndexOf(DirCache)<0 then begin
|
||||||
|
CurUnitName:=TargetUnitName;
|
||||||
InFilename:='';
|
InFilename:='';
|
||||||
if DirCache.FindUnitSourceInCompletePath(TargetUnitName,InFilename,true)<>'' then
|
if DirCache.FindUnitSourceInCompletePath(CurUnitName,InFilename,true)<>'' then
|
||||||
begin
|
begin
|
||||||
{$IFDEF VerboseFindSourceNameReferences}
|
{$IFDEF VerboseFindSourceNameReferences}
|
||||||
debugln(['TCodeToolManager.FindSourceNameReferences File ',Filename,', target in unit path']);
|
debugln(['TCodeToolManager.FindSourceNameReferences File ',Filename,', target in unit path']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
DirCachesSearch.Add(DirCache);
|
DirCachesSearch.Add(DirCache);
|
||||||
end else begin
|
end else if not CanFindFile(Filename) then begin
|
||||||
{$IFDEF VerboseFindSourceNameReferences}
|
{$IFDEF VerboseFindSourceNameReferences}
|
||||||
debugln(['TCodeToolManager.FindSourceNameReferences File ',Filename,', target NOT in unit path, SKIP']);
|
debugln(['TCodeToolManager.FindSourceNameReferences File ',Filename,', target NOT in unit path, SKIP']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -6399,8 +6414,16 @@ function TCodeToolManager.DoOnFindUsedUnit(SrcTool: TFindDeclarationTool;
|
|||||||
const TheUnitName, TheUnitInFilename: string): TCodeBuffer;
|
const TheUnitName, TheUnitInFilename: string): TCodeBuffer;
|
||||||
begin
|
begin
|
||||||
if Assigned(OnSearchUsedUnit) then
|
if Assigned(OnSearchUsedUnit) then
|
||||||
Result:=OnSearchUsedUnit(SrcTool.MainFilename,
|
Result:=OnSearchUsedUnit(SrcTool.MainFilename,TheUnitName,TheUnitInFilename)
|
||||||
TheUnitName,TheUnitInFilename)
|
else
|
||||||
|
Result:=nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCodeToolManager.DoOnFindUsedUnit(const SrcFilename, TheUnitName, TheUnitInFilename: string
|
||||||
|
): TCodeBuffer;
|
||||||
|
begin
|
||||||
|
if Assigned(OnSearchUsedUnit) then
|
||||||
|
Result:=OnSearchUsedUnit(SrcFilename,TheUnitName,TheUnitInFilename)
|
||||||
else
|
else
|
||||||
Result:=nil;
|
Result:=nil;
|
||||||
end;
|
end;
|
||||||
|
@ -6648,7 +6648,7 @@ end;
|
|||||||
procedure TProjectDefineTemplates.UpdateMain;
|
procedure TProjectDefineTemplates.UpdateMain;
|
||||||
begin
|
begin
|
||||||
if (Owner as TProject).Destroying then exit;
|
if (Owner as TProject).Destroying then exit;
|
||||||
// update the package block define template (the container for all other
|
// update the block define template (the container for all other
|
||||||
// define templates of the project)
|
// define templates of the project)
|
||||||
if FMain=nil then begin
|
if FMain=nil then begin
|
||||||
// create the main project template
|
// create the main project template
|
||||||
@ -6768,7 +6768,7 @@ var
|
|||||||
SrcDirDefTempl: TDefineTemplate;
|
SrcDirDefTempl: TDefineTemplate;
|
||||||
IDHasChanged: Boolean;
|
IDHasChanged: Boolean;
|
||||||
SrcDirMarkDefTempl: TDefineTemplate;
|
SrcDirMarkDefTempl: TDefineTemplate;
|
||||||
CurUnitPath: String;
|
CurUnitPath, SrcDir: String;
|
||||||
begin
|
begin
|
||||||
//DebugLn('TProjectDefineTemplates.UpdateDefinesForSourceDirectories ',Owner.IDAsString,' Active=',dbgs(Active),' TimeStamp=',dbgs(fLastSourceDirStamp),' Project.TimeStamp=',dbgs(Project.SourceDirectories.TimeStamp));
|
//DebugLn('TProjectDefineTemplates.UpdateDefinesForSourceDirectories ',Owner.IDAsString,' Active=',dbgs(Active),' TimeStamp=',dbgs(fLastSourceDirStamp),' Project.TimeStamp=',dbgs(Project.SourceDirectories.TimeStamp));
|
||||||
if (not Owner.NeedsDefineTemplates) or (not Active) then exit;
|
if (not Owner.NeedsDefineTemplates) or (not Active) then exit;
|
||||||
@ -6822,10 +6822,12 @@ begin
|
|||||||
UpdateSrcDirIfDef;
|
UpdateSrcDirIfDef;
|
||||||
for i:=0 to fLastSourceDirectories.Count-1 do begin
|
for i:=0 to fLastSourceDirectories.Count-1 do begin
|
||||||
// create directory template
|
// create directory template
|
||||||
|
SrcDir:=fLastSourceDirectories[i];
|
||||||
SrcDirDefTempl:=TDefineTemplate.Create('Source Directory '+IntToStr(i+1),
|
SrcDirDefTempl:=TDefineTemplate.Create('Source Directory '+IntToStr(i+1),
|
||||||
fLastSourceDirectories[i],'',fLastSourceDirectories[i],da_Directory);
|
SrcDir,'',fLastSourceDirectories[i],da_Directory);
|
||||||
DisableDefaultsInDirectories(SrcDirDefTempl,false);
|
|
||||||
fLastSourceDirectories.Objects[i]:=SrcDirDefTempl;
|
fLastSourceDirectories.Objects[i]:=SrcDirDefTempl;
|
||||||
|
// add disable defaults
|
||||||
|
DisableDefaultsInDirectories(SrcDirDefTempl,false);
|
||||||
// add proj source directory marker
|
// add proj source directory marker
|
||||||
SrcDirMarkDefTempl:=TDefineTemplate.Create('ProjectSrcDirMark',
|
SrcDirMarkDefTempl:=TDefineTemplate.Create('ProjectSrcDirMark',
|
||||||
lisProjProjectSourceDirectoryMark, '#ProjectSrcMark'+Owner.IDAsWord,
|
lisProjProjectSourceDirectoryMark, '#ProjectSrcMark'+Owner.IDAsWord,
|
||||||
|
@ -1758,6 +1758,7 @@ end;
|
|||||||
function TProjectUnitFileSelector.InitialSelection(aFilename: string): Boolean;
|
function TProjectUnitFileSelector.InitialSelection(aFilename: string): Boolean;
|
||||||
begin
|
begin
|
||||||
Result:=False;
|
Result:=False;
|
||||||
|
if aFilename='' then ;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TProjectUnitFileSelector.Select: TModalResult;
|
function TProjectUnitFileSelector.Select: TModalResult;
|
||||||
@ -5827,7 +5828,7 @@ begin
|
|||||||
// check new resource file
|
// check new resource file
|
||||||
NewLFMFilename:='';
|
NewLFMFilename:='';
|
||||||
if FilenameHasPascalExt(NewFilename) then
|
if FilenameHasPascalExt(NewFilename) then
|
||||||
NewLFMFilename:=ChangeFileExt(NewFilename,'.lfm');
|
NewLFMFilename:=ChangeFileExt(NewFilename,'.lfm');
|
||||||
if AnUnitInfo.ComponentName='' then begin
|
if AnUnitInfo.ComponentName='' then begin
|
||||||
// unit has no component
|
// unit has no component
|
||||||
// -> remove lfm file, so that it will not be auto loaded on next open
|
// -> remove lfm file, so that it will not be auto loaded on next open
|
||||||
|
Loading…
Reference in New Issue
Block a user