mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-25 10:39:22 +02:00
IDE: fixed regression #40181, add designtime package
This commit is contained in:
parent
f479581489
commit
785fdec71b
@ -4506,45 +4506,17 @@ function TPkgManager.GetUnitsAndDepsForComps(ComponentClasses: TClassList;
|
|||||||
out PackageList: TPackagePackageArray; out UnitList: TStringList): TModalResult;
|
out PackageList: TPackagePackageArray; out UnitList: TStringList): TModalResult;
|
||||||
// returns a list of packages and units needed to use the Component in the unit
|
// returns a list of packages and units needed to use the Component in the unit
|
||||||
var
|
var
|
||||||
CurPackages, AllPackages: TStringList;
|
CurPackages: TStringListUTF8Fast;
|
||||||
|
|
||||||
procedure AddPkgDep(CurCompReq: TComponentRequirements; PkgFile: TPkgFile;
|
procedure AddPkgDep(PkgFile: TPkgFile);
|
||||||
OnlyDesigntime: boolean);
|
|
||||||
var
|
var
|
||||||
RequiredPackage: TLazPackageID;
|
RequiredPackage: TLazPackageID;
|
||||||
Helper: TPackageIterateHelper;
|
|
||||||
begin
|
begin
|
||||||
if PkgFile=nil then exit;
|
if PkgFile=nil then exit;
|
||||||
RequiredPackage:=PkgFile.LazPackage;
|
RequiredPackage:=PkgFile.LazPackage;
|
||||||
RequiredPackage:=RedirectPackageDependency(TIDEPackage(RequiredPackage));
|
RequiredPackage:=RedirectPackageDependency(TIDEPackage(RequiredPackage));
|
||||||
if RequiredPackage=nil then exit;
|
if RequiredPackage=nil then exit;
|
||||||
if OnlyDesigntime and (TIDEPackage(RequiredPackage).PackageType<>lptDesignTime) then
|
|
||||||
exit;
|
|
||||||
|
|
||||||
if CurPackages=nil then
|
|
||||||
begin
|
|
||||||
CurPackages:=TStringListUTF8Fast.Create;
|
|
||||||
CurPackages.Sorted:=True;
|
|
||||||
CurPackages.Duplicates:=dupIgnore;
|
|
||||||
end else
|
|
||||||
CurPackages.Clear;
|
|
||||||
if AllPackages=nil then
|
|
||||||
begin
|
|
||||||
AllPackages:=TStringListUTF8Fast.Create;
|
|
||||||
AllPackages.Sorted:=True;
|
|
||||||
AllPackages.Duplicates:=dupIgnore;
|
|
||||||
end;
|
|
||||||
CurPackages.Add(RequiredPackage.Name);
|
CurPackages.Add(RequiredPackage.Name);
|
||||||
if Assigned(CurCompReq) then
|
|
||||||
CurCompReq.RequiredPkgs(CurPackages);
|
|
||||||
Helper:=TPackageIterateHelper.Create;
|
|
||||||
try
|
|
||||||
Helper.PackageNames:=CurPackages;
|
|
||||||
Helper.PackageList:=AllPackages;
|
|
||||||
PackageGraph.IteratePackages(fpfSearchAllExisting,@Helper.AddDependency);
|
|
||||||
finally
|
|
||||||
Helper.Free;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -4554,14 +4526,18 @@ var
|
|||||||
CurRegComp: TRegisteredComponent;
|
CurRegComp: TRegisteredComponent;
|
||||||
PkgFile: TPkgFile;
|
PkgFile: TPkgFile;
|
||||||
CurUnitName: String;
|
CurUnitName: String;
|
||||||
CurUnitNames: TStrings;
|
CurCompReqs: TComponentRequirements;
|
||||||
CurCompReq: TComponentRequirements;
|
ExistingPkgs, AllPackages, CurUnitNames: TStringListUTF8Fast;
|
||||||
|
Helper: TPackageIterateHelper;
|
||||||
begin
|
begin
|
||||||
Result:=mrCancel;
|
Result:=mrCancel;
|
||||||
PackageList:=nil;
|
PackageList:=nil;
|
||||||
UnitList:=nil;
|
UnitList:=nil;
|
||||||
|
ExistingPkgs:=nil;
|
||||||
|
AllPackages:=TStringListUTF8Fast.Create;
|
||||||
|
AllPackages.Sorted:=True;
|
||||||
|
AllPackages.Duplicates:=dupIgnore;
|
||||||
CurPackages:=nil;
|
CurPackages:=nil;
|
||||||
AllPackages:=nil;
|
|
||||||
CurUnitNames:=TStringListUTF8Fast.Create;
|
CurUnitNames:=TStringListUTF8Fast.Create;
|
||||||
try
|
try
|
||||||
for CurClassID:=0 to ComponentClasses.Count-1 do
|
for CurClassID:=0 to ComponentClasses.Count-1 do
|
||||||
@ -4572,48 +4548,70 @@ begin
|
|||||||
begin
|
begin
|
||||||
CurUnitName:='';
|
CurUnitName:='';
|
||||||
CurUnitNames.Clear;
|
CurUnitNames.Clear;
|
||||||
CurCompReq:=nil;
|
CurCompReqs:=nil;
|
||||||
if UnitList=nil then
|
if UnitList=nil then
|
||||||
begin
|
begin
|
||||||
UnitList:=TStringListUTF8Fast.Create;
|
UnitList:=TStringListUTF8Fast.Create;
|
||||||
UnitList.Sorted:=True;
|
UnitList.Sorted:=True;
|
||||||
UnitList.Duplicates:=dupIgnore;
|
UnitList.Duplicates:=dupIgnore;
|
||||||
end;
|
end;
|
||||||
|
if CurPackages=nil then
|
||||||
|
begin
|
||||||
|
CurPackages:=TStringListUTF8Fast.Create;
|
||||||
|
CurPackages.Sorted:=True;
|
||||||
|
CurPackages.Duplicates:=dupIgnore;
|
||||||
|
end else
|
||||||
|
CurPackages.Clear;
|
||||||
|
|
||||||
if CurRegComp.ComponentClass<>nil then
|
if CurRegComp.ComponentClass<>nil then
|
||||||
begin
|
begin
|
||||||
CurUnitName:=CurRegComp.ComponentClass.UnitName;
|
CurUnitName:=CurRegComp.ComponentClass.UnitName;
|
||||||
CurCompReq:=GetComponentRequirements(CurRegComp.ComponentClass);
|
CurCompReqs:=GetComponentRequirements(CurRegComp.ComponentClass);
|
||||||
end;
|
end;
|
||||||
//DebugLn(['TPkgManager.GetUnitsAndDepsForComps: CurCompClass=',DbgSName(CurCompClass),' CurUnitName=',CurUnitName,' CurCompReq=',DbgSName(CurCompReq)]);
|
//DebugLn(['TPkgManager.GetUnitsAndDepsForComps: CurCompClass=',DbgSName(CurCompClass),' CurUnitName=',CurUnitName,' CurCompReq=',DbgSName(CurCompReqs)]);
|
||||||
if CurUnitName='' then
|
if CurUnitName='' then
|
||||||
CurUnitName:=CurRegComp.GetUnitName;
|
CurUnitName:=CurRegComp.GetUnitName;
|
||||||
//Assert(CurUnitNames.IndexOf(CurUnitName)<0,
|
//Assert(CurUnitNames.IndexOf(CurUnitName)<0,
|
||||||
// 'TPkgManager.GetUnitsAndDepsForComps: Name already in CurUnitNames.');
|
// 'TPkgManager.GetUnitsAndDepsForComps: Name already in CurUnitNames.');
|
||||||
CurUnitNames.Add(CurUnitName);
|
CurUnitNames.Add(CurUnitName);
|
||||||
if CurCompReq<>nil then
|
if CurCompReqs<>nil then
|
||||||
CurCompReq.RequiredUnits(CurUnitNames);
|
CurCompReqs.RequiredUnits(CurUnitNames);
|
||||||
for CurUnitIdx:=0 to CurUnitNames.Count-1 do
|
for CurUnitIdx:=0 to CurUnitNames.Count-1 do
|
||||||
begin
|
begin
|
||||||
CurUnitName:=CurUnitNames[CurUnitIdx];
|
CurUnitName:=CurUnitNames[CurUnitIdx];
|
||||||
UnitList.Add(CurUnitName);
|
UnitList.Add(CurUnitName);
|
||||||
PkgFile:=PackageGraph.FindUnitInAllPackages(CurUnitName,true);
|
PkgFile:=PackageGraph.FindUnitInAllPackages(CurUnitName,true);
|
||||||
AddPkgDep(CurCompReq,PkgFile,false);
|
AddPkgDep(PkgFile);
|
||||||
if TPkgComponent(CurRegComp).PkgFile<>PkgFile then
|
end;
|
||||||
// e.g. a designtime package has registered the componentclass
|
// dont forget to add the designtime package
|
||||||
AddPkgDep(nil,TPkgComponent(CurRegComp).PkgFile,true);
|
AddPkgDep(TPkgComponent(CurRegComp).PkgFile);
|
||||||
end; // for CurUnitIdx:=
|
if CurCompReqs<>nil then
|
||||||
|
CurCompReqs.RequiredPkgs(CurPackages);// let addons add extra pkgs
|
||||||
|
AllPackages.AddStrings(CurPackages);
|
||||||
end;
|
end;
|
||||||
end; // for CurClassID:=...
|
end; // for CurClassID:=...
|
||||||
if Assigned(AllPackages) and (AllPackages.Count>0) then
|
if AllPackages.Count>0 then
|
||||||
begin
|
begin
|
||||||
|
ExistingPkgs:=TStringListUTF8Fast.Create;
|
||||||
|
ExistingPkgs.Sorted:=True;
|
||||||
|
ExistingPkgs.Duplicates:=dupIgnore;
|
||||||
|
Helper:=TPackageIterateHelper.Create;
|
||||||
|
try
|
||||||
|
Helper.PackageNames:=AllPackages;
|
||||||
|
Helper.PackageList:=ExistingPkgs;
|
||||||
|
PackageGraph.IteratePackages(fpfSearchAllExisting,@Helper.AddDependency);
|
||||||
|
finally
|
||||||
|
Helper.Free;
|
||||||
|
end;
|
||||||
PackageList:=TPackagePackageArray.Create;
|
PackageList:=TPackagePackageArray.Create;
|
||||||
for CurPackageIdx:=0 to AllPackages.Count-1 do
|
for CurPackageIdx:=0 to ExistingPkgs.Count-1 do
|
||||||
PackageList.Add(TLazPackageID(AllPackages.Objects[CurPackageIdx]));
|
PackageList.Add(TLazPackageID(ExistingPkgs.Objects[CurPackageIdx]));
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
CurUnitNames.Free;
|
CurUnitNames.Free;
|
||||||
CurPackages.Free;
|
|
||||||
AllPackages.Free;
|
AllPackages.Free;
|
||||||
|
CurPackages.Free;
|
||||||
|
ExistingPkgs.Free;
|
||||||
end;
|
end;
|
||||||
Result:=mrOk;
|
Result:=mrOk;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user