Debugger: more moving value-converters to LazDebuggerIntf.

This commit is contained in:
Martin 2022-08-23 15:10:23 +02:00
parent d98c10ac7d
commit 9147be77ec
6 changed files with 61 additions and 45 deletions

View File

@ -46,6 +46,7 @@ type
procedure Init; override; procedure Init; override;
public public
class function GetName: String; override; class function GetName: String; override;
function GetRegistryEntry: TLazDbgValueConvertRegistryEntryClass; override;
procedure Assign(ASource: TFpDbgValueConverter); override; procedure Assign(ASource: TFpDbgValueConverter); override;
function ConvertValue(ASourceValue: TFpValue; function ConvertValue(ASourceValue: TFpValue;
AnFpDebugger: TFpDebugDebuggerBase; AnFpDebugger: TFpDebugDebuggerBase;
@ -58,6 +59,12 @@ type
property JsonTypenameKey: String read FJsonTypenameKey write FJsonTypenameKey; property JsonTypenameKey: String read FJsonTypenameKey write FJsonTypenameKey;
end; end;
{ TFpDbgValueConverterJsonForDebugRegistryEntry }
TFpDbgValueConverterJsonForDebugRegistryEntry = class(TFpDbgValueConverterRegistryEntry)
public
class function GetConvertorClass: TClass; override;
end;
implementation implementation
@ -184,6 +191,11 @@ begin
Result := drsCallJsonForDebug; Result := drsCallJsonForDebug;
end; end;
function TFpDbgValueConverterJsonForDebug.GetRegistryEntry: TLazDbgValueConvertRegistryEntryClass;
begin
Result := TFpDbgValueConverterJsonForDebugRegistryEntry;
end;
procedure TFpDbgValueConverterJsonForDebug.Assign(ASource: TFpDbgValueConverter); procedure TFpDbgValueConverterJsonForDebug.Assign(ASource: TFpDbgValueConverter);
begin begin
inherited Assign(ASource); inherited Assign(ASource);
@ -315,15 +327,6 @@ begin
end; end;
end; end;
type
{ TFpDbgValueConverterJsonForDebugRegistryEntry }
TFpDbgValueConverterJsonForDebugRegistryEntry = class(TFpDbgValueConverterRegistryEntry)
public
class function GetConvertorClass: TClass; override;
end;
{ TFpDbgValueConverterJsonForDebugRegistryEntry } { TFpDbgValueConverterJsonForDebugRegistryEntry }
class function TFpDbgValueConverterJsonForDebugRegistryEntry.GetConvertorClass: TClass; class function TFpDbgValueConverterJsonForDebugRegistryEntry.GetConvertorClass: TClass;

View File

@ -28,9 +28,10 @@ type
procedure Init; virtual; procedure Init; virtual;
public public
class function GetName: String; virtual; abstract; class function GetName: String; virtual; abstract;
function GetRegistryEntry: TLazDbgValueConvertRegistryEntryClass; virtual;
constructor Create; virtual; constructor Create; virtual;
procedure Assign(ASource: TFpDbgValueConverter); virtual; procedure Assign(ASource: TFpDbgValueConverter); virtual;
function CreateCopy: TFpDbgValueConverter; virtual; function CreateCopy: TLazDbgValueConverterIntf; virtual;
function ConvertValue(ASourceValue: TFpValue; function ConvertValue(ASourceValue: TFpValue;
AnFpDebugger: TFpDebugDebuggerBase; AnFpDebugger: TFpDebugDebuggerBase;
AnExpressionScope: TFpDbgSymbolScope AnExpressionScope: TFpDbgSymbolScope
@ -65,21 +66,31 @@ type
function GetProcAddrFromMgr(AnFpDebugger: TFpDebugDebuggerBase; AnExpressionScope: TFpDbgSymbolScope): TDbgPtr; function GetProcAddrFromMgr(AnFpDebugger: TFpDebugDebuggerBase; AnExpressionScope: TFpDbgSymbolScope): TDbgPtr;
public public
class function GetName: String; override; class function GetName: String; override;
function GetRegistryEntry: TLazDbgValueConvertRegistryEntryClass; override;
function ConvertValue(ASourceValue: TFpValue; function ConvertValue(ASourceValue: TFpValue;
AnFpDebugger: TFpDebugDebuggerBase; AnFpDebugger: TFpDebugDebuggerBase;
AnExpressionScope: TFpDbgSymbolScope AnExpressionScope: TFpDbgSymbolScope
): TFpValue; override; ): TFpValue; override;
end; end;
{ TFpDbgValueConverterVariantToLStrRegistryEntry }
TFpDbgValueConverterVariantToLStrRegistryEntry = class(TFpDbgValueConverterRegistryEntry)
public
class function GetConvertorClass: TClass; override;
end;
implementation implementation
{ TFpDbgValueConverter } { TFpDbgValueConverter }
function TFpDbgValueConverter.CreateCopy: TFpDbgValueConverter; function TFpDbgValueConverter.CreateCopy: TLazDbgValueConverterIntf;
var
c: TFpDbgValueConverter;
begin begin
Result := TFpDbgValueConverterClass(ClassType).Create; c := TFpDbgValueConverterClass(ClassType).Create;
Result.Assign(Self); c.Assign(Self);
Result := c;
end; end;
procedure TFpDbgValueConverter.SetError(AnError: TFpError); procedure TFpDbgValueConverter.SetError(AnError: TFpError);
@ -102,6 +113,11 @@ begin
// //
end; end;
function TFpDbgValueConverter.GetRegistryEntry: TLazDbgValueConvertRegistryEntryClass;
begin
Result := nil;
end;
constructor TFpDbgValueConverter.Create; constructor TFpDbgValueConverter.Create;
begin begin
inherited Create; inherited Create;
@ -315,6 +331,11 @@ begin
Result := drsCallSysVarToLStr; Result := drsCallSysVarToLStr;
end; end;
function TFpDbgValueConverterVariantToLStr.GetRegistryEntry: TLazDbgValueConvertRegistryEntryClass;
begin
Result := TFpDbgValueConverterVariantToLStrRegistryEntry;
end;
function TFpDbgValueConverterVariantToLStr.ConvertValue(ASourceValue: TFpValue; function TFpDbgValueConverterVariantToLStr.ConvertValue(ASourceValue: TFpValue;
AnFpDebugger: TFpDebugDebuggerBase; AnExpressionScope: TFpDbgSymbolScope AnFpDebugger: TFpDebugDebuggerBase; AnExpressionScope: TFpDbgSymbolScope
): TFpValue; ): TFpValue;
@ -435,15 +456,6 @@ begin
end; end;
end; end;
type
{ TFpDbgValueConverterVariantToLStrRegistryEntry }
TFpDbgValueConverterVariantToLStrRegistryEntry = class(TFpDbgValueConverterRegistryEntry)
public
class function GetConvertorClass: TClass; override;
end;
{ TFpDbgValueConverterVariantToLStrRegistryEntry } { TFpDbgValueConverterVariantToLStrRegistryEntry }
class function TFpDbgValueConverterVariantToLStrRegistryEntry.GetConvertorClass: TClass; class function TFpDbgValueConverterVariantToLStrRegistryEntry.GetConvertorClass: TClass;

View File

@ -10,6 +10,8 @@ uses
type type
TLazDbgValueConverterIntf = interface; TLazDbgValueConverterIntf = interface;
TLazDbgValueConvertRegistryEntry = class;
TLazDbgValueConvertRegistryEntryClass = class of TLazDbgValueConvertRegistryEntry;
TLazDbgValueConverterSettingsFrameIntf = interface TLazDbgValueConverterSettingsFrameIntf = interface
procedure ReadFrom(AConvertor: TLazDbgValueConverterIntf); procedure ReadFrom(AConvertor: TLazDbgValueConverterIntf);
@ -22,7 +24,10 @@ type
TLazDbgValueConverterIntf = interface TLazDbgValueConverterIntf = interface
procedure AddReference; procedure AddReference;
procedure ReleaseReference; procedure ReleaseReference;
function CreateCopy: TLazDbgValueConverterIntf;
function GetObject: TObject; function GetObject: TObject;
function GetRegistryEntry: TLazDbgValueConvertRegistryEntryClass;
function GetSettingsFrame: TLazDbgValueConverterSettingsFrameIntf; function GetSettingsFrame: TLazDbgValueConverterSettingsFrameIntf;
end; end;
@ -59,7 +64,6 @@ type
class function GetConvertorClass: TClass; virtual; abstract; class function GetConvertorClass: TClass; virtual; abstract;
class function GetDebuggerClass: TClass; virtual; abstract; // class of TDebuggerIntf class function GetDebuggerClass: TClass; virtual; abstract; // class of TDebuggerIntf
end; end;
TLazDbgValueConvertRegistryEntryClass = class of TLazDbgValueConvertRegistryEntry;
{ TLazDbgValueConvertRegistry } { TLazDbgValueConvertRegistry }

View File

@ -8,8 +8,7 @@ uses
Classes, SysUtils, LazClasses, LazLoggerBase, IdeDebuggerWatchResult, Classes, SysUtils, LazClasses, LazLoggerBase, IdeDebuggerWatchResult,
IdeDebuggerFpDbgValueConv, IdeDebuggerWatchResultJSon, DbgIntfDebuggerBase, IdeDebuggerFpDbgValueConv, IdeDebuggerWatchResultJSon, DbgIntfDebuggerBase,
DbgIntfMiscClasses, LazDebuggerIntf, LazDebuggerTemplate, DbgIntfMiscClasses, LazDebuggerIntf, LazDebuggerTemplate,
LazDebuggerIntfBaseTypes, LazDebuggerValueConverter, FpDebugValueConvertors, LazDebuggerIntfBaseTypes, LazDebuggerValueConverter, FpDebugConvDebugForJson;
FpDebugConvDebugForJson;
type type

View File

@ -6,7 +6,7 @@ interface
uses uses
Classes, SysUtils, fgl, Laz2_XMLCfg, LazClasses, lazCollections, Classes, SysUtils, fgl, Laz2_XMLCfg, LazClasses, lazCollections,
FpDebugValueConvertors, LazDebuggerValueConverter; LazDebuggerValueConverter;
type type
@ -14,19 +14,19 @@ type
TIdeDbgValueConvertSelector = class(TFreeNotifyingObject, TLazDbgValueConvertSelectorIntf) TIdeDbgValueConvertSelector = class(TFreeNotifyingObject, TLazDbgValueConvertSelectorIntf)
private private
FConverter: TFpDbgValueConverter; FConverter: TLazDbgValueConverterIntf;
FMatchTypeNames: TStrings; FMatchTypeNames: TStrings;
FEnabled: Boolean; FEnabled: Boolean;
FName: String; FName: String;
procedure SetConverter(AValue: TFpDbgValueConverter); procedure SetConverter(AValue: TLazDbgValueConverterIntf);
protected protected
function GetBackendSpecificObject: TObject; deprecated; function GetBackendSpecificObject: TObject; deprecated;
function GetConverter: TLazDbgValueConverterIntf; function GetConverter: TLazDbgValueConverterIntf;
function AllowedTypeNames: TStrings; function AllowedTypeNames: TStrings;
public public
constructor Create(AConverter: TFpDbgValueConverter); constructor Create(AConverter: TLazDbgValueConverterIntf);
destructor Destroy; override; destructor Destroy; override;
function CreateCopy: TIdeDbgValueConvertSelector; function CreateCopy: TIdeDbgValueConvertSelector;
@ -34,7 +34,7 @@ type
procedure LoadDataFromXMLConfig(const AConfig: TRttiXMLConfig; const APath: string); procedure LoadDataFromXMLConfig(const AConfig: TRttiXMLConfig; const APath: string);
procedure SaveDataToXMLConfig(const AConfig: TRttiXMLConfig; const APath: string); procedure SaveDataToXMLConfig(const AConfig: TRttiXMLConfig; const APath: string);
published published
property Converter: TFpDbgValueConverter read FConverter write SetConverter; property Converter: TLazDbgValueConverterIntf read FConverter write SetConverter;
property Enabled: Boolean read FEnabled write FEnabled; property Enabled: Boolean read FEnabled write FEnabled;
property Name: String read FName write FName; property Name: String read FName write FName;
property MatchTypeNames: TStrings read FMatchTypeNames; property MatchTypeNames: TStrings read FMatchTypeNames;
@ -80,10 +80,11 @@ implementation
{ TIdeDbgValueConvertSelector } { TIdeDbgValueConvertSelector }
procedure TIdeDbgValueConvertSelector.SetConverter(AValue: TFpDbgValueConverter); procedure TIdeDbgValueConvertSelector.SetConverter(AValue: TLazDbgValueConverterIntf);
begin begin
if FConverter = AValue then Exit; if FConverter = AValue then Exit;
FConverter.ReleaseReference; if FConverter <> nil then
FConverter.ReleaseReference;
FConverter := AValue; FConverter := AValue;
if FConverter <> nil then if FConverter <> nil then
FConverter.AddReference; FConverter.AddReference;
@ -104,7 +105,7 @@ begin
Result := FMatchTypeNames; Result := FMatchTypeNames;
end; end;
constructor TIdeDbgValueConvertSelector.Create(AConverter: TFpDbgValueConverter); constructor TIdeDbgValueConvertSelector.Create(AConverter: TLazDbgValueConverterIntf);
begin begin
inherited Create; inherited Create;
Converter := AConverter; Converter := AConverter;
@ -128,7 +129,6 @@ end;
procedure TIdeDbgValueConvertSelector.Assign(ASource: TIdeDbgValueConvertSelector); procedure TIdeDbgValueConvertSelector.Assign(ASource: TIdeDbgValueConvertSelector);
begin begin
Converter := ASource.FConverter.CreateCopy; Converter := ASource.FConverter.CreateCopy;
FMatchTypeNames.Assign(ASource.FMatchTypeNames); FMatchTypeNames.Assign(ASource.FMatchTypeNames);
FName := ASource.FName; FName := ASource.FName;
@ -139,7 +139,6 @@ procedure TIdeDbgValueConvertSelector.LoadDataFromXMLConfig(
const AConfig: TRttiXMLConfig; const APath: string); const AConfig: TRttiXMLConfig; const APath: string);
var var
s: String; s: String;
obj: TFpDbgValueConverter;
RegEntry: TLazDbgValueConvertRegistryEntryClass; RegEntry: TLazDbgValueConvertRegistryEntryClass;
begin begin
AConfig.ReadObject(APath + 'Filter/', Self); AConfig.ReadObject(APath + 'Filter/', Self);
@ -150,9 +149,8 @@ begin
if RegEntry = nil then if RegEntry = nil then
exit; exit;
obj := RegEntry.CreateValueConvertorIntf.GetObject as TFpDbgValueConverter; Converter := RegEntry.CreateValueConvertorIntf;
AConfig.ReadObject(APath + 'Conv/', obj); AConfig.ReadObject(APath + 'Conv/', Converter.GetObject);
Converter := obj;
end; end;
procedure TIdeDbgValueConvertSelector.SaveDataToXMLConfig( procedure TIdeDbgValueConvertSelector.SaveDataToXMLConfig(
@ -161,8 +159,8 @@ begin
AConfig.WriteObject(APath + 'Filter/', Self); AConfig.WriteObject(APath + 'Filter/', Self);
AConfig.SetDeleteValue(APath + 'Filter/MatchTypeNames', MatchTypeNames.CommaText, ''); AConfig.SetDeleteValue(APath + 'Filter/MatchTypeNames', MatchTypeNames.CommaText, '');
AConfig.SetValue(APath + 'ConvClass', Converter.ClassName); AConfig.SetValue(APath + 'ConvClass', Converter.GetObject.ClassName);
AConfig.WriteObject(APath + 'Conv/', Converter); AConfig.WriteObject(APath + 'Conv/', Converter.GetObject);
end; end;
{ TIdeDbgValueConvertSelectorList } { TIdeDbgValueConvertSelectorList }

View File

@ -6,7 +6,7 @@ interface
uses uses
Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls, CheckLst, LCLIntf, Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls, CheckLst, LCLIntf,
Dialogs, StrUtils, FpDebugValueConvertors, LazDebuggerValueConverter, Dialogs, StrUtils, LazDebuggerValueConverter,
IdeDebuggerStringConstants, IdeDebuggerFpDbgValueConv; IdeDebuggerStringConstants, IdeDebuggerFpDbgValueConv;
type type
@ -80,7 +80,7 @@ begin
FCurConvConf := nil; FCurConvConf := nil;
AvailClass := ValueConverterRegistry; AvailClass := ValueConverterRegistry;
obj := TIdeDbgValueConvertSelector.Create(AvailClass[0].CreateValueConvertorIntf.GetObject as TFpDbgValueConverter); obj := TIdeDbgValueConvertSelector.Create(AvailClass[0].CreateValueConvertorIntf);
obj.Enabled := True; obj.Enabled := True;
obj.Name := AName; obj.Name := AName;
// obj.MatchKinds := obj.Converter.GetSupportedKinds; // obj.MatchKinds := obj.Converter.GetSupportedKinds;
@ -131,12 +131,12 @@ begin
else else
SetCurConv(FValConvList[FCurIdx]); SetCurConv(FValConvList[FCurIdx]);
lblDesc.Caption := FCurConvConf.Converter.GetName; lblDesc.Caption := FCurConvConf.Converter.GetRegistryEntry.GetName;
EdName.Text := FCurConvConf.Name; EdName.Text := FCurConvConf.Name;
memoTypeNames.Text := FCurConvConf.MatchTypeNames.Text; memoTypeNames.Text := FCurConvConf.MatchTypeNames.Text;
AvailClass := ValueConverterRegistry; AvailClass := ValueConverterRegistry;
dropAction.ItemIndex := AvailClass.IndexOfConvertorClass(FCurConvConf.Converter.ClassType); dropAction.ItemIndex := AvailClass.IndexOfConvertorClass(FCurConvConf.Converter.GetObject.ClassType);
lstConvertersItemClick(nil, FCurIdx); lstConvertersItemClick(nil, FCurIdx);
end; end;
@ -251,7 +251,7 @@ begin
(EdName.Text <> FCurConvConf.Name) (EdName.Text <> FCurConvConf.Name)
then begin then begin
FValConvList.Changed := True; FValConvList.Changed := True;
FCurConvConf.Converter := TFpDbgValueConverter(FCurConv.GetObject); FCurConvConf.Converter := FCurConv;
// FCurConvConf.MatchKinds := FCurConvConf.Converter.GetSupportedKinds; // FCurConvConf.MatchKinds := FCurConvConf.Converter.GetSupportedKinds;
FCurConvConf.MatchTypeNames.Text := memoTypeNames.Text; FCurConvConf.MatchTypeNames.Text := memoTypeNames.Text;
FCurConvConf.Name := EdName.Text FCurConvConf.Name := EdName.Text