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