IDE: quick fix cant find unit: check if owner already depends on package

git-svn-id: trunk@22024 -
This commit is contained in:
mattias 2009-10-04 21:43:55 +00:00
parent 7030b96ce1
commit fbec38464e
2 changed files with 31 additions and 4 deletions

View File

@ -24,7 +24,6 @@
Dialog to search a missing unit.
ToDo:
- check if owner has already the dependency
- search in packages on disk
}
@ -87,6 +86,7 @@ type
procedure InitSearchPackages;
procedure AddQuickFix(Item: TQuickFixMissingUnit);
procedure AddRequirement(Item: TQuickFixMissingUnitAddRequirement);
function MainOwnerHasRequirement(PackageName: string): boolean;
public
procedure InitWithMsg(Msg: TIDEMessageLine; Line: string; aCode: TCodeBuffer;
aMissingUnitName: string);
@ -243,13 +243,22 @@ begin
if (FSearchPackages<>nil) and (FSearchPackagesIndex<FSearchPackages.Count)
then begin
Filename:=FSearchPackages[FSearchPackagesIndex];
// search in open packages
for i:=0 to PackageGraph.Count-1 do begin
APackage:=PackageGraph.Packages[i];
if APackage.Filename=Filename then begin
if APackage.FindUnit(MissingUnitName)<>nil then
AddQuickFix(TQuickFixMissingUnitAddRequirement.Create(APackage.Name));
if APackage.FindUnit(MissingUnitName)<>nil then begin
if MainOwnerHasRequirement(APackage.Name) then begin
// already in requirements
end else begin
// not yet in requirements -> add a quick fix
AddQuickFix(TQuickFixMissingUnitAddRequirement.Create(APackage.Name));
end;
end;
end;
end;
// search in package on disk
inc(FSearchPackagesIndex);
end;
end;
@ -302,6 +311,24 @@ begin
end;
end;
function TFindUnitDialog.MainOwnerHasRequirement(PackageName: string): boolean;
var
AProject: TProject;
APackage: TLazPackage;
begin
Result:=false;
if FMainOwner=nil then exit;
if FMainOwner is TProject then begin
AProject:=TProject(FMainOwner);
Result:=PackageGraph.FindDependencyRecursively(
AProject.FirstRequiredDependency,PackageName)<>nil;
end else if FMainOwner is TLazPackage then begin
APackage:=TLazPackage(FMainOwner);
Result:=PackageGraph.FindDependencyRecursively(
APackage.FirstRequiredDependency,PackageName)<>nil;
end;
end;
procedure TFindUnitDialog.InitWithMsg(Msg: TIDEMessageLine; Line: string;
aCode: TCodeBuffer; aMissingUnitName: string);

View File

@ -229,7 +229,7 @@ type
function PackageNameExists(const PkgName: string;
IgnorePackage: TLazPackage): boolean;
procedure GetAllRequiredPackages(FirstDependency: TPkgDependency;
out List: TFPList);
out List: TFPList); // for single search use FindDependencyRecursively
procedure GetConnectionsTree(FirstDependency: TPkgDependency;
var PkgList: TFPList; var Tree: TPkgPairTree);
function GetAutoCompilationOrder(APackage: TLazPackage;