mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 11:19:26 +02:00
Debugger: start moving value-converters to LazDebuggerIntf.
This commit is contained in:
parent
85f94e62fe
commit
99b40ac097
@ -321,8 +321,24 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
type
|
||||
|
||||
{ TFpDbgValueConverterJsonForDebugRegistryEntry }
|
||||
|
||||
TFpDbgValueConverterJsonForDebugRegistryEntry = class(TFpDbgValueConverterRegistryEntry)
|
||||
public
|
||||
class function GetConvertorClass: TClass; override;
|
||||
end;
|
||||
|
||||
{ TFpDbgValueConverterJsonForDebugRegistryEntry }
|
||||
|
||||
class function TFpDbgValueConverterJsonForDebugRegistryEntry.GetConvertorClass: TClass;
|
||||
begin
|
||||
Result := TFpDbgValueConverterJsonForDebug;
|
||||
end;
|
||||
|
||||
initialization
|
||||
ValueConverterClassList.Add(TFpDbgValueConverterJsonForDebug);
|
||||
ValueConverterRegistry.Add(TFpDbgValueConverterJsonForDebugRegistryEntry);
|
||||
|
||||
end.
|
||||
|
||||
|
@ -42,13 +42,6 @@ type
|
||||
end;
|
||||
TFpDbgValueConverterClass = class of TFpDbgValueConverter;
|
||||
|
||||
{ TFpDbgValueConverterClassList }
|
||||
|
||||
TFpDbgValueConverterClassList = class(specialize TFPGList<TFpDbgValueConverterClass>)
|
||||
function FindByClassName(AName: String): TFpDbgValueConverterClass;
|
||||
end;
|
||||
|
||||
|
||||
{ TFpDbgConverterConfig }
|
||||
|
||||
TFpDbgConverterConfig = class(TFreeNotifyingObject, TLazDbgValueConvertSelectorIntf)
|
||||
@ -88,6 +81,16 @@ type
|
||||
procedure Unlock;
|
||||
end;
|
||||
|
||||
{ TFpDbgValueConverterRegistryEntry }
|
||||
|
||||
TFpDbgValueConverterRegistryEntry = class(TLazDbgValueConvertRegistryEntry)
|
||||
public
|
||||
class function CreateValueConvertorIntf: TLazDbgValueConverterIntf; override;
|
||||
class function GetName: String; override;
|
||||
class function GetDebuggerClass: TClass; override;
|
||||
end;
|
||||
|
||||
|
||||
{ TFpDbgValueConverterVariantToLStr }
|
||||
|
||||
TFpDbgValueConverterVariantToLStr = class(TFpDbgValueConverter)
|
||||
@ -102,22 +105,13 @@ type
|
||||
): TFpValue; override;
|
||||
end;
|
||||
|
||||
function ValueConverterClassList: TFpDbgValueConverterClassList;
|
||||
function ValueConverterConfigList: TFpDbgConverterConfigList;
|
||||
|
||||
implementation
|
||||
var
|
||||
TheValueConverterClassList: TFpDbgValueConverterClassList = nil;
|
||||
TheValueConverterList: TFpDbgConverterConfigList = nil;
|
||||
|
||||
|
||||
function ValueConverterClassList: TFpDbgValueConverterClassList;
|
||||
begin
|
||||
if TheValueConverterClassList = nil then
|
||||
TheValueConverterClassList := TFpDbgValueConverterClassList.Create;
|
||||
Result := TheValueConverterClassList;
|
||||
end;
|
||||
|
||||
function ValueConverterConfigList: TFpDbgConverterConfigList;
|
||||
begin
|
||||
if TheValueConverterList = nil then
|
||||
@ -125,19 +119,6 @@ begin
|
||||
Result := TheValueConverterList;
|
||||
end;
|
||||
|
||||
{ TFpDbgValueConverterClassList }
|
||||
|
||||
function TFpDbgValueConverterClassList.FindByClassName(AName: String
|
||||
): TFpDbgValueConverterClass;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
Result := nil;
|
||||
for i := 0 to Count -1 do
|
||||
if Items[i].ClassName = AName then
|
||||
exit(Items[i]);
|
||||
end;
|
||||
|
||||
{ TFpDbgValueConverter }
|
||||
|
||||
function TFpDbgValueConverter.CreateCopy: TFpDbgValueConverter;
|
||||
@ -391,6 +372,23 @@ begin
|
||||
FLock.Leave;
|
||||
end;
|
||||
|
||||
{ TFpDbgValueConverterRegistryEntry }
|
||||
|
||||
class function TFpDbgValueConverterRegistryEntry.CreateValueConvertorIntf: TLazDbgValueConverterIntf;
|
||||
begin
|
||||
Result := TFpDbgValueConverterClass(GetConvertorClass).Create;
|
||||
end;
|
||||
|
||||
class function TFpDbgValueConverterRegistryEntry.GetName: String;
|
||||
begin
|
||||
Result := TFpDbgValueConverterClass(GetConvertorClass).GetName;
|
||||
end;
|
||||
|
||||
class function TFpDbgValueConverterRegistryEntry.GetDebuggerClass: TClass;
|
||||
begin
|
||||
Result := TFpDebugDebuggerBase;
|
||||
end;
|
||||
|
||||
{ TFpDbgValueConverterVariantToLStr }
|
||||
|
||||
function TFpDbgValueConverterVariantToLStr.GetProcAddrFromMgr(
|
||||
@ -570,11 +568,26 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
type
|
||||
|
||||
{ TFpDbgValueConverterVariantToLStrRegistryEntry }
|
||||
|
||||
TFpDbgValueConverterVariantToLStrRegistryEntry = class(TFpDbgValueConverterRegistryEntry)
|
||||
public
|
||||
class function GetConvertorClass: TClass; override;
|
||||
end;
|
||||
|
||||
{ TFpDbgValueConverterVariantToLStrRegistryEntry }
|
||||
|
||||
class function TFpDbgValueConverterVariantToLStrRegistryEntry.GetConvertorClass: TClass;
|
||||
begin
|
||||
Result := TFpDbgValueConverterVariantToLStr;
|
||||
end;
|
||||
|
||||
initialization
|
||||
ValueConverterClassList.Add(TFpDbgValueConverterVariantToLStr);
|
||||
ValueConverterRegistry.Add(TFpDbgValueConverterVariantToLStrRegistryEntry);
|
||||
|
||||
finalization;
|
||||
FreeAndNil(TheValueConverterClassList);
|
||||
FreeAndNil(TheValueConverterList);
|
||||
|
||||
end.
|
||||
|
@ -6,7 +6,7 @@ unit LazDebuggerValueConverter;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils;
|
||||
Classes, SysUtils, fgl;
|
||||
|
||||
type
|
||||
TLazDbgValueConverterIntf = interface;
|
||||
@ -33,8 +33,63 @@ type
|
||||
function GetBackendSpecificObject: TObject; deprecated;
|
||||
end;
|
||||
|
||||
{ TLazDbgValueConvertRegistryEntry }
|
||||
|
||||
TLazDbgValueConvertRegistryEntry = class
|
||||
public
|
||||
class function CreateValueConvertorIntf: TLazDbgValueConverterIntf; virtual; abstract;
|
||||
class function GetName: String; virtual; abstract;
|
||||
class function GetConvertorClass: TClass; virtual; abstract;
|
||||
class function GetDebuggerClass: TClass; virtual; abstract; // class of TDebuggerIntf
|
||||
end;
|
||||
TLazDbgValueConvertRegistryEntryClass = class of TLazDbgValueConvertRegistryEntry;
|
||||
|
||||
{ TLazDbgValueConvertRegistry }
|
||||
|
||||
TLazDbgValueConvertRegistry = class(specialize TFPGList<TLazDbgValueConvertRegistryEntryClass>)
|
||||
function FindByConvertorClassName(AName: String): TLazDbgValueConvertRegistryEntryClass;
|
||||
function IndexOfConvertorClass(AClass: TClass): integer;
|
||||
end;
|
||||
|
||||
function ValueConverterRegistry: TLazDbgValueConvertRegistry;
|
||||
|
||||
implementation
|
||||
var
|
||||
TheValueConverterRegistry: TLazDbgValueConvertRegistry;
|
||||
|
||||
function ValueConverterRegistry: TLazDbgValueConvertRegistry;
|
||||
begin
|
||||
if TheValueConverterRegistry = nil then
|
||||
TheValueConverterRegistry := TLazDbgValueConvertRegistry.Create;
|
||||
Result := TheValueConverterRegistry;
|
||||
end;
|
||||
|
||||
{ TLazDbgValueConvertRegistry }
|
||||
|
||||
function TLazDbgValueConvertRegistry.FindByConvertorClassName(AName: String
|
||||
): TLazDbgValueConvertRegistryEntryClass;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
Result := nil;
|
||||
for i := 0 to Count -1 do
|
||||
if Items[i].GetConvertorClass.ClassName = AName then
|
||||
exit(Items[i]);
|
||||
end;
|
||||
|
||||
function TLazDbgValueConvertRegistry.IndexOfConvertorClass(AClass: TClass
|
||||
): integer;
|
||||
begin
|
||||
Result := Count - 1;
|
||||
while Result >= 0 do begin
|
||||
if Items[Result].GetConvertorClass = AClass then
|
||||
exit;
|
||||
dec(Result);
|
||||
end;
|
||||
end;
|
||||
|
||||
finalization
|
||||
FreeAndNil(TheValueConverterRegistry);
|
||||
|
||||
end.
|
||||
|
||||
|
@ -5,7 +5,8 @@ unit IdeDebuggerFpDbgValueConv;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Laz2_XMLCfg, FpDebugValueConvertors;
|
||||
Classes, SysUtils, Laz2_XMLCfg, FpDebugValueConvertors,
|
||||
LazDebuggerValueConverter;
|
||||
|
||||
type
|
||||
|
||||
@ -64,18 +65,18 @@ procedure TIdeFpDbgConverterConfig.LoadDataFromXMLConfig(
|
||||
const AConfig: TRttiXMLConfig; const APath: string);
|
||||
var
|
||||
s: String;
|
||||
c: TFpDbgValueConverterClass;
|
||||
obj: TFpDbgValueConverter;
|
||||
RegEntry: TLazDbgValueConvertRegistryEntryClass;
|
||||
begin
|
||||
AConfig.ReadObject(APath + 'Filter/', Self);
|
||||
MatchTypeNames.CommaText := AConfig.GetValue(APath + 'Filter/MatchTypeNames', '');
|
||||
|
||||
s := AConfig.GetValue(APath + 'ConvClass', '');
|
||||
c := ValueConverterClassList.FindByClassName(s);
|
||||
if c = nil then
|
||||
RegEntry := ValueConverterRegistry.FindByConvertorClassName(s);
|
||||
if RegEntry = nil then
|
||||
exit;
|
||||
|
||||
obj := c.Create;
|
||||
obj := RegEntry.CreateValueConvertorIntf.GetObject as TFpDbgValueConverter;
|
||||
AConfig.ReadObject(APath + 'Conv/', obj);
|
||||
Converter := obj;
|
||||
end;
|
||||
|
@ -68,7 +68,7 @@ implementation
|
||||
|
||||
procedure TFpDbgValConvFrame.btnAddClick(Sender: TObject);
|
||||
var
|
||||
AvailClass: TFpDbgValueConverterClassList;
|
||||
AvailClass: TLazDbgValueConvertRegistry;
|
||||
AName: String;
|
||||
obj: TIdeFpDbgConverterConfig;
|
||||
begin
|
||||
@ -79,8 +79,8 @@ begin
|
||||
SaveCurrent;
|
||||
|
||||
FCurConvConf := nil;
|
||||
AvailClass := ValueConverterClassList;
|
||||
obj := TIdeFpDbgConverterConfig.Create(AvailClass[0].Create);
|
||||
AvailClass := ValueConverterRegistry;
|
||||
obj := TIdeFpDbgConverterConfig.Create(AvailClass[0].CreateValueConvertorIntf.GetObject as TFpDbgValueConverter);
|
||||
obj.Enabled := True;
|
||||
obj.Name := AName;
|
||||
obj.MatchKinds := obj.Converter.GetSupportedKinds;
|
||||
@ -115,7 +115,7 @@ end;
|
||||
|
||||
procedure TFpDbgValConvFrame.lstConvertersClick(Sender: TObject);
|
||||
var
|
||||
AvailClass: TFpDbgValueConverterClassList;
|
||||
AvailClass: TLazDbgValueConvertRegistry;
|
||||
begin
|
||||
SaveCurrent;
|
||||
pnlCurrentConv.Enabled := lstConverters.Count > 0;
|
||||
@ -135,8 +135,8 @@ begin
|
||||
EdName.Text := FCurConvConf.Name;
|
||||
memoTypeNames.Text := FCurConvConf.MatchTypeNames.Text;
|
||||
|
||||
AvailClass := ValueConverterClassList;
|
||||
dropAction.ItemIndex := AvailClass.IndexOf(TFpDbgValueConverterClass(FCurConvConf.Converter.ClassType));
|
||||
AvailClass := ValueConverterRegistry;
|
||||
dropAction.ItemIndex := AvailClass.IndexOfConvertorClass(FCurConvConf.Converter.ClassType);
|
||||
|
||||
lstConvertersItemClick(nil, FCurIdx);
|
||||
end;
|
||||
@ -172,14 +172,14 @@ end;
|
||||
|
||||
procedure TFpDbgValConvFrame.UpdateConvForClass;
|
||||
var
|
||||
AvailClass: TFpDbgValueConverterClassList;
|
||||
AvailClass: TLazDbgValueConvertRegistry;
|
||||
begin
|
||||
if FCurConvConf = nil then
|
||||
exit;
|
||||
|
||||
AvailClass := ValueConverterClassList;
|
||||
if (dropAction.ItemIndex <> AvailClass.IndexOf(TFpDbgValueConverterClass(FCurConv.GetObject.ClassType))) then begin
|
||||
FCurConv := AvailClass[dropAction.ItemIndex].Create;
|
||||
AvailClass := ValueConverterRegistry;
|
||||
if (dropAction.ItemIndex <> AvailClass.IndexOfConvertorClass(FCurConv.GetObject.ClassType)) then begin
|
||||
FCurConv := AvailClass[dropAction.ItemIndex].CreateValueConvertorIntf;
|
||||
UpdateConvPanel;
|
||||
end;
|
||||
end;
|
||||
@ -217,7 +217,7 @@ end;
|
||||
|
||||
procedure TFpDbgValConvFrame.UpdateButtons;
|
||||
begin
|
||||
btnAdd.Enabled := ValueConverterClassList.Count > 0;
|
||||
btnAdd.Enabled := ValueConverterRegistry.Count > 0;
|
||||
btnRemove.Enabled := (lstConverters.Count > 0) and (lstConverters.ItemIndex >= 0);
|
||||
pnlCurrentConv.Enabled := FCurConvConf <> nil;
|
||||
end;
|
||||
@ -239,12 +239,12 @@ end;
|
||||
|
||||
procedure TFpDbgValConvFrame.SaveCurrent;
|
||||
var
|
||||
AvailClass: TFpDbgValueConverterClassList;
|
||||
AvailClass: TLazDbgValueConvertRegistry;
|
||||
begin
|
||||
if FCurConvConf = nil then
|
||||
exit;
|
||||
|
||||
AvailClass := ValueConverterClassList;
|
||||
AvailClass := ValueConverterRegistry;
|
||||
if ( (FCurConv = nil) or (FCurConvSettings = nil) or FCurConvSettings.WriteTo(FCurConv) ) or
|
||||
(TrimSet(FCurConvConf.MatchTypeNames.Text, [#1..#32]) <> TrimSet(memoTypeNames.Text, [#1..#32])) or
|
||||
(FCurConvConf.Converter <> FCurConv) or
|
||||
@ -260,7 +260,7 @@ end;
|
||||
|
||||
procedure TFpDbgValConvFrame.Setup;
|
||||
var
|
||||
AvailClass: TFpDbgValueConverterClassList;
|
||||
AvailClass: TLazDbgValueConvertRegistry;
|
||||
i: Integer;
|
||||
begin
|
||||
btnAdd.Caption := dlgFpConvOptAddNew;
|
||||
@ -273,8 +273,8 @@ begin
|
||||
lblDesc.Caption := '-';
|
||||
|
||||
dropAction.Clear;
|
||||
AvailClass := ValueConverterClassList;
|
||||
for i := 0 to ValueConverterClassList.Count - 1 do
|
||||
AvailClass := ValueConverterRegistry;
|
||||
for i := 0 to ValueConverterRegistry.Count - 1 do
|
||||
dropAction.AddItem(AvailClass[i].GetName, nil);
|
||||
|
||||
UpdateButtons;
|
||||
|
Loading…
Reference in New Issue
Block a user