diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 7ec348804..119a894ed 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -67,6 +67,8 @@ INCLUDE zabapgit_objects_impl. INCLUDE zabapgit_object_serializing. " All serializing classes here +INCLUDE zabapgit_skip_objects. + INCLUDE zabapgit_repo_impl. INCLUDE zabapgit_background. INCLUDE zabapgit_transport. diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index d7402cfa1..827bf21ba 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -144,8 +144,8 @@ CLASS lcl_file_status IMPLEMENTATION. METHOD status. - DATA: lv_index LIKE sy-tabix, - lo_dot_abapgit TYPE REF TO lcl_dot_abapgit. + DATA: lv_index LIKE sy-tabix, + lo_dot_abapgit TYPE REF TO lcl_dot_abapgit. FIELD-SYMBOLS LIKE LINE OF rt_results. diff --git a/src/zabapgit_object_oo_functions.prog.abap b/src/zabapgit_object_oo_functions.prog.abap index ba0fe5da8..2d71e47c9 100644 --- a/src/zabapgit_object_oo_functions.prog.abap +++ b/src/zabapgit_object_oo_functions.prog.abap @@ -125,7 +125,12 @@ INTERFACE lif_oo_object_fnc. IMPORTING is_deletion_key TYPE seoclskey RAISING - lcx_exception. + lcx_exception, + read_superclass + IMPORTING + iv_classname TYPE seoclsname + RETURNING + VALUE(rv_superclass) TYPE seoclsname. ENDINTERFACE. CLASS lcl_oo_serializer DEFINITION. @@ -612,6 +617,11 @@ CLASS lcl_oo_base IMPLEMENTATION. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. + METHOD lif_oo_object_fnc~read_superclass. + SELECT SINGLE refclsname FROM vseoextend INTO rv_superclass + WHERE clsname = iv_classname. + ENDMETHOD. + ENDCLASS. "Backdoor injection for test purposes diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 8d5147f8a..bccf9b731 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -636,7 +636,8 @@ CLASS lcl_repo IMPLEMENTATION. lt_tadir = lcl_tadir=>read( iv_package = get_package( ) iv_ignore_subpackages = ignore_subpackages( ) - io_dot = get_dot_abapgit( ) ). + io_dot = get_dot_abapgit( ) + io_log = io_log ). lt_filter = it_filter. lv_filter_exist = boolc( lines( lt_filter ) > 0 ). diff --git a/src/zabapgit_skip_objects.prog.abap b/src/zabapgit_skip_objects.prog.abap new file mode 100644 index 000000000..ccc528e30 --- /dev/null +++ b/src/zabapgit_skip_objects.prog.abap @@ -0,0 +1,47 @@ +*&---------------------------------------------------------------------* +*& Include zabapgit_skip_objects +*&---------------------------------------------------------------------* + +CLASS lcl_skip_objects IMPLEMENTATION. + METHOD skip_sadl_generated_objects. + DATA: ls_tadir_class LIKE LINE OF rt_tadir, + lo_sadl_class TYPE REF TO lif_object, + ls_item TYPE lif_defs=>ty_tadir, + ls_tadir LIKE LINE OF rt_tadir, + lt_lines_to_delete TYPE lif_defs=>ty_tadir_tt. + + rt_tadir = it_tadir. + LOOP AT it_tadir INTO ls_tadir WHERE object = 'DDLS'. + LOOP AT rt_tadir INTO ls_tadir_class + WHERE object = 'CLAS' AND obj_name CS ls_tadir-obj_name. + + IF has_sadl_superclass( ls_tadir_class ). + APPEND ls_tadir_class TO lt_lines_to_delete. + ENDIF. + ENDLOOP. + ENDLOOP. + + 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 io_log IS BOUND. + io_log->add( + iv_msg = |{ ls_tadir_class-obj_name } skipped: generated by SADL| + iv_type = 'W' ). + ENDIF. + ENDLOOP. + ENDMETHOD. + + METHOD has_sadl_superclass. + DATA: lo_oo_functions TYPE REF TO lif_oo_object_fnc, + lv_class_name TYPE seoclsname, + lv_superclass TYPE seoclsname. + + lo_oo_functions = lcl_oo_factory=>make( is_class-object ). + lv_class_name = is_class-obj_name. + lv_superclass = lo_oo_functions->read_superclass( lv_class_name ). + IF lv_superclass = 'CL_SADL_GTK_EXPOSURE_MPC'. + rv_return = abap_true. + ENDIF. + ENDMETHOD. +ENDCLASS. diff --git a/src/zabapgit_skip_objects.prog.xml b/src/zabapgit_skip_objects.prog.xml new file mode 100644 index 000000000..3ab107430 --- /dev/null +++ b/src/zabapgit_skip_objects.prog.xml @@ -0,0 +1,25 @@ + + + + + + ZABAPGIT_SKIP_OBJECTS + A + X + S + D$ + I + X + D$S + X + + + + R + Include ZABAPGIT_SKIP_OBJECTS + 29 + + + + + diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index b3170da02..4877431a3 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -7,6 +7,24 @@ *----------------------------------------------------------------------* * *----------------------------------------------------------------------* +CLASS lcl_skip_objects DEFINITION. + PUBLIC SECTION. + METHODS: + skip_sadl_generated_objects + IMPORTING + it_tadir TYPE lif_defs=>ty_tadir_tt + io_log TYPE REF TO lcl_log OPTIONAL + RETURNING + VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt. + PRIVATE SECTION. + METHODS: + has_sadl_superclass + IMPORTING + is_class TYPE lif_defs=>ty_tadir + RETURNING + VALUE(rv_return) TYPE abap_bool. +ENDCLASS. + CLASS lcl_tadir DEFINITION FINAL. PUBLIC SECTION. @@ -15,6 +33,7 @@ CLASS lcl_tadir DEFINITION FINAL. IMPORTING iv_package TYPE tadir-devclass iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false io_dot TYPE REF TO lcl_dot_abapgit OPTIONAL + io_log TYPE REF TO lcl_log OPTIONAL RETURNING VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt RAISING lcx_exception, read_single @@ -50,6 +69,7 @@ CLASS lcl_tadir DEFINITION FINAL. iv_top TYPE tadir-devclass io_dot TYPE REF TO lcl_dot_abapgit iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false + io_log TYPE REF TO lcl_log OPTIONAL RETURNING VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt RAISING lcx_exception. @@ -188,7 +208,8 @@ CLASS lcl_tadir IMPLEMENTATION. rt_tadir = build( iv_package = iv_package iv_top = iv_package io_dot = io_dot - iv_ignore_subpackages = iv_ignore_subpackages ). + iv_ignore_subpackages = iv_ignore_subpackages + io_log = io_log ). rt_tadir = check_exists( rt_tadir ). @@ -196,9 +217,10 @@ CLASS lcl_tadir IMPLEMENTATION. METHOD build. - DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt, - lt_tdevc TYPE STANDARD TABLE OF tdevc, - lv_path TYPE string. + DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt, + lt_tdevc TYPE STANDARD TABLE OF tdevc, + lv_path TYPE string, + lo_skip_objects TYPE REF TO lcl_skip_objects. FIELD-SYMBOLS: LIKE LINE OF lt_tdevc, LIKE LINE OF rt_tadir. @@ -216,6 +238,11 @@ CLASS lcl_tadir IMPLEMENTATION. AND delflag = abap_false ORDER BY PRIMARY KEY. "#EC CI_GENBUFF "#EC CI_SUBRC + CREATE OBJECT lo_skip_objects. + rt_tadir = lo_skip_objects->skip_sadl_generated_objects( + it_tadir = rt_tadir + io_log = io_log ). + IF NOT io_dot IS INITIAL. lv_path = lcl_folder_logic=>package_to_path( iv_top = iv_top @@ -243,7 +270,8 @@ CLASS lcl_tadir IMPLEMENTATION. LOOP AT lt_tdevc ASSIGNING . lt_tadir = build( iv_package = -devclass iv_top = iv_top - io_dot = io_dot ). + io_dot = io_dot + io_log = io_log ). APPEND LINES OF lt_tadir TO rt_tadir. ENDLOOP. diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap index de0f19545..424cf4323 100644 --- a/src/zabapgit_unit_test_clas_intf.prog.abap +++ b/src/zabapgit_unit_test_clas_intf.prog.abap @@ -150,6 +150,10 @@ CLASS ltd_spy_oo_object IMPLEMENTATION. ms_delete_key = is_deletion_key. ENDMETHOD. + METHOD lif_oo_object_fnc~read_superclass. + RETURN. + ENDMETHOD. + ENDCLASS. CLASS ltd_fake_object_files DEFINITION FOR TESTING