CLAS: fix where-used in deserialization #1179

This commit is contained in:
larshp 2018-02-03 12:05:20 +00:00
parent c058a06355
commit cec950e7ca
2 changed files with 65 additions and 30 deletions

View File

@ -1,6 +1,4 @@
CLASS zcl_abapgit_objects_activation DEFINITION
PUBLIC
CREATE PUBLIC .
CLASS zcl_abapgit_objects_activation DEFINITION PUBLIC CREATE PUBLIC.
PUBLIC SECTION.
CLASS-METHODS add
@ -20,30 +18,38 @@ CLASS zcl_abapgit_objects_activation DEFINITION
CLASS-METHODS clear.
PRIVATE SECTION.
CLASS-DATA:
gt_classes TYPE STANDARD TABLE OF seoclsname WITH DEFAULT KEY,
gt_objects TYPE TABLE OF dwinactiv.
CLASS-METHODS update_where_used .
CLASS-METHODS fix_class_methods
IMPORTING iv_obj_name TYPE trobj_name
CHANGING ct_objects TYPE dwinactiv_tab.
IMPORTING
!iv_obj_name TYPE trobj_name
CHANGING
!ct_objects TYPE dwinactiv_tab .
CLASS-METHODS use_new_activation_logic
RETURNING VALUE(rv_use_new_activation_logic) TYPE abap_bool.
RETURNING
VALUE(rv_use_new_activation_logic) TYPE abap_bool .
CLASS-METHODS activate_new
IMPORTING iv_ddic TYPE abap_bool DEFAULT abap_false
RAISING zcx_abapgit_exception.
IMPORTING
!iv_ddic TYPE abap_bool DEFAULT abap_false
RAISING
zcx_abapgit_exception .
CLASS-METHODS activate_old
IMPORTING iv_ddic TYPE abap_bool DEFAULT abap_false
RAISING zcx_abapgit_exception.
IMPORTING
!iv_ddic TYPE abap_bool DEFAULT abap_false
RAISING
zcx_abapgit_exception .
CLASS-METHODS activate_ddic
RAISING zcx_abapgit_exception.
RAISING
zcx_abapgit_exception .
CLASS-METHODS show_activation_errors
IMPORTING iv_logname TYPE ddmass-logname
RAISING zcx_abapgit_exception.
CLASS-DATA: gt_objects TYPE TABLE OF dwinactiv.
IMPORTING
!iv_logname TYPE ddmass-logname
RAISING
zcx_abapgit_exception .
ENDCLASS.
@ -54,15 +60,13 @@ CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION.
METHOD activate.
IF use_new_activation_logic( ) = abap_true.
activate_new( iv_ddic ).
ELSE.
activate_old( iv_ddic ).
ENDIF.
update_where_used( ).
ENDMETHOD. "activate
@ -197,7 +201,9 @@ CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION.
lv_obj_name = iv_name.
CASE iv_type.
WHEN 'CLAS' OR 'WDYN'.
WHEN 'CLAS'.
APPEND iv_name TO gt_classes.
WHEN 'WDYN'.
* todo, move this to the object type include instead
CALL FUNCTION 'RS_INACTIVE_OBJECTS_IN_OBJECT'
EXPORTING
@ -212,10 +218,10 @@ CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Error from RS_INACTIVE_OBJECTS_IN_OBJECT' ).
ENDIF.
IF iv_type = 'CLAS'.
fix_class_methods( EXPORTING iv_obj_name = lv_obj_name
CHANGING ct_objects = lt_objects ).
ENDIF.
* IF iv_type = 'CLAS'.
* fix_class_methods( EXPORTING iv_obj_name = lv_obj_name
* CHANGING ct_objects = lt_objects ).
* ENDIF.
LOOP AT lt_objects ASSIGNING <ls_object>.
<ls_object>-delet_flag = iv_delete.
@ -240,6 +246,7 @@ CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION.
METHOD clear.
CLEAR gt_objects.
CLEAR gt_classes.
ENDMETHOD. "clear
@ -250,6 +257,8 @@ CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION.
* eg. ZCL_CLAS_TESTTESTTESTTESTTESTT
* this will not be true, so find all the method includes instead
* TODO, this class is obsolete with new CLAS deserialization logic
DATA: lt_methods TYPE seop_methods_w_include,
lv_class TYPE seoclsname.
@ -316,6 +325,27 @@ CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION.
ENDMETHOD.
METHOD update_where_used.
DATA: lv_class LIKE LINE OF gt_classes,
lo_cross TYPE REF TO cl_wb_crossreference,
lv_include TYPE programm.
LOOP AT gt_classes INTO lv_class.
lv_include = cl_oo_classname_service=>get_classpool_name( lv_class ).
CREATE OBJECT lo_cross
EXPORTING
p_name = lv_include
p_include = lv_include.
lo_cross->index_actualize( ).
ENDLOOP.
ENDMETHOD.
METHOD use_new_activation_logic.
IF zcl_abapgit_persist_settings=>get_instance( )->read( )->get_experimental_features( ) = abap_true.

View File

@ -356,6 +356,11 @@ CLASS lcl_oo_class_new IMPLEMENTATION.
it_source = it_source
it_methods = lt_methods ).
* TODO, perhaps move this call to somewhere else, to be done while cleaning up the CLAS deserialization
zcl_abapgit_objects_activation=>add(
iv_type = 'CLAS'
iv_name = is_key-clsname ).
ENDMETHOD.
METHOD update_full_class_include.