identifier completion for uses section now searches in unit links too

git-svn-id: trunk@8706 -
This commit is contained in:
mattias 2006-02-04 18:19:30 +00:00
parent 0e46adcc18
commit 0466587d56
2 changed files with 65 additions and 27 deletions

View File

@ -154,6 +154,9 @@ function GatherUnitFiles(const BaseDir, SearchPath,
Extensions: string; KeepDoubles, CaseInsensitive: boolean;
var TreeOfUnitFiles: TAVLTree): boolean;
procedure FreeTreeOfUnitFiles(TreeOfUnitFiles: TAVLTree);
procedure AddToTreeOfUnitFiles(var TreeOfUnitFiles: TAVLTree;
const Filename: string;
KeepDoubles: boolean);
function CompareUnitFileInfos(Data1, Data2: Pointer): integer;
function CompareUnitNameAndUnitFileInfo(UnitnamePAnsiString,
UnitFileInfo: Pointer): integer;
@ -3257,30 +3260,6 @@ var
Result:=false;
end;
procedure AddFilename(const Filename: string);
var
AnUnitName: String;
NewItem: TUnitFileInfo;
begin
AnUnitName:=ExtractFileNameOnly(Filename);
//DebugLn('AddFilename AnUnitName="',AnUnitName,'" Filename="',Filename,'"');
if (not KeepDoubles) then begin
if (TreeOfUnitFiles<>nil)
and (TreeOfUnitFiles.FindKey(Pointer(AnUnitName),
@CompareUnitNameAndUnitFileInfo)<>nil)
then begin
// an unit with the same name was already found and doubles are not
// wanted
exit;
end;
end;
// add
if TreeOfUnitFiles=nil then
TreeOfUnitFiles:=TAVLTree.Create(@CompareUnitFileInfos);
NewItem:=TUnitFileInfo.Create(AnUnitName,Filename);
TreeOfUnitFiles.Add(NewItem);
end;
function SearchDirectory(const ADirectory: string): boolean;
var
FileInfo: TSearchRec;
@ -3299,7 +3278,8 @@ var
then
continue;
if ExtensionFits(FileInfo.Name) then begin
AddFilename(ADirectory+FileInfo.Name);
AddToTreeOfUnitFiles(TreeOfUnitFiles,ADirectory+FileInfo.Name,
KeepDoubles);
end;
until SysUtils.FindNext(FileInfo)<>0;
end;
@ -3346,6 +3326,30 @@ begin
TreeOfUnitFiles.Free;
end;
procedure AddToTreeOfUnitFiles(var TreeOfUnitFiles: TAVLTree;
const Filename: string; KeepDoubles: boolean);
var
AnUnitName: String;
NewItem: TUnitFileInfo;
begin
AnUnitName:=ExtractFileNameOnly(Filename);
if (not KeepDoubles) then begin
if (TreeOfUnitFiles<>nil)
and (TreeOfUnitFiles.FindKey(Pointer(AnUnitName),
@CompareUnitNameAndUnitFileInfo)<>nil)
then begin
// an unit with the same name was already found and doubles are not
// wanted
exit;
end;
end;
// add
if TreeOfUnitFiles=nil then
TreeOfUnitFiles:=TAVLTree.Create(@CompareUnitFileInfos);
NewItem:=TUnitFileInfo.Create(AnUnitName,Filename);
TreeOfUnitFiles.Add(NewItem);
end;
function CompareUnitFileInfos(Data1, Data2: Pointer): integer;
begin
Result:=CompareIdentifiers(PChar(TUnitFileInfo(Data1).UnitName),

View File

@ -53,7 +53,7 @@ uses
{$ENDIF}
Classes, SysUtils, FileProcs, CodeTree, CodeAtom, CustomCodeTool,
KeywordFuncLists, BasicCodeTools, LinkScanner,
AVL_Tree, CodeToolMemManager,
AVL_Tree, CodeToolMemManager, DefineTemplates,
SourceChanger, FindDeclarationTool, PascalParserTool;
@ -943,10 +943,42 @@ end;
procedure TIdentCompletionTool.GatherUnitnames(CleanPos: integer;
const Context: TFindContext; BeautifyCodeOptions: TBeautifyCodeOptions);
var
TreeOfUnitFiles: TAVLTree;
procedure GatherUnitsFromUnitLinks;
var
UnitLinks: string;
UnitLinkStart: Integer;
UnitLinkEnd: LongInt;
UnitLinkLen: Integer;
Filename: String;
begin
UnitLinks:=Scanner.Values[ExternalMacroStart+'UnitLinks'];
UnitLinkStart:=1;
while UnitLinkStart<=length(UnitLinks) do begin
while (UnitLinkStart<=length(UnitLinks))
and (UnitLinks[UnitLinkStart] in [#10,#13]) do
inc(UnitLinkStart);
UnitLinkEnd:=UnitLinkStart;
while (UnitLinkEnd<=length(UnitLinks)) and (UnitLinks[UnitLinkEnd]<>' ')
do
inc(UnitLinkEnd);
UnitLinkLen:=UnitLinkEnd-UnitLinkStart;
if UnitLinkLen>0 then begin
Filename:=copy(UnitLinks,UnitLinkStart,UnitLinkEnd-UnitLinkStart);
AddToTreeOfUnitFiles(TreeOfUnitFiles,Filename,false);
end;
UnitLinkStart:=UnitLinkEnd+1;
while (UnitLinkStart<=length(UnitLinks))
and (not (UnitLinks[UnitLinkStart] in [#10,#13])) do
inc(UnitLinkStart);
end;
end;
var
UnitPath, SrcPath: string;
BaseDir: String;
TreeOfUnitFiles: TAVLTree;
ANode: TAVLTreeNode;
UnitFileInfo: TUnitFileInfo;
NewItem: TIdentifierListItem;
@ -967,6 +999,8 @@ begin
// search in srcpath
SrcExt:='pp;pas';
GatherUnitFiles(BaseDir,SrcPath,SrcExt,false,true,TreeOfUnitFiles);
// add unitlinks
GatherUnitsFromUnitLinks;
// create list
CurSourceName:=GetSourceName;
ANode:=TreeOfUnitFiles.FindLowest;