mirror of
https://github.com/abap2UI5/abap2UI5.git
synced 2025-04-29 02:58:20 +08:00
fix (#1718)
This commit is contained in:
parent
8c75009b2f
commit
df459edd83
|
@ -1,61 +0,0 @@
|
|||
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.
|
|
@ -1,17 +0,0 @@
|
|||
<?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>
|
|
@ -1,26 +0,0 @@
|
|||
"! <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.
|
|
@ -1,16 +0,0 @@
|
|||
<?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>
|
|
@ -1,15 +0,0 @@
|
|||
"! <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.
|
|
@ -1,16 +0,0 @@
|
|||
<?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>
|
|
@ -1,15 +0,0 @@
|
|||
"! <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.
|
|
@ -1,16 +0,0 @@
|
|||
<?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>
|
|
@ -1,95 +0,0 @@
|
|||
"! <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.
|
|
@ -1,98 +0,0 @@
|
|||
*"* use this source file for your ABAP unit test classes
|
||||
|
||||
CLASS ltc_subclass DEFINITION INHERITING FROM z2ui5_cl_srtti_elemdescr.
|
||||
PUBLIC SECTION.
|
||||
METHODS get_rtti_by_type_kind_2
|
||||
IMPORTING
|
||||
i_type_kind LIKE cl_abap_typedescr=>type_kind
|
||||
RETURNING
|
||||
VALUE(rtti) TYPE REF TO cl_abap_typedescr.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_subclass IMPLEMENTATION.
|
||||
METHOD get_rtti_by_type_kind_2.
|
||||
rtti = get_rtti_by_type_kind( i_type_kind ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_main DEFINITION
|
||||
FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS serialize_deserialize FOR TESTING.
|
||||
METHODS get_rtti_by_type_kind FOR TESTING.
|
||||
|
||||
METHODS get_rtti_by_type_kind_assert
|
||||
IMPORTING
|
||||
variable TYPE simple.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_main IMPLEMENTATION.
|
||||
METHOD serialize_deserialize.
|
||||
DATA variable TYPE c LENGTH 20.
|
||||
|
||||
variable = 'Hello World'.
|
||||
z2ui5_cl_srtti_aunit=>serialize_deserialize( variable ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_rtti_by_type_kind_assert.
|
||||
DATA rtti TYPE REF TO cl_abap_elemdescr.
|
||||
DATA lo_subclass TYPE REF TO ltc_subclass.
|
||||
DATA rtti2 TYPE REF TO cl_abap_typedescr.
|
||||
|
||||
rtti ?= cl_abap_typedescr=>describe_by_data( variable ).
|
||||
|
||||
CREATE OBJECT lo_subclass
|
||||
EXPORTING rtti = rtti.
|
||||
|
||||
rtti2 = lo_subclass->get_rtti_by_type_kind_2( i_type_kind = rtti->type_kind ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( msg = 'decimals'
|
||||
exp = rtti->decimals
|
||||
act = rtti2->decimals ).
|
||||
cl_abap_unit_assert=>assert_equals( msg = 'type_kind'
|
||||
exp = rtti->type_kind
|
||||
act = rtti2->type_kind ).
|
||||
cl_abap_unit_assert=>assert_equals( msg = 'length'
|
||||
exp = rtti->length
|
||||
act = rtti2->length ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_rtti_by_type_kind.
|
||||
DATA n TYPE n LENGTH 20.
|
||||
DATA c TYPE c LENGTH 20.
|
||||
DATA string TYPE string.
|
||||
DATA xstring TYPE xstring.
|
||||
DATA i TYPE i.
|
||||
DATA f TYPE f.
|
||||
DATA d TYPE d.
|
||||
DATA t TYPE t.
|
||||
DATA x TYPE x LENGTH 20.
|
||||
DATA p TYPE p LENGTH 10 DECIMALS 3.
|
||||
DATA int1 TYPE int1.
|
||||
DATA int2 TYPE int2.
|
||||
DATA decfloat16 TYPE decfloat16.
|
||||
DATA decfloat34 TYPE decfloat34.
|
||||
|
||||
get_rtti_by_type_kind_assert( n ).
|
||||
get_rtti_by_type_kind_assert( c ).
|
||||
get_rtti_by_type_kind_assert( string ).
|
||||
get_rtti_by_type_kind_assert( xstring ).
|
||||
get_rtti_by_type_kind_assert( i ).
|
||||
get_rtti_by_type_kind_assert( f ).
|
||||
get_rtti_by_type_kind_assert( d ).
|
||||
get_rtti_by_type_kind_assert( t ).
|
||||
get_rtti_by_type_kind_assert( x ).
|
||||
get_rtti_by_type_kind_assert( p ).
|
||||
get_rtti_by_type_kind_assert( int1 ).
|
||||
get_rtti_by_type_kind_assert( int2 ).
|
||||
get_rtti_by_type_kind_assert( decfloat16 ).
|
||||
get_rtti_by_type_kind_assert( decfloat34 ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,17 +0,0 @@
|
|||
<?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_ELEMDESCR</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Serializable RTTI elementary type</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -1,24 +0,0 @@
|
|||
"! <p class="shorttext synchronized" lang="en">Serializable RTTI interface</p>
|
||||
CLASS z2ui5_cl_srtti_intfdescr DEFINITION
|
||||
PUBLIC
|
||||
INHERITING FROM z2ui5_cl_srtti_objectdescr
|
||||
CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
DATA intf_kind LIKE cl_abap_intfdescr=>intf_kind.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
!rtti TYPE REF TO cl_abap_intfdescr.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS z2ui5_cl_srtti_intfdescr IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
super->constructor( rtti ).
|
||||
intf_kind = rtti->intf_kind.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,16 +0,0 @@
|
|||
<?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_INTFDESCR</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Serializable RTTI interface</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -1,41 +0,0 @@
|
|||
"! <p class="shorttext synchronized" lang="en">Serializable RTTI object type</p>
|
||||
class z2ui5_cl_srtti_objectdescr definition
|
||||
public
|
||||
inheriting from z2ui5_cl_srtti_typedescr
|
||||
create public .
|
||||
|
||||
public section.
|
||||
|
||||
data INTERFACES like CL_ABAP_OBJECTDESCR=>INTERFACES .
|
||||
data TYPES like CL_ABAP_OBJECTDESCR=>TYPES .
|
||||
data ATTRIBUTES like CL_ABAP_OBJECTDESCR=>ATTRIBUTES .
|
||||
data METHODS like CL_ABAP_OBJECTDESCR=>METHODS .
|
||||
data EVENTS like CL_ABAP_OBJECTDESCR=>EVENTS .
|
||||
|
||||
methods CONSTRUCTOR
|
||||
importing
|
||||
!RTTI type ref to CL_ABAP_OBJECTDESCR .
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS z2ui5_cl_srtti_objectdescr IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
super->constructor( rtti ).
|
||||
|
||||
interfaces = rtti->interfaces.
|
||||
types = rtti->types.
|
||||
attributes = rtti->attributes.
|
||||
methods = rtti->methods.
|
||||
events = rtti->events.
|
||||
|
||||
READ TABLE interfaces WITH KEY name = 'IF_SERIALIZABLE_OBJECT' TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
not_serializable = abap_true.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,16 +0,0 @@
|
|||
<?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_OBJECTDESCR</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Serializable RTTI object type</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -1,42 +0,0 @@
|
|||
"! <p class="shorttext synchronized" lang="en">Serializable RTTI reference</p>
|
||||
CLASS z2ui5_cl_srtti_refdescr DEFINITION
|
||||
PUBLIC
|
||||
INHERITING FROM z2ui5_cl_srtti_datadescr
|
||||
CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
DATA referenced_type TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
!rtti TYPE REF TO cl_abap_refdescr.
|
||||
|
||||
METHODS get_rtti
|
||||
REDEFINITION.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS z2ui5_cl_srtti_refdescr IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
super->constructor( rtti ).
|
||||
CREATE OBJECT referenced_type TYPE z2ui5_cl_srtti_typedescr
|
||||
EXPORTING rtti = rtti->get_referenced_type( ).
|
||||
IF referenced_type->not_serializable = abap_true.
|
||||
not_serializable = abap_true.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_rtti.
|
||||
IF referenced_type->type_kind = cl_abap_typedescr=>typekind_data.
|
||||
rtti = cl_abap_refdescr=>get_ref_to_data( ).
|
||||
ELSEIF referenced_type->absolute_name = '\CLASS=OBJECT'.
|
||||
rtti = cl_abap_refdescr=>get_ref_to_object( ).
|
||||
ELSE.
|
||||
rtti = referenced_type->get_rtti( ).
|
||||
ENDIF.
|
||||
rtti = cl_abap_refdescr=>create( rtti ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,16 +0,0 @@
|
|||
<?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_REFDESCR</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Serializable RTTI reference</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -1,84 +0,0 @@
|
|||
"! <p class="shorttext synchronized" lang="en">Serializable RTTI structure</p>
|
||||
CLASS z2ui5_cl_srtti_structdescr DEFINITION
|
||||
PUBLIC
|
||||
INHERITING FROM z2ui5_cl_srtti_complexdescr
|
||||
CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF sabap_componentdescr,
|
||||
name TYPE string,
|
||||
type TYPE REF TO z2ui5_cl_srtti_datadescr,
|
||||
as_include TYPE abap_bool,
|
||||
suffix TYPE string,
|
||||
END OF sabap_componentdescr.
|
||||
TYPES sabap_component_tab TYPE STANDARD TABLE OF sabap_componentdescr WITH DEFAULT KEY.
|
||||
|
||||
DATA struct_kind LIKE cl_abap_structdescr=>struct_kind READ-ONLY.
|
||||
DATA components TYPE sabap_component_tab READ-ONLY.
|
||||
DATA has_include LIKE cl_abap_structdescr=>has_include READ-ONLY.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
!rtti TYPE REF TO cl_abap_structdescr.
|
||||
|
||||
METHODS get_rtti
|
||||
REDEFINITION.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS z2ui5_cl_srtti_structdescr IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
DATA components_rtti TYPE abap_component_tab.
|
||||
DATA scomponent TYPE sabap_componentdescr.
|
||||
DATA scomponent_rtti TYPE REF TO z2ui5_cl_srtti_datadescr.
|
||||
|
||||
FIELD-SYMBOLS <component> TYPE abap_componentdescr.
|
||||
|
||||
super->constructor( rtti ).
|
||||
|
||||
struct_kind = rtti->struct_kind.
|
||||
has_include = rtti->has_include.
|
||||
|
||||
components_rtti = rtti->get_components( ).
|
||||
|
||||
LOOP AT components_rtti ASSIGNING <component>.
|
||||
|
||||
CLEAR scomponent.
|
||||
scomponent-name = <component>-name.
|
||||
|
||||
scomponent_rtti ?= z2ui5_cl_srtti_datadescr=>create_by_rtti( <component>-type ).
|
||||
scomponent-type = scomponent_rtti.
|
||||
scomponent-as_include = <component>-as_include.
|
||||
scomponent-suffix = <component>-suffix.
|
||||
|
||||
APPEND scomponent TO components.
|
||||
IF scomponent-type->not_serializable = abap_true.
|
||||
not_serializable = abap_true.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_rtti.
|
||||
DATA components_rtti TYPE cl_abap_structdescr=>component_table.
|
||||
DATA component_rtti TYPE abap_componentdescr.
|
||||
|
||||
FIELD-SYMBOLS <component> TYPE sabap_componentdescr.
|
||||
|
||||
CLEAR components_rtti.
|
||||
LOOP AT components ASSIGNING <component>.
|
||||
|
||||
CLEAR component_rtti.
|
||||
component_rtti-name = <component>-name.
|
||||
component_rtti-type ?= <component>-type->get_rtti( ).
|
||||
component_rtti-as_include = <component>-as_include.
|
||||
component_rtti-suffix = <component>-suffix.
|
||||
|
||||
APPEND component_rtti TO components_rtti.
|
||||
ENDLOOP.
|
||||
rtti = cl_abap_structdescr=>create( components_rtti ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,16 +0,0 @@
|
|||
<?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_STRUCTDESCR</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Serializable RTTI structure</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -1,70 +0,0 @@
|
|||
"! <p class="shorttext synchronized" lang="en">Serializable RTTI table</p>
|
||||
CLASS z2ui5_cl_srtti_tabledescr DEFINITION
|
||||
PUBLIC
|
||||
INHERITING FROM z2ui5_cl_srtti_complexdescr
|
||||
CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
DATA key LIKE cl_abap_tabledescr=>key.
|
||||
DATA initial_size LIKE cl_abap_tabledescr=>initial_size.
|
||||
DATA key_defkind LIKE cl_abap_tabledescr=>key_defkind.
|
||||
DATA has_unique_key LIKE cl_abap_tabledescr=>has_unique_key.
|
||||
DATA table_kind LIKE cl_abap_tabledescr=>table_kind.
|
||||
DATA line_type TYPE REF TO z2ui5_cl_srtti_datadescr.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
!rtti TYPE REF TO cl_abap_tabledescr.
|
||||
|
||||
METHODS get_rtti
|
||||
REDEFINITION.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS z2ui5_cl_srtti_tabledescr IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
super->constructor( rtti ).
|
||||
key = rtti->key.
|
||||
initial_size = rtti->initial_size.
|
||||
key_defkind = rtti->key_defkind.
|
||||
has_unique_key = rtti->has_unique_key.
|
||||
table_kind = rtti->table_kind.
|
||||
|
||||
line_type ?= z2ui5_cl_srtti_typedescr=>create_by_rtti( rtti->get_table_line_type( ) ).
|
||||
IF line_type->not_serializable = abap_true.
|
||||
not_serializable = abap_true.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_rtti.
|
||||
DATA lt_empty_key TYPE abap_keydescr_tab.
|
||||
DATA lo_data_rtti TYPE REF TO cl_abap_datadescr.
|
||||
DATA lo_error TYPE REF TO cx_sy_table_creation.
|
||||
|
||||
FIELD-SYMBOLS <lt_key> TYPE abap_keydescr_tab.
|
||||
|
||||
CLEAR lt_empty_key.
|
||||
CASE key_defkind.
|
||||
WHEN cl_abap_tabledescr=>keydefkind_user.
|
||||
ASSIGN key TO <lt_key>.
|
||||
WHEN OTHERS.
|
||||
ASSIGN lt_empty_key TO <lt_key>.
|
||||
ENDCASE.
|
||||
TRY.
|
||||
|
||||
lo_data_rtti ?= line_type->get_rtti( ).
|
||||
rtti = cl_abap_tabledescr=>create( p_line_type = lo_data_rtti
|
||||
p_table_kind = table_kind
|
||||
p_unique = has_unique_key
|
||||
p_key = <lt_key>
|
||||
p_key_kind = key_defkind ).
|
||||
|
||||
CATCH cx_sy_table_creation INTO lo_error.
|
||||
RAISE EXCEPTION TYPE z2ui5_cx_srtti
|
||||
EXPORTING previous = lo_error.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,117 +0,0 @@
|
|||
*"* use this source file for your ABAP unit test classes
|
||||
CLASS ltc_main DEFINITION
|
||||
FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_line_with_components,
|
||||
very__very_long_component_name TYPE i,
|
||||
END OF ty_line_with_components.
|
||||
TYPES ty_std_table_comps_default_key TYPE STANDARD TABLE OF ty_line_with_components WITH DEFAULT KEY.
|
||||
|
||||
METHODS check_instantiated_classes FOR TESTING.
|
||||
METHODS bound_line_type FOR TESTING.
|
||||
|
||||
METHODS assert_copy_equals_original
|
||||
IMPORTING
|
||||
srtti TYPE REF TO z2ui5_cl_srtti_typedescr
|
||||
original TYPE ty_std_table_comps_default_key.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_main IMPLEMENTATION.
|
||||
METHOD assert_copy_equals_original.
|
||||
DATA rtti TYPE REF TO cl_abap_tabledescr.
|
||||
DATA dref TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS <copy> TYPE any.
|
||||
|
||||
rtti ?= srtti->get_rtti( ).
|
||||
CREATE DATA dref TYPE HANDLE rtti.
|
||||
ASSIGN dref->* TO <copy>.
|
||||
<copy> = original.
|
||||
cl_abap_unit_assert=>assert_equals( act = <copy>
|
||||
exp = original ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bound_line_type.
|
||||
DATA line_with_components TYPE ty_line_with_components.
|
||||
DATA std_table_comps_default_key TYPE ty_std_table_comps_default_key.
|
||||
DATA component TYPE abap_componentdescr.
|
||||
DATA components TYPE abap_component_tab.
|
||||
DATA rtti TYPE REF TO cl_abap_tabledescr.
|
||||
DATA dref TYPE REF TO data.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
|
||||
FIELD-SYMBOLS <original_table> TYPE ANY TABLE.
|
||||
FIELD-SYMBOLS <original_line> TYPE any.
|
||||
FIELD-SYMBOLS <line_with_components> TYPE ty_line_with_components.
|
||||
|
||||
line_with_components-very__very_long_component_name = 25.
|
||||
INSERT line_with_components INTO TABLE std_table_comps_default_key.
|
||||
line_with_components-very__very_long_component_name = 37.
|
||||
INSERT line_with_components INTO TABLE std_table_comps_default_key.
|
||||
|
||||
component-name = 'VERY__VERY_LONG_COMPONENT_NAME'.
|
||||
component-type = cl_abap_elemdescr=>get_i( ).
|
||||
INSERT component INTO TABLE components.
|
||||
|
||||
rtti = cl_abap_tabledescr=>create( p_line_type = cl_abap_structdescr=>create( p_components = components ) ).
|
||||
|
||||
CREATE DATA dref TYPE HANDLE rtti.
|
||||
ASSIGN dref->* TO <original_table>.
|
||||
CREATE DATA dref LIKE LINE OF <original_table>.
|
||||
ASSIGN dref->* TO <original_line>.
|
||||
|
||||
LOOP AT std_table_comps_default_key ASSIGNING <line_with_components>.
|
||||
MOVE-CORRESPONDING <line_with_components> TO <original_line>.
|
||||
INSERT <original_line> INTO TABLE <original_table>.
|
||||
ENDLOOP.
|
||||
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( <original_table> ).
|
||||
|
||||
assert_copy_equals_original( srtti = srtti
|
||||
original = <original_table> ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_instantiated_classes.
|
||||
DATA comp_row TYPE LINE OF abap_component_tab.
|
||||
DATA comp_tab TYPE abap_component_tab.
|
||||
DATA struct_rtti TYPE REF TO cl_abap_structdescr.
|
||||
DATA table_rtti TYPE REF TO cl_abap_tabledescr.
|
||||
DATA dref TYPE REF TO data.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA test TYPE REF TO z2ui5_cl_srtti_tabledescr.
|
||||
DATA srtti_tab TYPE REF TO z2ui5_cl_srtti_tabledescr.
|
||||
DATA srtti2 TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA test2 TYPE REF TO z2ui5_cl_srtti_structdescr.
|
||||
|
||||
FIELD-SYMBOLS <original> TYPE any.
|
||||
|
||||
comp_row-name = 'VERY__VERY_LONG_COMPONENT_NAME'.
|
||||
comp_row-type = cl_abap_elemdescr=>get_i( ).
|
||||
INSERT comp_row INTO TABLE comp_tab.
|
||||
|
||||
struct_rtti = cl_abap_structdescr=>create( p_components = comp_tab ).
|
||||
table_rtti = cl_abap_tabledescr=>create( p_line_type = struct_rtti ).
|
||||
CREATE DATA dref TYPE HANDLE table_rtti.
|
||||
ASSIGN dref->* TO <original>.
|
||||
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( <original> ).
|
||||
|
||||
TRY.
|
||||
test ?= srtti.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
ENDTRY.
|
||||
|
||||
srtti_tab ?= srtti.
|
||||
srtti2 = srtti_tab->line_type.
|
||||
|
||||
TRY.
|
||||
test2 ?= srtti2.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,17 +0,0 @@
|
|||
<?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_TABLEDESCR</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Serializable RTTI table</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -1,117 +0,0 @@
|
|||
"! <p class="shorttext synchronized" lang="en">Serializable RTTI any type</p>
|
||||
CLASS z2ui5_cl_srtti_typedescr DEFINITION
|
||||
PUBLIC
|
||||
CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
INTERFACES if_serializable_object.
|
||||
|
||||
DATA absolute_name LIKE cl_abap_typedescr=>absolute_name READ-ONLY.
|
||||
DATA type_kind LIKE cl_abap_typedescr=>type_kind READ-ONLY.
|
||||
DATA length LIKE cl_abap_typedescr=>length READ-ONLY.
|
||||
DATA decimals LIKE cl_abap_typedescr=>decimals READ-ONLY.
|
||||
DATA kind LIKE cl_abap_typedescr=>kind READ-ONLY.
|
||||
"! True if it's an object type which doesn't implement the interface IF_SERIALIZABLE_OBJECT
|
||||
DATA not_serializable TYPE abap_bool READ-ONLY.
|
||||
DATA is_ddic_type TYPE abap_bool READ-ONLY.
|
||||
"! True if the absolute name is %_T...
|
||||
DATA technical_type TYPE abap_bool READ-ONLY.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
!rtti TYPE REF TO cl_abap_typedescr.
|
||||
METHODS get_rtti
|
||||
RETURNING
|
||||
VALUE(rtti) TYPE REF TO cl_abap_typedescr.
|
||||
CLASS-METHODS create_by_rtti
|
||||
IMPORTING
|
||||
!rtti TYPE REF TO cl_abap_typedescr
|
||||
RETURNING
|
||||
VALUE(srtti) TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
CLASS-METHODS create_by_data_object
|
||||
IMPORTING
|
||||
!data_object TYPE any
|
||||
RETURNING
|
||||
VALUE(srtti) TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS z2ui5_cl_srtti_typedescr IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
absolute_name = rtti->absolute_name.
|
||||
type_kind = rtti->type_kind.
|
||||
length = rtti->length.
|
||||
decimals = rtti->decimals.
|
||||
kind = rtti->kind.
|
||||
is_ddic_type = rtti->is_ddic_type( ).
|
||||
IF rtti->absolute_name CP '\TYPE=%_T*'.
|
||||
technical_type = abap_true.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create_by_data_object.
|
||||
srtti = create_by_rtti( cl_abap_typedescr=>describe_by_data( data_object ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create_by_rtti.
|
||||
DATA elem_rtti TYPE REF TO cl_abap_elemdescr.
|
||||
DATA struct_rtti TYPE REF TO cl_abap_structdescr.
|
||||
DATA table_rtti TYPE REF TO cl_abap_tabledescr.
|
||||
DATA ref_rtti TYPE REF TO cl_abap_refdescr.
|
||||
DATA class_rtti TYPE REF TO cl_abap_classdescr.
|
||||
DATA intf_rtti TYPE REF TO cl_abap_intfdescr.
|
||||
|
||||
CASE rtti->kind.
|
||||
WHEN cl_abap_typedescr=>kind_elem.
|
||||
|
||||
elem_rtti ?= rtti.
|
||||
CREATE OBJECT srtti TYPE z2ui5_cl_srtti_elemdescr
|
||||
EXPORTING rtti = elem_rtti.
|
||||
|
||||
WHEN cl_abap_typedescr=>kind_struct.
|
||||
|
||||
struct_rtti ?= rtti.
|
||||
CREATE OBJECT srtti TYPE z2ui5_cl_srtti_structdescr
|
||||
EXPORTING rtti = struct_rtti.
|
||||
|
||||
WHEN cl_abap_typedescr=>kind_table.
|
||||
|
||||
table_rtti ?= rtti.
|
||||
CREATE OBJECT srtti TYPE z2ui5_cl_srtti_tabledescr
|
||||
EXPORTING rtti = table_rtti.
|
||||
|
||||
WHEN cl_abap_typedescr=>kind_ref.
|
||||
|
||||
ref_rtti ?= rtti.
|
||||
CREATE OBJECT srtti TYPE z2ui5_cl_srtti_refdescr
|
||||
EXPORTING rtti = ref_rtti.
|
||||
|
||||
WHEN cl_abap_typedescr=>kind_class.
|
||||
|
||||
class_rtti ?= rtti.
|
||||
CREATE OBJECT srtti TYPE z2ui5_cl_srtti_classdescr
|
||||
EXPORTING rtti = class_rtti.
|
||||
|
||||
WHEN cl_abap_typedescr=>kind_intf.
|
||||
|
||||
intf_rtti ?= rtti.
|
||||
CREATE OBJECT srtti TYPE z2ui5_cl_srtti_intfdescr
|
||||
EXPORTING rtti = intf_rtti.
|
||||
|
||||
WHEN OTHERS.
|
||||
" Unsupported (new ABAP features in the future)
|
||||
RAISE EXCEPTION TYPE z2ui5_cx_srtti.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_rtti.
|
||||
" default behavior
|
||||
IF technical_type = abap_false.
|
||||
rtti = cl_abap_typedescr=>describe_by_name( absolute_name ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,229 +0,0 @@
|
|||
*"* use this source file for your ABAP unit test classes
|
||||
|
||||
INTERFACE lif_any.
|
||||
ENDINTERFACE.
|
||||
|
||||
|
||||
CLASS lcl_any DEFINITION.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES lif_any.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_main DEFINITION
|
||||
FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS technical_type FOR TESTING.
|
||||
METHODS create_by_rtti_elem FOR TESTING RAISING cx_static_check.
|
||||
METHODS create_by_rtti_struct FOR TESTING RAISING cx_static_check.
|
||||
METHODS create_by_rtti_table FOR TESTING RAISING cx_static_check.
|
||||
METHODS create_by_rtti_ref FOR TESTING RAISING cx_static_check.
|
||||
METHODS create_by_rtti_class FOR TESTING RAISING cx_static_check.
|
||||
METHODS create_by_rtti_intf FOR TESTING RAISING cx_static_check.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_serialize_deserialize DEFINITION
|
||||
FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS class FOR TESTING.
|
||||
METHODS elem FOR TESTING.
|
||||
METHODS intf FOR TESTING.
|
||||
METHODS ref FOR TESTING.
|
||||
METHODS structure FOR TESTING.
|
||||
METHODS table FOR TESTING.
|
||||
|
||||
TYPES ty_char_10 TYPE c LENGTH 10.
|
||||
DATA: BEGIN OF variables,
|
||||
char_10 TYPE ty_char_10,
|
||||
ref_to_class TYPE REF TO lcl_any,
|
||||
ref_to_intf TYPE REF TO lif_any,
|
||||
BEGIN OF structure,
|
||||
comp1 TYPE i,
|
||||
END OF structure,
|
||||
table TYPE STANDARD TABLE OF i WITH DEFAULT KEY,
|
||||
dref TYPE REF TO ty_char_10,
|
||||
END OF variables.
|
||||
DATA rtti_before TYPE REF TO cl_abap_typedescr.
|
||||
|
||||
METHODS assert_equal_serializ_deserial.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_main IMPLEMENTATION.
|
||||
METHOD create_by_rtti_class.
|
||||
DATA variable TYPE REF TO lcl_any.
|
||||
DATA typedescr TYPE REF TO cl_abap_typedescr.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA test TYPE REF TO z2ui5_cl_srtti_classdescr.
|
||||
|
||||
CREATE OBJECT variable TYPE lcl_any.
|
||||
typedescr ?= cl_abap_typedescr=>describe_by_object_ref( variable ).
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_rtti( typedescr ).
|
||||
|
||||
TRY.
|
||||
test ?= srtti.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_classdescr' ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create_by_rtti_elem.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA variable TYPE c LENGTH 20.
|
||||
DATA test TYPE REF TO z2ui5_cl_srtti_elemdescr.
|
||||
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( variable ).
|
||||
|
||||
TRY.
|
||||
test ?= srtti.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_elemdescr' ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create_by_rtti_intf.
|
||||
DATA variable TYPE REF TO lcl_any.
|
||||
DATA rtti_classdescr TYPE REF TO cl_abap_classdescr.
|
||||
DATA rtti_intf TYPE REF TO cl_abap_intfdescr.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA test TYPE REF TO z2ui5_cl_srtti_intfdescr.
|
||||
|
||||
CREATE OBJECT variable TYPE lcl_any.
|
||||
rtti_classdescr ?= cl_abap_typedescr=>describe_by_object_ref( variable ).
|
||||
rtti_intf = rtti_classdescr->get_interface_type( 'LIF_ANY' ).
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_rtti( rtti_intf ).
|
||||
|
||||
TRY.
|
||||
test ?= srtti.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_intfdescr' ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create_by_rtti_struct.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA test TYPE REF TO z2ui5_cl_srtti_structdescr.
|
||||
DATA:
|
||||
BEGIN OF variable,
|
||||
comp1 TYPE c LENGTH 20,
|
||||
END OF variable.
|
||||
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( variable ).
|
||||
|
||||
TRY.
|
||||
test ?= srtti.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_structdescr' ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create_by_rtti_table.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA test TYPE REF TO z2ui5_cl_srtti_structdescr.
|
||||
DATA:
|
||||
BEGIN OF variable,
|
||||
comp1 TYPE c LENGTH 20,
|
||||
END OF variable.
|
||||
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( variable ).
|
||||
|
||||
TRY.
|
||||
test ?= srtti.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_structdescr' ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create_by_rtti_ref.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA variable TYPE REF TO flag.
|
||||
DATA test TYPE REF TO z2ui5_cl_srtti_refdescr.
|
||||
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( variable ).
|
||||
|
||||
TRY.
|
||||
test ?= srtti.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_refdescr' ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD technical_type.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA dobj_with_bound_data_type TYPE c LENGTH 20.
|
||||
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( dobj_with_bound_data_type ).
|
||||
cl_abap_unit_assert=>assert_true( msg = 'technical_type'
|
||||
act = srtti->technical_type ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_serialize_deserialize IMPLEMENTATION.
|
||||
METHOD assert_equal_serializ_deserial.
|
||||
DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr.
|
||||
DATA rtti_after TYPE REF TO cl_abap_typedescr.
|
||||
|
||||
srtti = z2ui5_cl_srtti_typedescr=>create_by_rtti( rtti = rtti_before ).
|
||||
|
||||
rtti_after = srtti->get_rtti( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_bound( msg = 'result bound'
|
||||
act = rtti_after ).
|
||||
cl_abap_unit_assert=>assert_equals( msg = 'Type kind'
|
||||
exp = rtti_before->type_kind
|
||||
act = rtti_after->type_kind ).
|
||||
cl_abap_unit_assert=>assert_equals( msg = 'length'
|
||||
exp = rtti_before->length
|
||||
act = rtti_after->length ).
|
||||
cl_abap_unit_assert=>assert_equals( msg = 'decimals'
|
||||
exp = rtti_before->decimals
|
||||
act = rtti_after->decimals ).
|
||||
cl_abap_unit_assert=>assert_equals( msg = 'Kind'
|
||||
exp = rtti_before->kind
|
||||
act = rtti_after->kind ).
|
||||
cl_abap_unit_assert=>assert_equals( msg = 'is_ddic_type'
|
||||
exp = rtti_before->is_ddic_type( )
|
||||
act = rtti_after->is_ddic_type( ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class.
|
||||
rtti_before = cl_abap_typedescr=>describe_by_data( variables-ref_to_class ).
|
||||
assert_equal_serializ_deserial( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD elem.
|
||||
rtti_before = cl_abap_typedescr=>describe_by_data( variables-char_10 ).
|
||||
assert_equal_serializ_deserial( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD intf.
|
||||
rtti_before = cl_abap_typedescr=>describe_by_data( variables-ref_to_intf ).
|
||||
assert_equal_serializ_deserial( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD ref.
|
||||
rtti_before = cl_abap_typedescr=>describe_by_data( variables-dref ).
|
||||
assert_equal_serializ_deserial( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD structure.
|
||||
rtti_before = cl_abap_typedescr=>describe_by_data( variables-structure ).
|
||||
assert_equal_serializ_deserial( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD table.
|
||||
rtti_before = cl_abap_typedescr=>describe_by_data( variables-table ).
|
||||
assert_equal_serializ_deserial( ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,17 +0,0 @@
|
|||
<?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_TYPEDESCR</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Serializable RTTI any type</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -1,35 +0,0 @@
|
|||
class z2ui5_cx_srtti definition
|
||||
public
|
||||
inheriting from CX_NO_CHECK
|
||||
final
|
||||
create public .
|
||||
|
||||
public section.
|
||||
|
||||
interfaces IF_T100_MESSAGE .
|
||||
|
||||
methods CONSTRUCTOR
|
||||
importing
|
||||
!TEXTID like IF_T100_MESSAGE=>T100KEY optional
|
||||
!PREVIOUS like PREVIOUS optional .
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS z2ui5_cx_srtti IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor ##ADT_SUPPRESS_GENERATION.
|
||||
CALL METHOD super->constructor
|
||||
EXPORTING
|
||||
previous = previous.
|
||||
CLEAR me->textid.
|
||||
IF textid IS INITIAL.
|
||||
if_t100_message~t100key = if_t100_message=>default_textid.
|
||||
ELSE.
|
||||
if_t100_message~t100key = textid.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -1,17 +0,0 @@
|
|||
<?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_CX_SRTTI</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>General exception</DESCRIPT>
|
||||
<CATEGORY>40</CATEGORY>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
Loading…
Reference in New Issue
Block a user