codetools: FindMissingUnits: do not find fpc sources if there is no ppu in fpc search path

git-svn-id: trunk@41412 -
This commit is contained in:
mattias 2013-05-26 10:26:32 +00:00
parent 9e57b13d8f
commit c6da313e09
4 changed files with 28 additions and 18 deletions

View File

@ -172,8 +172,8 @@ type
function DirectoryCachePoolGetString(const ADirectory: string;
const AStringType: TCTDirCacheString): string;
function DirectoryCachePoolFindVirtualFile(const Filename: string): string;
function DirectoryCachePoolGetUnitFromSet(const UnitSet, AnUnitName: string
): string;
function DirectoryCachePoolGetUnitFromSet(const UnitSet, AnUnitName: string;
SrcSearchRequiresPPU: boolean): string;
function DirectoryCachePoolGetCompiledUnitFromSet(
const UnitSet, AnUnitName: string): string;
procedure DirectoryCachePoolIterateFPCUnitsFromSet(const UnitSet: string;
@ -5798,7 +5798,7 @@ begin
end;
function TCodeToolManager.DirectoryCachePoolGetUnitFromSet(const UnitSet,
AnUnitName: string): string;
AnUnitName: string; SrcSearchRequiresPPU: boolean): string;
var
Changed: boolean;
UnitSetCache: TFPCUnitSetCache;
@ -5813,7 +5813,7 @@ begin
debugln(['TCodeToolManager.DirectoryCachePoolGetUnitFromSet outdated UnitSet="',dbgstr(UnitSet),'"']);
exit;
end;
Result:=UnitSetCache.GetUnitSrcFile(AnUnitName,false);
Result:=UnitSetCache.GetUnitSrcFile(AnUnitName,SrcSearchRequiresPPU);
end;
function TCodeToolManager.DirectoryCachePoolGetCompiledUnitFromSet(

View File

@ -861,7 +861,7 @@ type
function GetUnitToSourceTree(AutoUpdate: boolean): TStringToStringTree; // unit name to file name (maybe relative)
function GetSourceDuplicates(AutoUpdate: boolean): TStringToStringTree; // unit to semicolon separated list of files
function GetUnitSrcFile(const AnUnitName: string;
MustHavePPU: boolean = true;
SrcSearchRequiresPPU: boolean = true;
SkipPPUCheckIfTargetIsSourceOnly: boolean = true): string;
function GetCompiledUnitFile(const AUnitName: string): string;
property ChangeStamp: integer read FChangeStamp;
@ -8421,9 +8421,9 @@ begin
end;
function TFPCUnitSetCache.GetUnitSrcFile(const AnUnitName: string;
MustHavePPU: boolean; SkipPPUCheckIfTargetIsSourceOnly: boolean): string;
SrcSearchRequiresPPU: boolean; SkipPPUCheckIfTargetIsSourceOnly: boolean): string;
{ Searches the unit in the FPC search path and sources.
MustHavePPU: only search the sources if there is a ppu in the search path
SrcSearchRequiresPPU: only search the sources if there is a ppu in the search path
}
var
Tree: TStringToStringTree;
@ -8442,11 +8442,14 @@ begin
// there is a ppu
end else if UnitInFPCPath<>'' then begin
// there is a pp or pas in the FPC search path
{$IFDEF ShowTriedUnits}
debugln(['TFPCUnitSetCache.GetUnitSrcFile Unit="',AnUnitName,'" source in FPC search path: "',Result,'"']);
{$ENDIF}
Result:=UnitInFPCPath;
exit;
end else begin
// unit has no ppu in the FPC ppu search path
if MustHavePPU then begin
if SrcSearchRequiresPPU then begin
if ConfigCache.HasPPUs then begin
// but there are other ppu files
{$IFDEF ShowTriedUnits}
@ -8467,6 +8470,7 @@ begin
end;
end;
end;
// search the sources
if Tree<>nil then begin
Result:=Tree[AnUnitName];
if (Result<>'') and (not FilenameIsAbsolute(Result)) then

View File

@ -169,7 +169,8 @@ type
function IndexOfFileCaseInsensitive(ShortFilename: PChar): integer;
function IndexOfFileCaseSensitive(ShortFilename: PChar): integer;
function FindUnitLink(const AUnitName: string): string;
function FindUnitInUnitSet(const AUnitName: string): string;
function FindUnitInUnitSet(const AUnitName: string;
SrcSearchRequiresPPU: boolean = true): string;
function FindCompiledUnitInUnitSet(const AUnitName: string): string;
function FindFile(const ShortFilename: string;
const FileCase: TCTSearchFileCase): string;
@ -180,7 +181,7 @@ type
function FindUnitSourceInCleanSearchPath(const AUnitName,
SearchPath: string; AnyCase: boolean): string;
function FindUnitSourceInCompletePath(var AUnitName, InFilename: string;
AnyCase: boolean): string;
AnyCase: boolean; FPCSrcSearchRequiresPPU: boolean = false): string;
function FindCompiledUnitInCompletePath(const AnUnitname: string;
AnyCase: boolean): string;
procedure IterateFPCUnitsInSet(const Iterate: TCTOnIterateFile);
@ -202,7 +203,8 @@ type
const AStringType: TCTDirCacheString
): string of object;
TCTDirCacheFindVirtualFile = function(const Filename: string): string of object;
TCTGetUnitFromSet = function(const UnitSet, AnUnitName: string): string of object;
TCTGetUnitFromSet = function(const UnitSet, AnUnitName: string;
SrcSearchRequiresPPU: boolean): string of object;
TCTGetCompiledUnitFromSet = function(const UnitSet, AnUnitName: string): string of object;
TCTIterateFPCUnitsFromSet = procedure(const UnitSet: string;
const Iterate: TCTOnIterateFile) of object;
@ -877,13 +879,14 @@ begin
Result:='';
end;
function TCTDirectoryCache.FindUnitInUnitSet(const AUnitName: string): string;
function TCTDirectoryCache.FindUnitInUnitSet(const AUnitName: string;
SrcSearchRequiresPPU: boolean): string;
var
UnitSet: string;
begin
UnitSet:=Strings[ctdcsUnitSet];
//debugln(['TCTDirectoryCache.FindUnitInUnitSet Directory="',Directory,'" UnitSet="',UnitSet,'" AUnitName="',AUnitName,'"']);
Result:=Pool.OnGetUnitFromSet(UnitSet,AUnitName);
Result:=Pool.OnGetUnitFromSet(UnitSet,AUnitName,SrcSearchRequiresPPU);
//debugln(['TCTDirectoryCache.FindUnitInUnitSet Directory="',Directory,'" UnitSet="',dbgstr(UnitSet),'" AUnitName="',AUnitName,'" Result="',Result,'"']);
end;
@ -1135,8 +1138,9 @@ begin
Result:='';
end;
function TCTDirectoryCache.FindUnitSourceInCompletePath(
var AUnitName, InFilename: string; AnyCase: boolean): string;
function TCTDirectoryCache.FindUnitSourceInCompletePath(var AUnitName,
InFilename: string; AnyCase: boolean; FPCSrcSearchRequiresPPU: boolean
): string;
function FindInFilenameLowUp(aFilename: string): string;
begin
@ -1252,7 +1256,7 @@ begin
{$IFDEF ShowTriedUnits}
DebugLn(['TCTDirectoryCache.FindUnitSourceInCompletePath unit ',AUnitName,' not found in SrcPath="',SrcPath,'" Directory="',Directory,'" searchin in unitset ...']);
{$ENDIF}
Result:=FindUnitInUnitSet(AUnitName);
Result:=FindUnitInUnitSet(AUnitName,FPCSrcSearchRequiresPPU);
{$IFDEF ShowTriedUnits}
if Result='' then begin
DebugLn(['TCTDirectoryCache.FindUnitSourceInCompletePath unit ',AUnitName,' not found in unitlinks. Directory="',Directory,'"']);

View File

@ -1476,7 +1476,9 @@ end;
function TStandardCodeTool.FindMissingUnits(var MissingUnits: TStrings;
FixCase: boolean; SearchImplementation: boolean;
SourceChangeCache: TSourceChangeCache): boolean;
const
FPCSrcSearchRequiresPPU = true;
function CheckUsesSection(UsesNode: TCodeTreeNode): boolean;
var
OldUnitName: String;
@ -1500,7 +1502,7 @@ function TStandardCodeTool.FindMissingUnits(var MissingUnits: TStrings;
NewUnitName:=OldUnitName;
NewInFilename:=OldInFilename;
AFilename:=DirectoryCache.FindUnitSourceInCompletePath(
NewUnitName,NewInFilename,true);
NewUnitName,NewInFilename,true,FPCSrcSearchRequiresPPU);
s:=NewUnitName;
if NewInFilename<>'' then
s:=s+' in '''+NewInFilename+'''';