mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 12:16:18 +02:00
IDE: implemented check if package uses Owner of property
git-svn-id: trunk@14754 -
This commit is contained in:
parent
4a0ceae39d
commit
d547195c8f
@ -219,6 +219,8 @@ type
|
||||
const Name: string): TLazPackage;
|
||||
function FindDependencyRecursively(FirstDependency: TPkgDependency;
|
||||
PkgID: TLazPackageID): TPkgDependency;
|
||||
function FindDependencyRecursively(FirstDependency: TPkgDependency;
|
||||
const PkgName: string): TPkgDependency;
|
||||
function FindConflictRecursively(FirstDependency: TPkgDependency;
|
||||
PkgID: TLazPackageID): TPkgDependency;
|
||||
function FindUnit(StartPackage: TLazPackage; const TheUnitName: string;
|
||||
@ -871,6 +873,37 @@ begin
|
||||
Result:=Find(FirstDependency);
|
||||
end;
|
||||
|
||||
function TLazPackageGraph.FindDependencyRecursively(
|
||||
FirstDependency: TPkgDependency; const PkgName: string): TPkgDependency;
|
||||
// returns one compatible dependency for PkgName
|
||||
|
||||
function Find(CurDependency: TPkgDependency): TPkgDependency;
|
||||
var
|
||||
RequiredPackage: TLazPackage;
|
||||
begin
|
||||
while CurDependency<>nil do begin
|
||||
if SysUtils.CompareText(CurDependency.PackageName,PkgName)=0 then begin
|
||||
Result:=CurDependency;
|
||||
exit;
|
||||
end;
|
||||
if CurDependency.LoadPackageResult=lprSuccess then begin
|
||||
RequiredPackage:=CurDependency.RequiredPackage;
|
||||
if (not (lpfVisited in RequiredPackage.Flags)) then begin
|
||||
RequiredPackage.Flags:=RequiredPackage.Flags+[lpfVisited];
|
||||
Result:=Find(RequiredPackage.FirstRequiredDependency);
|
||||
if Result<>nil then exit;
|
||||
end;
|
||||
end;
|
||||
CurDependency:=CurDependency.NextRequiresDependency;
|
||||
end;
|
||||
Result:=nil;
|
||||
end;
|
||||
|
||||
begin
|
||||
MarkAllPackagesAsNotVisited;
|
||||
Result:=Find(FirstDependency);
|
||||
end;
|
||||
|
||||
function TLazPackageGraph.FindConflictRecursively(
|
||||
FirstDependency: TPkgDependency; PkgID: TLazPackageID): TPkgDependency;
|
||||
// returns one conflicting dependency for PkgID
|
||||
@ -1729,8 +1762,8 @@ end;
|
||||
|
||||
function TLazPackageGraph.FindBrokenDependencyPath(APackage: TLazPackage;
|
||||
FirstDependency: TPkgDependency): TFPList;
|
||||
// returns the first broken dependency
|
||||
// the first irems are TLazPackage, the last item is a TPkgDependency
|
||||
// returns the first broken dependency (broken = not loaded)
|
||||
// the first items are TLazPackage, the last item is a TPkgDependency
|
||||
|
||||
procedure FindBroken(Dependency: TPkgDependency; var PathList: TFPList);
|
||||
var
|
||||
|
@ -3954,6 +3954,12 @@ var
|
||||
ConflictDependency:=PackageGraph.FindConflictRecursively(
|
||||
FirstDependency,APackage);
|
||||
if ConflictDependency<>nil then exit;
|
||||
if MainOwner is TLazPackage then begin
|
||||
// check if package already uses MainOwner
|
||||
ConflictDependency:=PackageGraph.FindDependencyRecursively(
|
||||
APackage.FirstRequiredDependency,TLazPackage(MainOwner).Name);
|
||||
if ConflictDependency<>nil then exit;
|
||||
end;
|
||||
end else begin
|
||||
// AnUnitInfo does not belong to a Package => can not be used
|
||||
exit;
|
||||
|
Loading…
Reference in New Issue
Block a user