Skip to content

Commit fd80084

Browse files
authored
rtti bugfix (#948)
1 parent c90dcb3 commit fd80084

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

src/kernel/kernel_create_data_handle.clas.abap

+2-3
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ CLASS kernel_create_data_handle IMPLEMENTATION.
9595
lv_name = to_lower( <ls_component>-name ).
9696
WRITE '@KERNEL obj[lv_name.get()] = field.getPointer();'.
9797
ENDLOOP.
98-
WRITE '@KERNEL dref.assign(new abap.types.Structure(obj, lo_struct.get().relative_name.get()));'.
98+
WRITE '@KERNEL dref.assign(new abap.types.Structure(obj, lo_struct.get().internal_qualified_name.get(), lo_struct.get().internal_ddic_name.get()));'.
9999
ENDMETHOD.
100100

101101
METHOD table.
@@ -158,8 +158,7 @@ CLASS kernel_create_data_handle IMPLEMENTATION.
158158
WHEN cl_abap_typedescr=>typekind_char.
159159
lv_half = handle->length / 2.
160160
CREATE DATA dref TYPE c LENGTH lv_half.
161-
* todo, this needs some redesign to work properly,
162-
WRITE '@KERNEL dref.getPointer().extra = {"qualifiedName": handle.get().relative_name};'.
161+
WRITE '@KERNEL dref.getPointer().extra = {"qualifiedName": handle.get().internal_qualified_name};'.
163162
WHEN cl_abap_typedescr=>typekind_num.
164163
lv_half = handle->length / 2.
165164
CREATE DATA dref TYPE n LENGTH lv_half.

src/rtti/cl_abap_typedescr.clas.abap

+7
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ CLASS cl_abap_typedescr DEFINITION PUBLIC.
6262
DATA absolute_name TYPE abap_abstypename.
6363
DATA relative_name TYPE string.
6464

65+
"! these are internal open-abap types, may change anytime
66+
DATA internal_qualified_name TYPE string.
67+
DATA internal_ddic_name TYPE string.
68+
6569
CONSTANTS typekind_any TYPE abap_typekind VALUE '~'.
6670
CONSTANTS typekind_char TYPE abap_typekind VALUE 'C'.
6771
CONSTANTS typekind_class TYPE abap_typekind VALUE '*'.
@@ -420,6 +424,9 @@ CLASS cl_abap_typedescr IMPLEMENTATION.
420424
WRITE '@KERNEL lv_convexit.set(p_data.getConversionExit ? p_data.getConversionExit() || "" : "");'.
421425
WRITE '@KERNEL lv_qualified.set(p_data.getQualifiedName ? p_data.getQualifiedName() || "" : "");'.
422426

427+
type->internal_qualified_name = lv_qualified.
428+
type->internal_ddic_name = lv_ddicname.
429+
423430
IF lv_qualified NA '-'.
424431
type->absolute_name = lv_qualified.
425432
ELSEIF lv_ddicname <> ''.

0 commit comments

Comments
 (0)