Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ci/abaplint/abap_cloud_check.jsonc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"global": {
"files": "/src/**/*.*",
"noIssues": [ "/src/01/00/01" ]
"noIssues": [ "/src/00" ]
},
"dependencies": [
{
Expand Down
2 changes: 1 addition & 1 deletion ci/abaplint/abaplint.jsonc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"global": {
"files": "/src/**/*.*",
"noIssues": [ "/src/01/00" ]
"noIssues": [ "/src/00" ]
},
"dependencies": [
{
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
10 changes: 10 additions & 0 deletions src/00/02/package.devc.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>srtti - https://github.com/sandraros/S-RTTI</CTEXT>
</DEVC>
</asx:values>
</asx:abap>
</abapGit>
61 changes: 61 additions & 0 deletions src/00/02/z2ui5_cl_srtti_aunit.clas.abap
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
CLASS z2ui5_cl_srtti_aunit DEFINITION
PUBLIC
FOR TESTING
FINAL
CREATE PUBLIC .

PUBLIC SECTION.
CLASS-METHODS serialize_deserialize IMPORTING variable TYPE any.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.



CLASS z2ui5_cl_srtti_aunit IMPLEMENTATION.

METHOD serialize_deserialize.
" Serialize: both type and value at the same time.
FIELD-SYMBOLS <variable1> TYPE any.
DATA rtti1 TYPE REF TO cl_abap_typedescr.
DATA srtti1 TYPE REF TO z2ui5_cl_srtti_typedescr.
DATA xstring TYPE xstring.
DATA srtti2 TYPE REF TO z2ui5_cl_srtti_typedescr.
DATA temp1 TYPE REF TO cl_abap_datadescr.
DATA rtti2 LIKE temp1.
DATA ref_variable2 TYPE REF TO data.
FIELD-SYMBOLS <variable2> TYPE any.
ASSIGN variable TO <variable1>.

rtti1 = cl_abap_typedescr=>describe_by_data( <variable1> ).

srtti1 = z2ui5_cl_srtti_typedescr=>create_by_data_object( <variable1> ).

CALL TRANSFORMATION id
SOURCE srtti = srtti1
dobj = <variable1>
RESULT XML xstring
OPTIONS data_refs = 'heap-or-create'.

" Deserialize: (1) the type, to create the variable (2) then the value.

CALL TRANSFORMATION id
SOURCE XML xstring
RESULT srtti = srtti2.

temp1 ?= srtti2->get_rtti( ).

rtti2 = temp1.

CREATE DATA ref_variable2 TYPE HANDLE rtti2.

ASSIGN ref_variable2->* TO <variable2>.
CALL TRANSFORMATION id
SOURCE XML xstring
RESULT dobj = <variable2>.

cl_abap_unit_assert=>assert_equals( exp = rtti1 act = rtti2 ).
cl_abap_unit_assert=>assert_equals( exp = <variable1> act = <variable2> ).
ENDMETHOD.

ENDCLASS.
17 changes: 17 additions & 0 deletions src/00/02/z2ui5_cl_srtti_aunit.clas.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_SRTTI_AUNIT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Test class</DESCRIPT>
<CATEGORY>05</CATEGORY>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>
26 changes: 26 additions & 0 deletions src/00/02/z2ui5_cl_srtti_classdescr.clas.abap
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"! <p class="shorttext synchronized" lang="en">Serializable RTTI class</p>
CLASS z2ui5_cl_srtti_classdescr DEFINITION
PUBLIC
INHERITING FROM z2ui5_cl_srtti_objectdescr
CREATE PUBLIC.

PUBLIC SECTION.

DATA class_kind LIKE cl_abap_classdescr=>class_kind.
DATA create_visibility LIKE cl_abap_classdescr=>create_visibility.

METHODS constructor
IMPORTING
!rtti TYPE REF TO cl_abap_classdescr.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.


CLASS z2ui5_cl_srtti_classdescr IMPLEMENTATION.
METHOD constructor.
super->constructor( rtti ).
class_kind = rtti->class_kind.
create_visibility = rtti->create_visibility.
ENDMETHOD.
ENDCLASS.
16 changes: 16 additions & 0 deletions src/00/02/z2ui5_cl_srtti_classdescr.clas.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_SRTTI_CLASSDESCR</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Serializable RTTI class</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>
15 changes: 15 additions & 0 deletions src/00/02/z2ui5_cl_srtti_complexdescr.clas.abap
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"! <p class="shorttext synchronized" lang="en">Serializable RTTI complex type</p>
CLASS z2ui5_cl_srtti_complexdescr DEFINITION
PUBLIC
INHERITING FROM z2ui5_cl_srtti_datadescr
CREATE PUBLIC .

PUBLIC SECTION.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.



CLASS z2ui5_cl_srtti_complexdescr IMPLEMENTATION.
ENDCLASS.
16 changes: 16 additions & 0 deletions src/00/02/z2ui5_cl_srtti_complexdescr.clas.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_SRTTI_COMPLEXDESCR</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Serializable RTTI complex type</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>
15 changes: 15 additions & 0 deletions src/00/02/z2ui5_cl_srtti_datadescr.clas.abap
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"! <p class="shorttext synchronized" lang="en">Serializable RTTI data object</p>
CLASS z2ui5_cl_srtti_datadescr DEFINITION
PUBLIC
INHERITING FROM z2ui5_cl_srtti_typedescr
CREATE PUBLIC .

PUBLIC SECTION.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.



CLASS z2ui5_cl_srtti_datadescr IMPLEMENTATION.
ENDCLASS.
16 changes: 16 additions & 0 deletions src/00/02/z2ui5_cl_srtti_datadescr.clas.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_SRTTI_DATADESCR</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Serializable RTTI data object</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>
95 changes: 95 additions & 0 deletions src/00/02/z2ui5_cl_srtti_elemdescr.clas.abap
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
"! <p class="shorttext synchronized" lang="en">Serializable RTTI elementary type</p>
CLASS z2ui5_cl_srtti_elemdescr DEFINITION
PUBLIC
INHERITING FROM z2ui5_cl_srtti_datadescr
CREATE PUBLIC.

PUBLIC SECTION.

DATA edit_mask LIKE cl_abap_elemdescr=>edit_mask.
DATA help_id LIKE cl_abap_elemdescr=>help_id.
DATA output_length LIKE cl_abap_elemdescr=>output_length.

METHODS constructor
IMPORTING
!rtti TYPE REF TO cl_abap_elemdescr.

METHODS get_rtti
REDEFINITION.
PROTECTED SECTION.
METHODS get_rtti_by_type_kind
IMPORTING
i_type_kind LIKE cl_abap_typedescr=>type_kind
RETURNING
VALUE(rtti) TYPE REF TO cl_abap_typedescr.
PRIVATE SECTION.
ENDCLASS.



CLASS z2ui5_cl_srtti_elemdescr IMPLEMENTATION.


METHOD constructor.
super->constructor( rtti ).

edit_mask = rtti->edit_mask.
help_id = rtti->help_id.
output_length = rtti->output_length.
ENDMETHOD.


METHOD get_rtti.
rtti = super->get_rtti( ).
IF rtti IS BOUND.
RETURN.
ENDIF.

IF is_ddic_type = abap_true
AND technical_type = abap_false.
" If XML transformations are used, they may be based on
" the data element, for instance XSDBOOLEAN will convert "true"
" into "X" during deserialization.
rtti = cl_abap_typedescr=>describe_by_name( absolute_name ).
ELSE.
rtti = get_rtti_by_type_kind( type_kind ).
ENDIF.
ENDMETHOD.


METHOD get_rtti_by_type_kind.
DATA l_length TYPE i.

CASE i_type_kind.
WHEN cl_abap_typedescr=>typekind_num.
l_length = length / cl_abap_char_utilities=>charsize.
rtti = cl_abap_elemdescr=>get_n( l_length ).
WHEN cl_abap_typedescr=>typekind_char.
l_length = length / cl_abap_char_utilities=>charsize.
rtti = cl_abap_elemdescr=>get_c( l_length ).
WHEN cl_abap_typedescr=>typekind_string.
rtti = cl_abap_elemdescr=>get_string( ).
WHEN cl_abap_typedescr=>typekind_xstring.
rtti = cl_abap_elemdescr=>get_xstring( ).
WHEN cl_abap_typedescr=>typekind_int.
rtti = cl_abap_elemdescr=>get_i( ).
WHEN cl_abap_typedescr=>typekind_float.
rtti = cl_abap_elemdescr=>get_f( ).
WHEN cl_abap_typedescr=>typekind_date.
rtti = cl_abap_elemdescr=>get_d( ).
WHEN cl_abap_typedescr=>typekind_time.
rtti = cl_abap_elemdescr=>get_t( ).
WHEN cl_abap_typedescr=>typekind_hex.
rtti = cl_abap_elemdescr=>get_x( length ).
WHEN cl_abap_typedescr=>typekind_packed.
rtti = cl_abap_elemdescr=>get_p( p_length = length
p_decimals = decimals ).
WHEN cl_abap_typedescr=>typekind_decfloat16.
rtti = cl_abap_elemdescr=>get_decfloat16( ).
WHEN cl_abap_typedescr=>typekind_decfloat34.
rtti = cl_abap_elemdescr=>get_decfloat34( ).
WHEN OTHERS.
RAISE EXCEPTION TYPE z2ui5_cx_srtti.
ENDCASE.
ENDMETHOD.
ENDCLASS.
Loading
Loading