Packager refactoring. Move funcs and methods to IdeIntf. Prepare for PackageLink interface.

git-svn-id: trunk@54405 -
This commit is contained in:
juha 2017-03-15 13:13:36 +00:00
parent f4df80d90f
commit e542ddbfcd
8 changed files with 103 additions and 91 deletions

View File

@ -5,7 +5,11 @@ unit PackageDependencyIntf;
interface
uses
Classes, SysUtils;
Classes, SysUtils,
// LazUtils
LazFileUtils,
// IdeIntf
IDEUtils;
type
@ -63,6 +67,9 @@ type
constructor Create;
destructor Destroy; override;
procedure Clear; virtual;
function IsMakingSense: boolean;
function IsCompatible(const Version: TPkgVersion): boolean; overload;
function IsCompatible(const PkgName: string; const Version: TPkgVersion): boolean; overload;
// API for iterating dependencies.
function NextUsedByDependency: TPkgDependencyBase; virtual; abstract;
function PrevUsedByDependency: TPkgDependencyBase; virtual; abstract;
@ -81,8 +88,34 @@ type
property Removed: boolean read FRemoved write FRemoved;
end;
function IsValidUnitName(AUnitName: String): Boolean; inline;
function IsValidPkgName(APkgName: String): Boolean; inline;
function PackageFileNameIsValid(const AFilename: string): boolean;
implementation
function IsValidUnitName(AUnitName: String): Boolean;
begin
Result := LazIsValidIdent(AUnitName, True, True);
end;
function IsValidPkgName(APkgName: String): Boolean;
begin
Result := LazIsValidIdent(APkgName, True, True);
end;
function PackageFileNameIsValid(const AFilename: string): boolean;
var
PkgName: String;
begin
Result:=false;
if CompareFileExt(AFilename,'.lpk',false)<>0 then exit;
PkgName:=ExtractFileNameOnly(AFilename);
if (PkgName='') or (not IsValidPkgName(PkgName)) then exit;
Result:=true;
end;
{ TPkgVersion }
procedure TPkgVersion.Clear;
@ -229,5 +262,28 @@ begin
FMinVersion.Clear;
end;
function TPkgDependencyBase.IsMakingSense: boolean;
begin
Result:=IsValidPkgName(PackageName);
if Result
and (pdfMinVersion in FFlags) and (pdfMaxVersion in FFlags)
and (MinVersion.Compare(MaxVersion)>0) then
Result:=false;
end;
function TPkgDependencyBase.IsCompatible(const Version: TPkgVersion): boolean;
begin
if ((pdfMinVersion in FFlags) and (MinVersion.Compare(Version)>0))
or ((pdfMaxVersion in FFlags) and (MaxVersion.Compare(Version)<0)) then
Result:=false
else
Result:=true;
end;
function TPkgDependencyBase.IsCompatible(const PkgName: string; const Version: TPkgVersion): boolean;
begin
Result:=(CompareText(PkgName,PackageName)=0) and IsCompatible(Version);
end;
end.

View File

@ -125,6 +125,8 @@ type
property IDAsWord: string read GetIDAsWord;
end;
TIteratePackagesEvent = procedure(APackage: TLazPackageID) of object;
TPackageInstallType = (
pitNope,
pitStatic,
@ -369,15 +371,19 @@ var
PackageGraphInterface: TPackageGraphInterface; // must be set along with PackageSystem.PackageGraph
procedure RegisterPackageDescriptor(PkgDesc: TPackageDescriptor);
function PackageDescriptorStd: TPackageDescriptor;
function PkgCompileFlagsToString(Flags: TPkgCompileFlags): string;
procedure RegisterPackageDescriptor(PkgDesc: TPackageDescriptor);
implementation
function PackageDescriptorStd: TPackageDescriptor;
begin
Result:=PackageDescriptors.FindByName(PkgDescNameStandard);
end;
function PkgCompileFlagsToString(Flags: TPkgCompileFlags): string;
var
f: TPkgCompileFlag;
@ -406,10 +412,6 @@ begin
end;
end;
function PackageDescriptorStd: TPackageDescriptor;
begin
Result:=PackageDescriptors.FindByName(PkgDescNameStandard);
end;
{ TPackageGraphInterface }

View File

@ -40,16 +40,22 @@ unit JITForms;
{ $DEFINE VerboseJITForms}
interface
uses
{$IFDEF IDE_MEM_CHECK}
MemCheck,
{$ENDIF}
Classes, SysUtils, AvgLvlTree, BasicCodeTools, TypInfo, LCLProc, LResources,
Forms, Controls, LCLMemManager, LCLIntf, Dialogs,
PropEditUtils, PropEdits, UnitResources, IDEDialogs,
Classes, SysUtils, TypInfo,
// LCL
Forms, Controls, Dialogs, LResources, LCLMemManager, LCLIntf, LCLProc,
//LazUtils
AvgLvlTree,
// CodeTools
BasicCodeTools,
// IdeIntf
PackageDependencyIntf, PropEditUtils, PropEdits, UnitResources, IDEDialogs,
// IDE
IDEProcs, PackageDefs, BasePkgManager, DesignerProcs;
type

View File

@ -42,10 +42,10 @@ uses
BasicCodeTools, CodeToolsStructs, CodeToolManager, FileProcs, DefineTemplates,
CodeCache, CodeTree, FindDeclarationTool, KeywordFuncLists,
// IdeIntf
IDEDialogs, PropEdits, IDEMsgIntf, LazIDEIntf, MenuIntf, NewItemIntf,
CompOptsIntf, SrcEditorIntf, IDEWindowIntf, ProjectIntf, PackageIntf,
FormEditingIntf, IDEExternToolIntf, ObjectInspector, UnitResources, ComponentReg,
EditorSyntaxHighlighterDef,
IDEDialogs, PropEdits, IDEMsgIntf, LazIDEIntf, MenuIntf, NewItemIntf, CompOptsIntf,
IDEWindowIntf, ProjectIntf, PackageIntf, PackageDependencyIntf, FormEditingIntf,
IDEExternToolIntf, ObjectInspector, UnitResources, ComponentReg,
SrcEditorIntf, EditorSyntaxHighlighterDef,
// IDE
IDEProcs, DialogProcs, IDEProtocol, LazarusIDEStrConsts, NewDialog, NewProjectDlg,
MainBase, MainBar, MainIntf, Project, ProjectDefs, ProjectInspector, CompilerOptions,

View File

@ -65,8 +65,6 @@ type
);
TPackageUpdatePolicies = set of TPackageUpdatePolicy;
TIteratePackagesEvent =
procedure(APackage: TLazPackageID) of object;
TGetAllRequiredPackagesEvent =
procedure(APackage: TLazPackage; // if not nil then ignore FirstDependency and do not add APackage to Result
FirstDependency: TPkgDependency;
@ -255,15 +253,12 @@ type
FileVersion: integer);
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string;
UsePathDelim: TPathDelimSwitch);
function IsMakingSense: boolean;
function IsCompatible(const Version: TPkgVersion): boolean;
function IsCompatible(const PkgName: string;
const Version: TPkgVersion): boolean;
function Compare(Dependency2: TPkgDependency): integer;
procedure Assign(Source: TPkgDependency);
procedure Assign(Source: TLazPackageID);
procedure ConsistencyCheck;
function IsCompatible(Pkg: TLazPackageID): boolean;
function IsCompatible(Pkg: TLazPackageID): boolean; overload;
procedure MakeCompatible(const PkgName: string; const Version: TPkgVersion);
function AsString(WithOwner: boolean = false; WithDefaults: boolean = false): string;
// API for iterating dependencies.
@ -868,8 +863,6 @@ function FindNextPkgDependencyNodeWithSameName(Node: TAVLTreeNode): TAVLTreeNode
function GetDependencyOwnerAsString(Dependency: TPkgDependency): string;
function GetDependencyOwnerDirectory(Dependency: TPkgDependency): string;
function PackageFileNameIsValid(const AFilename: string): boolean;
procedure PkgVersionLoadFromXMLConfig(Version: TPkgVersion;
XMLConfig: TXMLConfig; const Path: string; FileVersion: integer);
procedure PkgVersionSaveToXMLConfig(Version: TPkgVersion; XMLConfig: TXMLConfig;
@ -877,9 +870,6 @@ procedure PkgVersionSaveToXMLConfig(Version: TPkgVersion; XMLConfig: TXMLConfig;
procedure PkgVersionLoadFromXMLConfig(Version: TPkgVersion;
XMLConfig: TXMLConfig);
function IsValidUnitName(AUnitName: String): Boolean; inline;
function IsValidPkgName(APkgName: String): Boolean; inline;
var
Package1: TLazPackage; // don't use it - only for options dialog
@ -887,19 +877,9 @@ function dbgs(p: TPackageUpdatePolicy): string; overload;
function dbgs(p: TLazPackageType): string; overload;
function PackagePathToStr(PathList: TFPList): string;
implementation
function IsValidUnitName(AUnitName: String): Boolean;
begin
Result := IsDottedIdentifier(AUnitName);
end;
function IsValidPkgName(APkgName: String): Boolean;
begin
Result := IsDottedIdentifier(APkgName);
end;
function PkgFileTypeIdentToType(const s: string): TPkgFileType;
begin
for Result:=Low(TPkgFileType) to High(TPkgFileType) do
@ -1333,17 +1313,6 @@ begin
OnGetDependencyOwnerDirectory(Dependency,Result);
end;
function PackageFileNameIsValid(const AFilename: string): boolean;
var
PkgName: String;
begin
Result:=false;
if CompareFileExt(AFilename,'.lpk',false)<>0 then exit;
PkgName:=ExtractFileNameOnly(AFilename);
if (PkgName='') or (not IsValidPkgName(PkgName)) then exit;
Result:=true;
end;
procedure PkgVersionLoadFromXMLConfig(Version: TPkgVersion;
XMLConfig: TXMLConfig; const Path: string; FileVersion: integer);
var
@ -1897,30 +1866,6 @@ begin
XMLConfig.SetDeleteValue(Path+'DefaultFilename/Prefer',PreferDefaultFilename,false);
end;
function TPkgDependency.IsMakingSense: boolean;
begin
Result:=IsValidPkgName(PackageName);
if Result
and (pdfMinVersion in FFlags) and (pdfMaxVersion in FFlags)
and (MinVersion.Compare(MaxVersion)>0) then
Result:=false;
end;
function TPkgDependency.IsCompatible(const Version: TPkgVersion): boolean;
begin
if ((pdfMinVersion in FFlags) and (MinVersion.Compare(Version)>0))
or ((pdfMaxVersion in FFlags) and (MaxVersion.Compare(Version)<0)) then
Result:=false
else
Result:=true;
end;
function TPkgDependency.IsCompatible(const PkgName: string;
const Version: TPkgVersion): boolean;
begin
Result:=(SysUtils.CompareText(PkgName,PackageName)=0) and IsCompatible(Version);
end;
function TPkgDependency.Compare(Dependency2: TPkgDependency): integer;
begin
Result:=SysUtils.CompareText(PackageName,Dependency2.PackageName);
@ -1969,8 +1914,7 @@ begin
if MaxVersion.Compare(Version)<0 then MaxVersion.Assign(Version);
end;
function TPkgDependency.AsString(WithOwner: boolean; WithDefaults: boolean
): string;
function TPkgDependency.AsString(WithOwner: boolean; WithDefaults: boolean): string;
begin
if Self=nil then
exit('(nil)');
@ -3054,9 +2998,7 @@ end;
function TLazPackage.IsMakingSense: boolean;
begin
Result:=false;
if not IsValidPkgName(Name) then exit;
Result:=true;
Result:=IsValidPkgName(Name);
end;
procedure TLazPackage.ShortenFilename(var ExpandedFilename: string; UseUp: boolean);

View File

@ -144,7 +144,7 @@ type
function FindLinkWithPkgNameInTree(LinkTree: TAvgLvlTree;
const PkgName: string; IgnoreFiles: TFilenameToStringTree): TPackageLink;
function FindLinkWithDependencyInTree(LinkTree: TAvgLvlTree;
Dependency: TPkgDependency; IgnoreFiles: TFilenameToStringTree): TPackageLink;
Dependency: TPkgDependencyID; IgnoreFiles: TFilenameToStringTree): TPackageLink;
function FindLinkWithPackageIDInTree(LinkTree: TAvgLvlTree;
APackageID: TLazPackageID): TPackageLink;
function FindLinkWithLPKFilenameInTree(LinkTree: TAvgLvlTree;
@ -176,13 +176,13 @@ type
procedure WriteLinkTree(LinkTree: TAvgLvlTree);
function FindLinkWithPkgName(const PkgName: string;
IgnoreFiles: TFilenameToStringTree = nil): TPackageLink;
function FindLinkWithDependency(Dependency: TPkgDependency;
function FindLinkWithDependency(Dependency: TPkgDependencyID;
IgnoreFiles: TFilenameToStringTree = nil): TPackageLink;
function FindLinkWithPackageID(APackageID: TLazPackageID): TPackageLink;
function FindLinkWithFilename(const PkgName, LPKFilename: string): TPackageLink;
procedure IteratePackages(MustExist: boolean; Event: TIteratePackagesEvent;
Origins: TPkgLinkOrigins = AllPkgLinkOrigins);
function AddUserLink(APackage: TLazPackage): TPackageLink;
function AddUserLink(APackage: TIDEPackage): TPackageLink;
function AddUserLink(const PkgFilename, PkgName: string): TPackageLink;// do not use this if package is open in IDE
procedure RemoveUserLink(Link: TPackageLink);
procedure RemoveUserLinks(APackageID: TLazPackageID);
@ -1022,7 +1022,7 @@ begin
end;
function TPackageLinks.FindLinkWithDependencyInTree(LinkTree: TAvgLvlTree;
Dependency: TPkgDependency; IgnoreFiles: TFilenameToStringTree): TPackageLink;
Dependency: TPkgDependencyID; IgnoreFiles: TFilenameToStringTree): TPackageLink;
var
Link: TPackageLink;
CurNode: TAvgLvlTreeNode;
@ -1165,7 +1165,7 @@ begin
Result:=GetNewerLink(UserLink,GlobalLink);
end;
function TPackageLinks.FindLinkWithDependency(Dependency: TPkgDependency;
function TPackageLinks.FindLinkWithDependency(Dependency: TPkgDependencyID;
IgnoreFiles: TFilenameToStringTree): TPackageLink;
var
UserLink, GlobalLink: TPackageLink;
@ -1204,7 +1204,7 @@ begin
IteratePackagesInTree(MustExist,FGlobalLinks,Event);
end;
function TPackageLinks.AddUserLink(APackage: TLazPackage): TPackageLink;
function TPackageLinks.AddUserLink(APackage: TIDEPackage): TPackageLink;
var
OldLink: TPackageLink;
NewLink: TPackageLink;
@ -1244,8 +1244,7 @@ begin
end;
end;
function TPackageLinks.AddUserLink(const PkgFilename, PkgName: string
): TPackageLink;
function TPackageLinks.AddUserLink(const PkgFilename, PkgName: string): TPackageLink;
var
OldLink: TPackageLink;
NewLink: TPackageLink;

View File

@ -56,9 +56,9 @@ uses
CodeToolsConfig, CodeToolManager, CodeCache, CodeToolsStructs, BasicCodeTools,
FileProcs, CodeTree,
// IDE Interface
SrcEditorIntf, NewItemIntf, ProjPackIntf, ProjectIntf, PackageIntf, CompOptsIntf,
MenuIntf, IDEWindowIntf, IDEExternToolIntf, MacroIntf, LazIDEIntf, IDEMsgIntf,
ComponentReg, PropEdits, IDEDialogs, UnitResources,
NewItemIntf, ProjPackIntf, ProjectIntf, PackageIntf, PackageDependencyIntf,
CompOptsIntf, MenuIntf, IDEWindowIntf, IDEExternToolIntf, MacroIntf, LazIDEIntf,
IDEMsgIntf, SrcEditorIntf, ComponentReg, PropEdits, IDEDialogs, UnitResources,
// IDE
PkgRegisterBase, IDECmdLine, LazarusIDEStrConsts, IDEProcs, ObjectLists,
DialogProcs, IDECommands, IDEOptionDefs, EnvironmentOpts, MiscOptions,

View File

@ -38,8 +38,15 @@ unit PkgVirtualUnitEditor;
interface
uses
Classes, SysUtils, Forms, Controls, Dialogs,
PackageDefs, FileUtil, LazFileUtils, LazarusIDEStrConsts;
Classes, SysUtils,
// LCL
Forms, Controls, Dialogs,
// LazUtils
FileUtil, LazFileUtils,
// IdeIntf
PackageDependencyIntf,
// IDE
PackageDefs, LazarusIDEStrConsts;
function ShowEditVirtualPackageDialog(PkgFile: TPkgFile): TModalResult;