mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-19 19:29:31 +01:00
cody: unitdependencies: packages
git-svn-id: trunk@40310 -
This commit is contained in:
parent
92bb4c705f
commit
bec25eb2c8
@ -154,6 +154,7 @@ end;
|
|||||||
|
|
||||||
constructor TUGGroup.Create(aName: string; TheGroups: TUGGroups);
|
constructor TUGGroup.Create(aName: string; TheGroups: TUGGroups);
|
||||||
begin
|
begin
|
||||||
|
FName:=aName;
|
||||||
FGroups:=TheGroups;
|
FGroups:=TheGroups;
|
||||||
FUnits:=TAVLTree.Create(@CompareUGUnitFilenames);
|
FUnits:=TAVLTree.Create(@CompareUGUnitFilenames);
|
||||||
end;
|
end;
|
||||||
|
|||||||
@ -171,6 +171,8 @@ begin
|
|||||||
Parent:=GroupsTabSheet;
|
Parent:=GroupsTabSheet;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
MainPageControl.ActivePage:=GroupsTabSheet;
|
||||||
|
|
||||||
IdleConnected:=true;
|
IdleConnected:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -231,6 +233,7 @@ var
|
|||||||
begin
|
begin
|
||||||
if AProject=nil then exit;
|
if AProject=nil then exit;
|
||||||
Result:=Groups.GetGroup(GroupPrefixProject,true);
|
Result:=Groups.GetGroup(GroupPrefixProject,true);
|
||||||
|
//debugln(['TUnitDependenciesDialog.CreateProjectGroup ',Result.Name]);
|
||||||
for i:=0 to AProject.FileCount-1 do begin
|
for i:=0 to AProject.FileCount-1 do begin
|
||||||
Filename:=AProject.Files[i].Filename;
|
Filename:=AProject.Files[i].Filename;
|
||||||
CurUnit:=UsesGraph.GetUnit(Filename,false);
|
CurUnit:=UsesGraph.GetUnit(Filename,false);
|
||||||
@ -250,6 +253,7 @@ var
|
|||||||
begin
|
begin
|
||||||
if APackage=nil then exit;
|
if APackage=nil then exit;
|
||||||
Result:=Groups.GetGroup(APackage.Name,true);
|
Result:=Groups.GetGroup(APackage.Name,true);
|
||||||
|
//debugln(['TUnitDependenciesDialog.CreatePackageGroup ',Result.Name]);
|
||||||
for i:=0 to APackage.FileCount-1 do begin
|
for i:=0 to APackage.FileCount-1 do begin
|
||||||
Filename:=APackage.Files[i].GetFullFilename;
|
Filename:=APackage.Files[i].GetFullFilename;
|
||||||
CurUnit:=UsesGraph.GetUnit(Filename,false);
|
CurUnit:=UsesGraph.GetUnit(Filename,false);
|
||||||
@ -280,6 +284,7 @@ begin
|
|||||||
Directory:=ExtractFilePath(CurUnit.Filename);
|
Directory:=ExtractFilePath(CurUnit.Filename);
|
||||||
Directory:=copy(Directory,length(FPCSrcDir)+1,length(Directory));
|
Directory:=copy(Directory,length(FPCSrcDir)+1,length(Directory));
|
||||||
Grp:=Groups.GetGroup(GroupPrefixFPCSrc+Directory,true);
|
Grp:=Groups.GetGroup(GroupPrefixFPCSrc+Directory,true);
|
||||||
|
debugln(['TUnitDependenciesDialog.CreateFPCSrcGroups ',Grp.Name]);
|
||||||
Grp.AddUnit(TUGGroupUnit(CurUnit));
|
Grp.AddUnit(TUGGroupUnit(CurUnit));
|
||||||
end;
|
end;
|
||||||
Node:=UsesGraph.FilesTree.FindSuccessor(Node);
|
Node:=UsesGraph.FilesTree.FindSuccessor(Node);
|
||||||
@ -304,6 +309,7 @@ begin
|
|||||||
CurUnit:=TUGGroupUnit(Node.Data);
|
CurUnit:=TUGGroupUnit(Node.Data);
|
||||||
if TUGGroupUnit(CurUnit).Group=nil then begin
|
if TUGGroupUnit(CurUnit).Group=nil then begin
|
||||||
Filename:=CurUnit.Filename;
|
Filename:=CurUnit.Filename;
|
||||||
|
debugln(['TUnitDependenciesDialog.GuessGroupOfUnits no group for ',Filename]);
|
||||||
CurDirectory:=ExtractFilePath(Filename);
|
CurDirectory:=ExtractFilePath(Filename);
|
||||||
if CompareFilenames(CurDirectory,LastDirectory)<>0 then begin
|
if CompareFilenames(CurDirectory,LastDirectory)<>0 then begin
|
||||||
FreeAndNil(Owners);
|
FreeAndNil(Owners);
|
||||||
@ -314,15 +320,19 @@ begin
|
|||||||
for i:=0 to Owners.Count-1 do begin
|
for i:=0 to Owners.Count-1 do begin
|
||||||
if TObject(Owners[i]) is TLazProject then begin
|
if TObject(Owners[i]) is TLazProject then begin
|
||||||
Group:=Groups.GetGroup(GroupPrefixProject,true);
|
Group:=Groups.GetGroup(GroupPrefixProject,true);
|
||||||
|
debugln(['TUnitDependenciesDialog.GuessGroupOfUnits ',Group.Name]);
|
||||||
break;
|
break;
|
||||||
end else if TObject(Owners[i]) is TIDEPackage then begin
|
end else if TObject(Owners[i]) is TIDEPackage then begin
|
||||||
Group:=Groups.GetGroup(TIDEPackage(Owners[i]).Name,true);
|
Group:=Groups.GetGroup(TIDEPackage(Owners[i]).Name,true);
|
||||||
|
debugln(['TUnitDependenciesDialog.GuessGroupOfUnits ',Group.Name]);
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if Group=nil then
|
if Group=nil then begin
|
||||||
Group:=Groups.GetGroup(GroupNone,true);
|
Group:=Groups.GetGroup(GroupNone,true);
|
||||||
|
debugln(['TUnitDependenciesDialog.GuessGroupOfUnits ',Group.Name]);
|
||||||
|
end;
|
||||||
Group.AddUnit(TUGGroupUnit(CurUnit));
|
Group.AddUnit(TUGGroupUnit(CurUnit));
|
||||||
end;
|
end;
|
||||||
Node:=UsesGraph.FilesTree.FindSuccessor(Node);
|
Node:=UsesGraph.FilesTree.FindSuccessor(Node);
|
||||||
@ -446,6 +456,10 @@ var
|
|||||||
AVLNode: TAVLTreeNode;
|
AVLNode: TAVLTreeNode;
|
||||||
Group: TUGGroup;
|
Group: TUGGroup;
|
||||||
Graph: TLvlGraph;
|
Graph: TLvlGraph;
|
||||||
|
PkgList: TFPList;
|
||||||
|
i: Integer;
|
||||||
|
RequiredPkg: TIDEPackage;
|
||||||
|
GroupObj: TObject;
|
||||||
begin
|
begin
|
||||||
GroupsLvlGraph.BeginUpdate;
|
GroupsLvlGraph.BeginUpdate;
|
||||||
Graph:=GroupsLvlGraph.Graph;
|
Graph:=GroupsLvlGraph.Graph;
|
||||||
@ -454,11 +468,26 @@ begin
|
|||||||
while AVLNode<>nil do begin
|
while AVLNode<>nil do begin
|
||||||
Group:=TUGGroup(AVLNode.Data);
|
Group:=TUGGroup(AVLNode.Data);
|
||||||
Graph.GetNode(Group.Name,true);
|
Graph.GetNode(Group.Name,true);
|
||||||
|
GroupObj:=nil;
|
||||||
if Group.Name=GroupPrefixProject then begin
|
if Group.Name=GroupPrefixProject then begin
|
||||||
// project
|
// project
|
||||||
|
GroupObj:=LazarusIDE.ActiveProject;
|
||||||
end else begin
|
end else begin
|
||||||
|
// package
|
||||||
|
GroupObj:=PackageEditingInterface.FindPackageWithName(Group.Name);
|
||||||
|
end;
|
||||||
|
PkgList:=nil;
|
||||||
|
try
|
||||||
|
PackageEditingInterface.GetRequiredPackages(GroupObj,PkgList,[pirNotRecursive]);
|
||||||
|
if (PkgList<>nil) then begin
|
||||||
|
// add for each dependency an edge in the Graph
|
||||||
|
for i:=0 to PkgList.Count-1 do begin
|
||||||
|
RequiredPkg:=TIDEPackage(PkgList[i]);
|
||||||
|
Graph.GetEdge(Group.Name,RequiredPkg.Name,true);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
PkgList.Free;
|
||||||
end;
|
end;
|
||||||
AVLNode:=Groups.Groups.FindSuccessor(AVLNode);
|
AVLNode:=Groups.Groups.FindSuccessor(AVLNode);
|
||||||
end;
|
end;
|
||||||
|
|||||||
@ -251,7 +251,8 @@ type
|
|||||||
// dependencies
|
// dependencies
|
||||||
function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string;
|
function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string;
|
||||||
out DependencyOwner: TObject): boolean; virtual; abstract;
|
out DependencyOwner: TObject): boolean; virtual; abstract;
|
||||||
procedure GetRequiredPackages(AnOwner: TObject; PkgList: TFPList;
|
procedure GetRequiredPackages(AnOwner: TObject; // a TLazProject or TIDEPackage
|
||||||
|
out PkgList: TFPList; // list of TIDEPackage
|
||||||
Flags: TPkgIntfRequiredFlags = []) virtual; abstract;
|
Flags: TPkgIntfRequiredFlags = []) virtual; abstract;
|
||||||
function AddDependencyToOwners(OwnerList: TFPList; APackage: TIDEPackage;
|
function AddDependencyToOwners(OwnerList: TFPList; APackage: TIDEPackage;
|
||||||
OnlyTestIfPossible: boolean = false): TModalResult; virtual; abstract; // mrOk or mrIgnore for already connected
|
OnlyTestIfPossible: boolean = false): TModalResult; virtual; abstract; // mrOk or mrIgnore for already connected
|
||||||
|
|||||||
@ -241,7 +241,7 @@ type
|
|||||||
function FindPackageWithName(const PkgName: string; IgnorePackage: TIDEPackage = nil): TIDEPackage; override;
|
function FindPackageWithName(const PkgName: string; IgnorePackage: TIDEPackage = nil): TIDEPackage; override;
|
||||||
function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string;
|
function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string;
|
||||||
out DependencyOwner: TObject): boolean; override;
|
out DependencyOwner: TObject): boolean; override;
|
||||||
procedure GetRequiredPackages(AnOwner: TObject; PkgList: TFPList;
|
procedure GetRequiredPackages(AnOwner: TObject; out PkgList: TFPList;
|
||||||
Flags: TPkgIntfRequiredFlags = []) override;
|
Flags: TPkgIntfRequiredFlags = []) override;
|
||||||
function AddDependencyToOwners(OwnerList: TFPList; APackage: TIDEPackage;
|
function AddDependencyToOwners(OwnerList: TFPList; APackage: TIDEPackage;
|
||||||
OnlyTestIfPossible: boolean = false): TModalResult; override;
|
OnlyTestIfPossible: boolean = false): TModalResult; override;
|
||||||
@ -3269,11 +3269,12 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPkgManager.GetRequiredPackages(AnOwner: TObject; PkgList: TFPList;
|
procedure TPkgManager.GetRequiredPackages(AnOwner: TObject; out PkgList: TFPList;
|
||||||
Flags: TPkgIntfRequiredFlags);
|
Flags: TPkgIntfRequiredFlags);
|
||||||
var
|
var
|
||||||
Dependency: TPkgDependency;
|
Dependency: TPkgDependency;
|
||||||
begin
|
begin
|
||||||
|
PkgList:=nil;
|
||||||
Dependency:=nil;
|
Dependency:=nil;
|
||||||
if AnOwner is TProject then
|
if AnOwner is TProject then
|
||||||
Dependency:=TProject(AnOwner).FirstRequiredDependency
|
Dependency:=TProject(AnOwner).FirstRequiredDependency
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user