mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-04 19:58:25 +02:00
IDE: Optimize adding component dependencies. Don't try to add same unit many times. Issue #37593.
git-svn-id: trunk@63791 -
This commit is contained in:
parent
02e9b21883
commit
bede7c1c4a
@ -13383,6 +13383,9 @@ begin
|
|||||||
if ADesigner.LookupRoot.ComponentCount>0 then
|
if ADesigner.LookupRoot.ComponentCount>0 then
|
||||||
begin
|
begin
|
||||||
ComponentClassNames:=TStringList.Create;
|
ComponentClassNames:=TStringList.Create;
|
||||||
|
ComponentClassNames.Sorted:=True;
|
||||||
|
ComponentClassNames.Duplicates:=dupIgnore;
|
||||||
|
ComponentClassNames.CaseSensitive:=False;
|
||||||
try
|
try
|
||||||
for i:=0 to ADesigner.LookupRoot.ComponentCount-1 do
|
for i:=0 to ADesigner.LookupRoot.ComponentCount-1 do
|
||||||
ComponentClassNames.Add(ADesigner.LookupRoot.Components[i].ClassName);
|
ComponentClassNames.Add(ADesigner.LookupRoot.Components[i].ClassName);
|
||||||
|
@ -4492,7 +4492,8 @@ var
|
|||||||
Result:=LoadAndParseUnitBuf;
|
Result:=LoadAndParseUnitBuf;
|
||||||
if Result<>mrOk then exit;
|
if Result<>mrOk then exit;
|
||||||
for i:=0 to UnitNames.Count-1 do begin
|
for i:=0 to UnitNames.Count-1 do begin
|
||||||
DebugLn('Hint: (lazarus) [TPkgManager.AddUnitDependenciesForComponentClasses] Extending Uses ',UnitBuf.Filename,' ',UnitNames[i]);
|
DebugLn('Hint: (lazarus) [TPkgManager.AddUnitDependenciesForComponentClasses] Extending Uses ',
|
||||||
|
UnitBuf.Filename,' ',UnitNames[i]);
|
||||||
if not CodeToolBoss.AddUnitToMainUsesSection(UnitBuf,UnitNames[i],'') then
|
if not CodeToolBoss.AddUnitToMainUsesSection(UnitBuf,UnitNames[i],'') then
|
||||||
MainIDE.DoJumpToCodeToolBossError;
|
MainIDE.DoJumpToCodeToolBossError;
|
||||||
end;
|
end;
|
||||||
@ -4566,15 +4567,20 @@ begin
|
|||||||
AllPackages:=nil;
|
AllPackages:=nil;
|
||||||
CurUnitNames:=TStringList.Create;
|
CurUnitNames:=TStringList.Create;
|
||||||
try
|
try
|
||||||
for CurClassID:=0 to ComponentClassnames.Count-1 do begin
|
for CurClassID:=0 to ComponentClassnames.Count-1 do
|
||||||
|
begin
|
||||||
CurCompClass:=ComponentClassnames[CurClassID];
|
CurCompClass:=ComponentClassnames[CurClassID];
|
||||||
CurRegisteredComponent:=IDEComponentPalette.FindComponent(CurCompClass);
|
CurRegisteredComponent:=IDEComponentPalette.FindComponent(CurCompClass);
|
||||||
if CurRegisteredComponent is TPkgComponent then begin
|
if CurRegisteredComponent is TPkgComponent then
|
||||||
|
begin
|
||||||
CurUnitName:='';
|
CurUnitName:='';
|
||||||
CurUnitNames.Clear;
|
CurUnitNames.Clear;
|
||||||
CurCompReq:=nil;
|
CurCompReq:=nil;
|
||||||
|
if UnitList=nil then
|
||||||
|
UnitList:=TStringList.Create;
|
||||||
try
|
try
|
||||||
if CurRegisteredComponent.ComponentClass<>nil then begin
|
if CurRegisteredComponent.ComponentClass<>nil then
|
||||||
|
begin
|
||||||
CurUnitName:=GetClassUnitName(CurRegisteredComponent.ComponentClass);
|
CurUnitName:=GetClassUnitName(CurRegisteredComponent.ComponentClass);
|
||||||
CurCompReq:=GetComponentRequirements(CurRegisteredComponent.ComponentClass);
|
CurCompReq:=GetComponentRequirements(CurRegisteredComponent.ComponentClass);
|
||||||
end;
|
end;
|
||||||
@ -4584,38 +4590,40 @@ begin
|
|||||||
CurUnitNames.Add(CurUnitName);
|
CurUnitNames.Add(CurUnitName);
|
||||||
if CurCompReq<>nil then
|
if CurCompReq<>nil then
|
||||||
CurCompReq.RequiredUnits(CurUnitNames);
|
CurCompReq.RequiredUnits(CurUnitNames);
|
||||||
for CurUnitIdx:=0 to CurUnitNames.Count-1 do begin
|
for CurUnitIdx:=0 to CurUnitNames.Count-1 do
|
||||||
if UnitList=nil then begin
|
begin
|
||||||
UnitList:=TStringList.Create;
|
|
||||||
UnitList.CaseSensitive:=False;
|
|
||||||
UnitList.Duplicates:=dupIgnore;
|
|
||||||
end;
|
|
||||||
CurUnitName:=CurUnitNames[CurUnitIdx];
|
CurUnitName:=CurUnitNames[CurUnitIdx];
|
||||||
UnitList.Add(CurUnitName);
|
UnitList.Add(CurUnitName);
|
||||||
PkgFile:=PackageGraph.FindUnitInAllPackages(CurUnitName,true);
|
PkgFile:=PackageGraph.FindUnitInAllPackages(CurUnitName,true);
|
||||||
//DebugLn(['TPkgManager.GetUnitsAndDependenciesForComponents PkgFile=',PkgFile<>nil]);
|
//DebugLn(['TPkgManager.GetUnitsAndDependenciesForComponents PkgFile=',PkgFile<>nil]);
|
||||||
if PkgFile=nil then
|
if PkgFile=nil then
|
||||||
PkgFile:=TPkgComponent(CurRegisteredComponent).PkgFile;
|
PkgFile:=TPkgComponent(CurRegisteredComponent).PkgFile;
|
||||||
if PkgFile<>nil then begin
|
if PkgFile<>nil then
|
||||||
|
begin
|
||||||
RequiredPackage:=PkgFile.LazPackage;
|
RequiredPackage:=PkgFile.LazPackage;
|
||||||
RequiredPackage:=RedirectPackageDependency(TIDEPackage(RequiredPackage));
|
RequiredPackage:=RedirectPackageDependency(TIDEPackage(RequiredPackage));
|
||||||
if RequiredPackage<>nil then begin
|
if RequiredPackage<>nil then
|
||||||
if CurPackages=nil then begin
|
begin
|
||||||
|
if CurPackages=nil then
|
||||||
|
begin
|
||||||
CurPackages:=TStringList.Create;
|
CurPackages:=TStringList.Create;
|
||||||
|
CurPackages.Sorted:=True;
|
||||||
CurPackages.Duplicates:=dupIgnore;
|
CurPackages.Duplicates:=dupIgnore;
|
||||||
CurPackages.CaseSensitive:=False;
|
CurPackages.CaseSensitive:=False;
|
||||||
end else
|
end else
|
||||||
CurPackages.Clear;
|
CurPackages.Clear;
|
||||||
|
if AllPackages=nil then
|
||||||
|
begin
|
||||||
|
AllPackages:=TStringList.Create;
|
||||||
|
AllPackages.Sorted:=True;
|
||||||
|
AllPackages.Duplicates:=dupIgnore;
|
||||||
|
AllPackages.CaseSensitive:=False;
|
||||||
|
end;
|
||||||
CurPackages.Add(RequiredPackage.Name);
|
CurPackages.Add(RequiredPackage.Name);
|
||||||
if Assigned(CurCompReq) then
|
if Assigned(CurCompReq) then
|
||||||
CurCompReq.RequiredPkgs(CurPackages);
|
CurCompReq.RequiredPkgs(CurPackages);
|
||||||
Helper:=TPackageIterateHelper.Create;
|
Helper:=TPackageIterateHelper.Create;
|
||||||
try
|
try
|
||||||
if AllPackages=nil then begin
|
|
||||||
AllPackages:=TStringList.Create;
|
|
||||||
AllPackages.CaseSensitive:=False;
|
|
||||||
AllPackages.Duplicates:=dupIgnore;
|
|
||||||
end;
|
|
||||||
Helper.PackageNames:=CurPackages;
|
Helper.PackageNames:=CurPackages;
|
||||||
Helper.PackageList:=AllPackages;
|
Helper.PackageList:=AllPackages;
|
||||||
PackageGraph.IteratePackages(fpfSearchAllExisting,@Helper.AddDependency);
|
PackageGraph.IteratePackages(fpfSearchAllExisting,@Helper.AddDependency);
|
||||||
@ -4630,9 +4638,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if AllPackages.Count>0 then begin
|
if Assigned(AllPackages) and (AllPackages.Count>0) then
|
||||||
if AllPackages.Count>0 then
|
begin
|
||||||
PackageList:=TPackagePackageArray.Create;
|
PackageList:=TPackagePackageArray.Create;
|
||||||
for CurPackageIdx:=0 to AllPackages.Count-1 do
|
for CurPackageIdx:=0 to AllPackages.Count-1 do
|
||||||
PackageList.Add(TLazPackageID(AllPackages.Objects[CurPackageIdx]));
|
PackageList.Add(TLazPackageID(AllPackages.Objects[CurPackageIdx]));
|
||||||
end;
|
end;
|
||||||
@ -4647,8 +4655,7 @@ end;
|
|||||||
function TPkgManager.FilterMissingDependenciesForUnit(const UnitFilename: string;
|
function TPkgManager.FilterMissingDependenciesForUnit(const UnitFilename: string;
|
||||||
InputPackageList: TPackagePackageArray;
|
InputPackageList: TPackagePackageArray;
|
||||||
out OutputPackageList: TOwnerPackageArray): TModalResult;
|
out OutputPackageList: TOwnerPackageArray): TModalResult;
|
||||||
// returns a list of packages that are not yet used by the project the unit
|
// returns a list of packages that are not yet used by the project the unit belongs to
|
||||||
// belongs to
|
|
||||||
var
|
var
|
||||||
UnitOwners: TFPList;
|
UnitOwners: TFPList;
|
||||||
UnitOwner: TObject;
|
UnitOwner: TObject;
|
||||||
|
Loading…
Reference in New Issue
Block a user