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

View File

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