Create the TRttiDataMember to Delphi compatibility.

This commit is contained in:
Henrique Gottardi Werlang 2024-09-16 14:14:43 -03:00
parent 6717b54b3e
commit a88f985230

View File

@ -168,16 +168,35 @@ type
property Visibility: TMemberVisibility read GetVisibility; property Visibility: TMemberVisibility read GetVisibility;
end; end;
{ TRttiDataMember }
TRttiDataMember = class abstract(TRttiMember)
private
function GetDataType: TRttiType; virtual; abstract;
function GetIsReadable: Boolean; virtual; abstract;
function GetIsWritable: Boolean; virtual; abstract;
public
function GetValue(Instance: JSValue): TValue; virtual; abstract;
procedure SetValue(Instance: JSValue; const AValue: TValue); virtual; abstract;
property DataType: TRttiType read GetDataType;
property IsReadable: Boolean read GetIsReadable;
property IsWritable: Boolean read GetIsWritable;
end;
{ TRttiField } { TRttiField }
TRttiField = class(TRttiMember) TRttiField = class(TRttiDataMember)
private private
function GetFieldType: TRttiType; function GetFieldType: TRttiType;
function GetFieldTypeInfo: TTypeMemberField; function GetFieldTypeInfo: TTypeMemberField;
function GetDataType: TRttiType; override;
function GetIsReadable: Boolean; override;
function GetIsWritable: Boolean; override;
public public
constructor Create(AParent: TRttiType; ATypeInfo: TTypeMember); constructor Create(AParent: TRttiType; ATypeInfo: TTypeMember);
function GetValue(Instance: JSValue): TValue;
procedure SetValue(Instance: JSValue; const AValue: TValue); function GetValue(Instance: JSValue): TValue; override;
procedure SetValue(Instance: JSValue; const AValue: TValue); override;
property FieldType: TRttiType read GetFieldType; property FieldType: TRttiType read GetFieldType;
property FieldTypeInfo: TTypeMemberField read GetFieldTypeInfo; property FieldTypeInfo: TTypeMemberField read GetFieldTypeInfo;
end; end;
@ -246,20 +265,21 @@ type
{ TRttiProperty } { TRttiProperty }
TRttiProperty = class(TRttiMember) TRttiProperty = class(TRttiDataMember)
private private
function GetDataType: TRttiType; override;
function GetPropertyTypeInfo: TTypeMemberProperty; function GetPropertyTypeInfo: TTypeMemberProperty;
function GetPropertyType: TRttiType; function GetPropertyType: TRttiType;
function GetIsWritable: boolean; function GetIsWritable: boolean; override;
function GetIsReadable: boolean; function GetIsReadable: boolean; override;
protected protected
function GetVisibility: TMemberVisibility; override; function GetVisibility: TMemberVisibility; override;
public public
constructor Create(AParent: TRttiType; ATypeInfo: TTypeMember); constructor Create(AParent: TRttiType; ATypeInfo: TTypeMember);
function GetValue(Instance: JSValue): TValue; function GetValue(Instance: JSValue): TValue; override;
procedure SetValue(Instance: JSValue; const AValue: TValue); procedure SetValue(Instance: JSValue; const AValue: TValue); override;
property PropertyTypeInfo: TTypeMemberProperty read GetPropertyTypeInfo; property PropertyTypeInfo: TTypeMemberProperty read GetPropertyTypeInfo;
property PropertyType: TRttiType read GetPropertyType; property PropertyType: TRttiType read GetPropertyType;
@ -1773,6 +1793,21 @@ begin
inherited; inherited;
end; end;
function TRttiField.GetDataType: TRttiType;
begin
Result := nil;
end;
function TRttiField.GetIsReadable: Boolean;
begin
Result := True;
end;
function TRttiField.GetIsWritable: Boolean;
begin
Result := True;
end;
function TRttiField.GetFieldType: TRttiType; function TRttiField.GetFieldType: TRttiType;
begin begin
Result := Pool.GetType(FieldTypeInfo.TypeInfo); Result := Pool.GetType(FieldTypeInfo.TypeInfo);
@ -1983,6 +2018,11 @@ begin
inherited; inherited;
end; end;
function TRttiProperty.GetDataType: TRttiType;
begin
Result := GetPropertyType;
end;
function TRttiProperty.GetPropertyTypeInfo: TTypeMemberProperty; function TRttiProperty.GetPropertyTypeInfo: TTypeMemberProperty;
begin begin
Result := TTypeMemberProperty(inherited Handle); Result := TTypeMemberProperty(inherited Handle);