From 380508d72c02f37f15344165411fc5a145f73e72 Mon Sep 17 00:00:00 2001 From: Alexander Tsybulsky Date: Mon, 13 Jun 2022 13:00:09 +0300 Subject: [PATCH] FUGR: Better maintenance view auto comments cleanups (#5622) --- src/objects/zcl_abapgit_object_fugr.clas.abap | 4 +- .../zcl_abapgit_objects_program.clas.abap | 120 +++++++++-------- ...pgit_objects_program.clas.testclasses.abap | 122 ++++++++++++++++++ .../zcl_abapgit_objects_program.clas.xml | 1 + src/zcx_abapgit_exception.clas.abap | 21 +-- 5 files changed, 205 insertions(+), 63 deletions(-) create mode 100644 src/objects/zcl_abapgit_objects_program.clas.testclasses.abap diff --git a/src/objects/zcl_abapgit_object_fugr.clas.abap b/src/objects/zcl_abapgit_object_fugr.clas.abap index 7ce9dd752..ede02f09a 100644 --- a/src/objects/zcl_abapgit_object_fugr.clas.abap +++ b/src/objects/zcl_abapgit_object_fugr.clas.abap @@ -142,7 +142,7 @@ ENDCLASS. -CLASS zcl_abapgit_object_fugr IMPLEMENTATION. +CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION. METHOD check_rfc_parameters. @@ -853,10 +853,12 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION. APPEND ls_function TO rt_functions. IF NOT lt_new_source IS INITIAL. + strip_generation_comments( CHANGING ct_source = lt_new_source ). zif_abapgit_object~mo_files->add_abap( iv_extra = -funcname it_abap = lt_new_source ). ELSE. + strip_generation_comments( CHANGING ct_source = lt_source ). zif_abapgit_object~mo_files->add_abap( iv_extra = -funcname it_abap = lt_source ). diff --git a/src/objects/zcl_abapgit_objects_program.clas.abap b/src/objects/zcl_abapgit_objects_program.clas.abap index 163544b31..1125d55c9 100644 --- a/src/objects/zcl_abapgit_objects_program.clas.abap +++ b/src/objects/zcl_abapgit_objects_program.clas.abap @@ -1,58 +1,66 @@ -CLASS zcl_abapgit_objects_program DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super. +CLASS zcl_abapgit_objects_program DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_objects_super + CREATE PUBLIC . PUBLIC SECTION. - TYPES: BEGIN OF ty_progdir, - name TYPE progdir-name, - state TYPE progdir-state, - sqlx TYPE progdir-sqlx, - edtx TYPE progdir-edtx, - varcl TYPE progdir-varcl, - dbapl TYPE progdir-dbapl, - dbna TYPE progdir-dbna, - clas TYPE progdir-clas, - type TYPE progdir-type, - occurs TYPE progdir-occurs, - subc TYPE progdir-subc, - appl TYPE progdir-appl, - secu TYPE progdir-secu, - cnam TYPE progdir-cnam, - cdat TYPE progdir-cdat, - unam TYPE progdir-unam, - udat TYPE progdir-udat, - vern TYPE progdir-vern, - levl TYPE progdir-levl, - rstat TYPE progdir-rstat, - rmand TYPE progdir-rmand, - rload TYPE progdir-rload, - fixpt TYPE progdir-fixpt, - sset TYPE progdir-sset, - sdate TYPE progdir-sdate, - stime TYPE progdir-stime, - idate TYPE progdir-idate, - itime TYPE progdir-itime, - ldbname TYPE progdir-ldbname, - uccheck TYPE progdir-uccheck, - END OF ty_progdir. + + TYPES: + BEGIN OF ty_progdir, + name TYPE progdir-name, + state TYPE progdir-state, + sqlx TYPE progdir-sqlx, + edtx TYPE progdir-edtx, + varcl TYPE progdir-varcl, + dbapl TYPE progdir-dbapl, + dbna TYPE progdir-dbna, + clas TYPE progdir-clas, + type TYPE progdir-type, + occurs TYPE progdir-occurs, + subc TYPE progdir-subc, + appl TYPE progdir-appl, + secu TYPE progdir-secu, + cnam TYPE progdir-cnam, + cdat TYPE progdir-cdat, + unam TYPE progdir-unam, + udat TYPE progdir-udat, + vern TYPE progdir-vern, + levl TYPE progdir-levl, + rstat TYPE progdir-rstat, + rmand TYPE progdir-rmand, + rload TYPE progdir-rload, + fixpt TYPE progdir-fixpt, + sset TYPE progdir-sset, + sdate TYPE progdir-sdate, + stime TYPE progdir-stime, + idate TYPE progdir-idate, + itime TYPE progdir-itime, + ldbname TYPE progdir-ldbname, + uccheck TYPE progdir-uccheck, + END OF ty_progdir. METHODS serialize_program - IMPORTING io_xml TYPE REF TO zif_abapgit_xml_output OPTIONAL - is_item TYPE zif_abapgit_definitions=>ty_item - io_files TYPE REF TO zcl_abapgit_objects_files - iv_program TYPE programm OPTIONAL - iv_extra TYPE clike OPTIONAL - RAISING zcx_abapgit_exception. - + IMPORTING + !io_xml TYPE REF TO zif_abapgit_xml_output OPTIONAL + !is_item TYPE zif_abapgit_definitions=>ty_item + !io_files TYPE REF TO zcl_abapgit_objects_files + !iv_program TYPE programm OPTIONAL + !iv_extra TYPE clike OPTIONAL + RAISING + zcx_abapgit_exception. METHODS read_progdir - IMPORTING iv_program TYPE programm - RETURNING VALUE(rs_progdir) TYPE ty_progdir. - + IMPORTING + !iv_program TYPE programm + RETURNING + VALUE(rs_progdir) TYPE ty_progdir. METHODS deserialize_program - IMPORTING is_progdir TYPE ty_progdir - it_source TYPE abaptxt255_tab - it_tpool TYPE textpool_table - iv_package TYPE devclass - RAISING zcx_abapgit_exception. - + IMPORTING + !is_progdir TYPE ty_progdir + !it_source TYPE abaptxt255_tab + !it_tpool TYPE textpool_table + !iv_package TYPE devclass + RAISING + zcx_abapgit_exception. PROTECTED SECTION. TYPES: @@ -85,7 +93,7 @@ CLASS zcl_abapgit_objects_program DEFINITION PUBLIC INHERITING FROM zcl_abapgit_ METHODS strip_generation_comments CHANGING - ct_source TYPE abaptxt255_tab. + ct_source TYPE STANDARD TABLE. " tab of string or charX METHODS serialize_dynpros IMPORTING !iv_program_name TYPE programm @@ -192,7 +200,7 @@ ENDCLASS. -CLASS zcl_abapgit_objects_program IMPLEMENTATION. +CLASS ZCL_ABAPGIT_OBJECTS_PROGRAM IMPLEMENTATION. METHOD add_tpool. @@ -965,12 +973,20 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. METHOD strip_generation_comments. - FIELD-SYMBOLS LIKE LINE OF ct_source. + FIELD-SYMBOLS TYPE any. " Assuming CHAR (e.g. abaptxt255_tab) or string (FUGR) IF ms_item-obj_type <> 'FUGR'. RETURN. ENDIF. + " Case 1: MV FM main prog and TOPs + READ TABLE ct_source INDEX 1 ASSIGNING . + IF sy-subrc = 0 AND CP '#**regenerated at *'. + DELETE ct_source INDEX 1. + RETURN. + ENDIF. + + " Case 2: MV FM includes IF lines( ct_source ) < 5. " Generation header length RETURN. ENDIF. diff --git a/src/objects/zcl_abapgit_objects_program.clas.testclasses.abap b/src/objects/zcl_abapgit_objects_program.clas.testclasses.abap new file mode 100644 index 000000000..d746c3945 --- /dev/null +++ b/src/objects/zcl_abapgit_objects_program.clas.testclasses.abap @@ -0,0 +1,122 @@ +CLASS ltcl_test DEFINITION FINAL + FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT. + + PRIVATE SECTION. + METHODS strip_generation_comments_1 FOR TESTING. + METHODS strip_generation_comments_2 FOR TESTING. +ENDCLASS. + +CLASS zcl_abapgit_objects_program DEFINITION LOCAL FRIENDS ltcl_test. + +CLASS ltcl_test IMPLEMENTATION. + METHOD strip_generation_comments_1. + + DATA lo_cut TYPE REF TO zcl_abapgit_objects_program. + DATA ls_item TYPE zif_abapgit_definitions=>ty_item. + DATA lt_src_orig TYPE abaptxt255_tab. + DATA lt_src_act TYPE abaptxt255_tab. + DATA lt_src_exp TYPE abaptxt255_tab. + + + APPEND '*---------------------------------------------------------------------*' TO lt_src_orig. + APPEND '* view related data declarations' TO lt_src_orig. + APPEND '* generation date: 03.02.2022 at 13:19:02' TO lt_src_orig. + APPEND '* view maintenance generator version: #001407#' TO lt_src_orig. + APPEND '*---------------------------------------------------------------------*' TO lt_src_orig. + APPEND 'some code starts here' TO lt_src_orig. + + APPEND '*---------------------------------------------------------------------*' TO lt_src_exp. + APPEND '* view related data declarations' TO lt_src_exp. + APPEND '*---------------------------------------------------------------------*' TO lt_src_exp. + APPEND 'some code starts here' TO lt_src_exp. + + " case 1, not FUGR, should skip + ls_item-obj_type = 'PROG'. + CREATE OBJECT lo_cut + EXPORTING + iv_language = 'E' + is_item = ls_item. + + lt_src_act = lt_src_orig. + lo_cut->strip_generation_comments( CHANGING ct_source = lt_src_act ). + cl_abap_unit_assert=>assert_equals( + act = lt_src_act + exp = lt_src_orig ). + + " case 2, FUGR + ls_item-obj_type = 'FUGR'. + CREATE OBJECT lo_cut + EXPORTING + iv_language = 'E' + is_item = ls_item. + + lt_src_act = lt_src_orig. + lo_cut->strip_generation_comments( CHANGING ct_source = lt_src_act ). + cl_abap_unit_assert=>assert_equals( + act = lt_src_act + exp = lt_src_exp ). + + " case 3, wrong pattern + + CLEAR lt_src_orig. + APPEND '*---------------------------------------------------------------------*' TO lt_src_orig. + APPEND '* extra line' TO lt_src_orig. + APPEND '* view related data declarations' TO lt_src_orig. + APPEND '* generation date: 03.02.2022 at 13:19:02' TO lt_src_orig. + APPEND '* view maintenance generator version: #001407#' TO lt_src_orig. + APPEND '*---------------------------------------------------------------------*' TO lt_src_orig. + APPEND 'some code starts here' TO lt_src_orig. + + ls_item-obj_type = 'FUGR'. + CREATE OBJECT lo_cut + EXPORTING + iv_language = 'E' + is_item = ls_item. + + lt_src_act = lt_src_orig. + lo_cut->strip_generation_comments( CHANGING ct_source = lt_src_act ). + cl_abap_unit_assert=>assert_equals( + act = lt_src_act + exp = lt_src_orig ). + + ENDMETHOD. + + METHOD strip_generation_comments_2. + + DATA lo_cut TYPE REF TO zcl_abapgit_objects_program. + DATA ls_item TYPE zif_abapgit_definitions=>ty_item. + DATA lt_src_orig TYPE abaptxt255_tab. + DATA lt_src_act TYPE abaptxt255_tab. + DATA lt_src_exp TYPE abaptxt255_tab. + + + APPEND '* regenerated at 06.06.2022 10:47:40' TO lt_src_orig. + APPEND 'some code 1' TO lt_src_orig. + APPEND 'some code 2' TO lt_src_orig. + APPEND 'some code 3' TO lt_src_orig. + APPEND 'some code 4' TO lt_src_orig. + APPEND 'some code 5' TO lt_src_orig. + + APPEND 'some code 1' TO lt_src_exp. + APPEND 'some code 2' TO lt_src_exp. + APPEND 'some code 3' TO lt_src_exp. + APPEND 'some code 4' TO lt_src_exp. + APPEND 'some code 5' TO lt_src_exp. + + " case 1, not FUGR, should skip + ls_item-obj_type = 'FUGR'. + CREATE OBJECT lo_cut + EXPORTING + iv_language = 'E' + is_item = ls_item. + + lt_src_act = lt_src_orig. + lo_cut->strip_generation_comments( CHANGING ct_source = lt_src_act ). + cl_abap_unit_assert=>assert_equals( + act = lt_src_act + exp = lt_src_exp ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/objects/zcl_abapgit_objects_program.clas.xml b/src/objects/zcl_abapgit_objects_program.clas.xml index d353fc39f..3b3629a80 100644 --- a/src/objects/zcl_abapgit_objects_program.clas.xml +++ b/src/objects/zcl_abapgit_objects_program.clas.xml @@ -10,6 +10,7 @@ X X X + X diff --git a/src/zcx_abapgit_exception.clas.abap b/src/zcx_abapgit_exception.clas.abap index 80fe4ad02..35eb46277 100644 --- a/src/zcx_abapgit_exception.clas.abap +++ b/src/zcx_abapgit_exception.clas.abap @@ -133,7 +133,7 @@ ENDCLASS. -CLASS zcx_abapgit_exception IMPLEMENTATION. +CLASS ZCX_ABAPGIT_EXCEPTION IMPLEMENTATION. METHOD constructor ##ADT_SUPPRESS_GENERATION. @@ -382,6 +382,16 @@ CLASS zcx_abapgit_exception IMPLEMENTATION. ENDMETHOD. + METHOD remove_newlines_from_string. + rv_result = iv_string. + + REPLACE ALL OCCURRENCES OF ` ` && cl_abap_char_utilities=>cr_lf IN rv_result WITH ` `. + REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN rv_result WITH ` `. + REPLACE ALL OCCURRENCES OF ` ` && cl_abap_char_utilities=>newline IN rv_result WITH ` `. + REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN rv_result WITH ` `. + ENDMETHOD. + + METHOD replace_section_head_with_text. CASE cs_itf-tdline. @@ -483,13 +493,4 @@ CLASS zcx_abapgit_exception IMPLEMENTATION. rs_msg = ls_msg. ENDMETHOD. - - METHOD remove_newlines_from_string. - rv_result = iv_string. - - REPLACE ALL OCCURRENCES OF ` ` && cl_abap_char_utilities=>cr_lf IN rv_result WITH ` `. - REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN rv_result WITH ` `. - REPLACE ALL OCCURRENCES OF ` ` && cl_abap_char_utilities=>newline IN rv_result WITH ` `. - REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN rv_result WITH ` `. - ENDMETHOD. ENDCLASS.