Skip to content

Commit c90dcb3

Browse files
authored
bugfix RTTI (#947)
1 parent 7da2218 commit c90dcb3

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

src/kernel/kernel_create_data_handle.clas.abap

+1-1
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));'.
98+
WRITE '@KERNEL dref.assign(new abap.types.Structure(obj, lo_struct.get().relative_name.get()));'.
9999
ENDMETHOD.
100100

101101
METHOD table.

src/kernel/kernel_create_data_handle.clas.testclasses.abap

+35
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ CLASS ltcl_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
1717
METHODS hex2 FOR TESTING RAISING cx_static_check.
1818
METHODS reference_table FOR TESTING RAISING cx_static_check.
1919
METHODS keep_absolute FOR TESTING RAISING cx_static_check.
20+
METHODS keep_absolute_struct FOR TESTING RAISING cx_static_check.
2021

2122
METHODS ref_test1 CHANGING foo TYPE REF TO data.
2223
METHODS ref_test2 FOR TESTING RAISING cx_static_check.
@@ -325,4 +326,38 @@ CLASS ltcl_test IMPLEMENTATION.
325326
exp = '\TYPE-POOL=ABAP\TYPE=ABAP_BOOL' ).
326327
ENDMETHOD.
327328

329+
METHOD keep_absolute_struct.
330+
TYPES: BEGIN OF ty,
331+
foo TYPE i,
332+
END OF ty.
333+
334+
DATA lo_before TYPE REF TO cl_abap_structdescr.
335+
DATA lo_after TYPE REF TO cl_abap_structdescr.
336+
DATA lo_tabletype TYPE REF TO cl_abap_tabledescr.
337+
DATA tab TYPE STANDARD TABLE OF ty WITH DEFAULT KEY.
338+
339+
DATA ref TYPE REF TO data.
340+
GET REFERENCE OF tab INTO ref.
341+
342+
lo_tabletype ?= cl_abap_typedescr=>describe_by_data_ref( ref ).
343+
344+
lo_before ?= lo_tabletype->get_table_line_type( ).
345+
cl_abap_unit_assert=>assert_not_initial( lo_before->absolute_name ).
346+
cl_abap_unit_assert=>assert_not_initial( lo_before->get_relative_name( ) ).
347+
348+
CREATE DATA ref TYPE HANDLE lo_before.
349+
350+
lo_after ?= cl_abap_structdescr=>describe_by_data_ref( ref ).
351+
cl_abap_unit_assert=>assert_not_initial( lo_after->absolute_name ).
352+
cl_abap_unit_assert=>assert_not_initial( lo_after->get_relative_name( ) ).
353+
354+
cl_abap_unit_assert=>assert_equals(
355+
act = lo_after->absolute_name
356+
exp = lo_before->absolute_name ).
357+
358+
cl_abap_unit_assert=>assert_equals(
359+
act = lo_after->get_relative_name( )
360+
exp = lo_before->get_relative_name( ) ).
361+
ENDMETHOD.
362+
328363
ENDCLASS.

0 commit comments

Comments
 (0)