CLAS: Refactor skip of SADL classes (#6198)

This commit is contained in:
Marc Bernard 2023-04-06 11:19:32 +02:00 committed by GitHub
parent 99bdf3a1b9
commit af3e47527d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 138 deletions

View File

@ -1,74 +0,0 @@
CLASS zcl_abapgit_skip_objects DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
METHODS:
skip_sadl_generated_objects
IMPORTING
it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
ii_log TYPE REF TO zif_abapgit_log OPTIONAL
RETURNING
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt.
PROTECTED SECTION.
PRIVATE SECTION.
METHODS:
has_sadl_superclass
IMPORTING
is_class TYPE zif_abapgit_definitions=>ty_tadir
RETURNING
VALUE(rv_return) TYPE abap_bool.
ENDCLASS.
CLASS ZCL_ABAPGIT_SKIP_OBJECTS IMPLEMENTATION.
METHOD has_sadl_superclass.
DATA: li_oo_functions TYPE REF TO zif_abapgit_oo_object_fnc,
lv_class_name TYPE seoclsname,
lv_superclass TYPE seoclsname.
li_oo_functions = zcl_abapgit_oo_factory=>make( is_class-object ).
lv_class_name = is_class-obj_name.
lv_superclass = li_oo_functions->read_superclass( lv_class_name ).
IF lv_superclass = 'CL_SADL_GTK_EXPOSURE_MPC'.
rv_return = abap_true.
ENDIF.
ENDMETHOD.
METHOD skip_sadl_generated_objects.
DATA: ls_tadir_class LIKE LINE OF rt_tadir,
ls_tadir LIKE LINE OF rt_tadir,
lt_candidates LIKE rt_tadir,
lt_lines_to_delete TYPE zif_abapgit_definitions=>ty_tadir_tt.
lt_candidates = it_tadir.
DELETE lt_candidates WHERE object <> 'CLAS' OR genflag = abap_false.
LOOP AT it_tadir INTO ls_tadir WHERE object = 'DDLS'.
LOOP AT lt_candidates INTO ls_tadir_class
WHERE object = 'CLAS' AND obj_name CS ls_tadir-obj_name.
IF has_sadl_superclass( ls_tadir_class ) = abap_true.
APPEND ls_tadir_class TO lt_lines_to_delete.
ENDIF.
ENDLOOP.
ENDLOOP.
rt_tadir = it_tadir.
DELETE ADJACENT DUPLICATES FROM lt_lines_to_delete.
LOOP AT lt_lines_to_delete INTO ls_tadir_class.
DELETE TABLE rt_tadir FROM ls_tadir_class.
IF ii_log IS BOUND.
ii_log->add(
iv_msg = |{ ls_tadir_class-obj_name } skipped: generated by SADL|
iv_type = 'W' ).
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

View File

@ -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>ZCL_ABAPGIT_SKIP_OBJECTS</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Skip Objects</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -38,15 +38,6 @@ CLASS zcl_abapgit_tadir DEFINITION
!et_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
METHODS skip_objects
IMPORTING
!iv_package TYPE tadir-devclass
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
!ii_log TYPE REF TO zif_abapgit_log OPTIONAL
CHANGING
!ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception ##NEEDED.
METHODS add_local_packages
IMPORTING
!it_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt
@ -203,14 +194,6 @@ CLASS zcl_abapgit_tadir IMPLEMENTATION.
et_tadir = rt_tadir
et_packages = lt_packages ).
skip_objects(
EXPORTING
iv_package = iv_package
io_dot = io_dot
ii_log = ii_log
CHANGING
ct_tadir = rt_tadir ).
add_local_packages(
EXPORTING
it_packages = lt_packages
@ -394,21 +377,6 @@ CLASS zcl_abapgit_tadir IMPLEMENTATION.
ENDMETHOD.
METHOD skip_objects.
" Todo, replace with solution that will work with any object type (might depend on iv_package and io_dot)
DATA lo_skip_objects TYPE REF TO zcl_abapgit_skip_objects.
CREATE OBJECT lo_skip_objects.
ct_tadir = lo_skip_objects->skip_sadl_generated_objects(
it_tadir = ct_tadir
ii_log = ii_log ).
ENDMETHOD.
METHOD zif_abapgit_tadir~get_object_package.
DATA: ls_tadir TYPE zif_abapgit_definitions=>ty_tadir,

View File

@ -63,8 +63,8 @@ CLASS zcl_abapgit_object_clas DEFINITION
zcx_abapgit_exception,
serialize_tpool
IMPORTING
!ii_xml TYPE REF TO zif_abapgit_xml_output
!iv_clsname TYPE seoclsname
!ii_xml TYPE REF TO zif_abapgit_xml_output
!iv_clsname TYPE seoclsname
RETURNING
VALUE(rt_tpool) TYPE textpool_table
RAISING
@ -102,7 +102,6 @@ CLASS zcl_abapgit_object_clas DEFINITION
events TYPE string VALUE 'LONGTEXTS_CE',
types TYPE string VALUE 'LONGTEXTS_CT',
END OF c_longtext_name.
CONSTANTS:
BEGIN OF c_longtext_id,
class TYPE dokil-id VALUE 'CL',
@ -114,25 +113,29 @@ CLASS zcl_abapgit_object_clas DEFINITION
METHODS deserialize_pre_ddic
IMPORTING
ii_xml TYPE REF TO zif_abapgit_xml_input
iv_package TYPE devclass
!ii_xml TYPE REF TO zif_abapgit_xml_input
!iv_package TYPE devclass
RAISING
zcx_abapgit_exception.
METHODS:
is_class_locked
RETURNING VALUE(rv_is_class_locked) TYPE abap_bool
RAISING zcx_abapgit_exception.
METHODS is_class_locked
RETURNING
VALUE(rv_is_class_locked) TYPE abap_bool
RAISING
zcx_abapgit_exception.
METHODS interface_replacement
IMPORTING
!iv_from_interface TYPE seoclsname
!iv_to_interface TYPE seoclsname
CHANGING
!ct_source TYPE seop_source_string .
!ct_source TYPE seop_source_string.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_CLAS IMPLEMENTATION.
CLASS zcl_abapgit_object_clas IMPLEMENTATION.
METHOD constructor.
@ -319,9 +322,9 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS IMPLEMENTATION.
METHOD deserialize_tpool.
DATA: lv_clsname TYPE seoclsname,
lt_tpool_ext TYPE zif_abapgit_definitions=>ty_tpool_tt,
lt_tpool TYPE textpool_table.
DATA: lv_clsname TYPE seoclsname,
lt_tpool_ext TYPE zif_abapgit_definitions=>ty_tpool_tt,
lt_tpool TYPE textpool_table.
ii_xml->read( EXPORTING iv_name = 'TPOOL'
CHANGING cg_data = lt_tpool_ext ).
@ -594,7 +597,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS IMPLEMENTATION.
METHOD serialize_tpool_i18n.
DATA: lt_tpool TYPE textpool_table,
DATA: lt_tpool TYPE textpool_table,
lv_index TYPE i,
lv_langu TYPE sy-langu,
lt_i18n_tpool TYPE zif_abapgit_lang_definitions=>ty_i18n_tpools,
@ -848,10 +851,19 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS IMPLEMENTATION.
METHOD zif_abapgit_object~exists.
DATA: ls_class_key TYPE seoclskey.
DATA ls_class_key TYPE seoclskey.
ls_class_key-clsname = ms_item-obj_name.
rv_bool = mi_object_oriented_object_fct->exists( ls_class_key ).
" Skip classes generated by DDLS (SADL)
IF rv_bool = abap_true AND
mi_object_oriented_object_fct->read_superclass( ls_class_key-clsname ) = 'CL_SADL_GTK_EXPOSURE_MPC'.
rv_bool = abap_false.
ENDIF.
ENDMETHOD.