From b18586ba3260c83e0e2079b173e7588fcdd7aa88 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Thu, 15 Sep 2022 11:34:32 -0400 Subject: [PATCH] CLAS,INTF: Add missing shorttexts (#5755) * CLAS,INTF: Add missing shorttexts Serializes shorttexts for sub components (like method and event parameters). Preparation for https://github.com/abapGit/abapGit/pull/5718 New test cases: https://github.com/abapGit-tests/INTF_docu https://github.com/abapGit-tests/CLAS_docu * Clear/set class/interface name for shorttexts Co-authored-by: Lars Hvam --- src/objects/oo/zcl_abapgit_oo_base.clas.abap | 54 +++++++- .../oo/zif_abapgit_oo_object_fnc.intf.abap | 12 ++ src/objects/zcl_abapgit_object_clas.clas.abap | 44 +++++++ src/objects/zcl_abapgit_object_intf.clas.abap | 117 +++++++++++++----- ..._abapgit_object_intf.clas.testclasses.abap | 6 + .../zcl_abapgit_objects_program.clas.abap | 28 ++--- 6 files changed, 215 insertions(+), 46 deletions(-) diff --git a/src/objects/oo/zcl_abapgit_oo_base.clas.abap b/src/objects/oo/zcl_abapgit_oo_base.clas.abap index 06346df9b..760ef7660 100644 --- a/src/objects/oo/zcl_abapgit_oo_base.clas.abap +++ b/src/objects/oo/zcl_abapgit_oo_base.clas.abap @@ -21,7 +21,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_OO_BASE IMPLEMENTATION. +CLASS zcl_abapgit_oo_base IMPLEMENTATION. METHOD convert_attrib_to_vseoattrib. @@ -147,6 +147,8 @@ CLASS ZCL_ABAPGIT_OO_BASE IMPLEMENTATION. METHOD zif_abapgit_oo_object_fnc~read_descriptions. + FIELD-SYMBOLS LIKE LINE OF rt_descriptions. + IF iv_language IS INITIAL. " load all languages SELECT * FROM seocompotx INTO TABLE rt_descriptions @@ -161,6 +163,34 @@ CLASS ZCL_ABAPGIT_OO_BASE IMPLEMENTATION. AND descript <> '' ORDER BY PRIMARY KEY. "#EC CI_SUBRC ENDIF. + + LOOP AT rt_descriptions ASSIGNING . + CLEAR -clsname. + ENDLOOP. + ENDMETHOD. + + + METHOD zif_abapgit_oo_object_fnc~read_descriptions_sub. + FIELD-SYMBOLS LIKE LINE OF rt_descriptions. + + IF iv_language IS INITIAL. + " load all languages + SELECT * FROM seosubcotx INTO TABLE rt_descriptions + WHERE clsname = iv_object_name + AND descript <> '' + ORDER BY PRIMARY KEY. "#EC CI_SUBRC + ELSE. + " load main language + SELECT * FROM seosubcotx INTO TABLE rt_descriptions + WHERE clsname = iv_object_name + AND langu = iv_language + AND descript <> '' + ORDER BY PRIMARY KEY. "#EC CI_SUBRC + ENDIF. + + LOOP AT rt_descriptions ASSIGNING . + CLEAR -clsname. + ENDLOOP. ENDMETHOD. @@ -228,7 +258,27 @@ CLASS ZCL_ABAPGIT_OO_BASE IMPLEMENTATION. METHOD zif_abapgit_oo_object_fnc~update_descriptions. + DATA lt_descriptions LIKE it_descriptions. + FIELD-SYMBOLS LIKE LINE OF it_descriptions. + + lt_descriptions = it_descriptions. + LOOP AT lt_descriptions ASSIGNING . + -clsname = is_key-clsname. + ENDLOOP. DELETE FROM seocompotx WHERE clsname = is_key-clsname. "#EC CI_SUBRC - INSERT seocompotx FROM TABLE it_descriptions. "#EC CI_SUBRC + INSERT seocompotx FROM TABLE lt_descriptions. "#EC CI_SUBRC + ENDMETHOD. + + + METHOD zif_abapgit_oo_object_fnc~update_descriptions_sub. + DATA lt_descriptions LIKE it_descriptions. + FIELD-SYMBOLS LIKE LINE OF it_descriptions. + + lt_descriptions = it_descriptions. + LOOP AT lt_descriptions ASSIGNING . + -clsname = is_key-clsname. + ENDLOOP. + DELETE FROM seosubcotx WHERE clsname = is_key-clsname. "#EC CI_SUBRC + INSERT seosubcotx FROM TABLE lt_descriptions. "#EC CI_SUBRC ENDMETHOD. ENDCLASS. diff --git a/src/objects/oo/zif_abapgit_oo_object_fnc.intf.abap b/src/objects/oo/zif_abapgit_oo_object_fnc.intf.abap index 57bb48ecc..f9b32c6a0 100644 --- a/src/objects/oo/zif_abapgit_oo_object_fnc.intf.abap +++ b/src/objects/oo/zif_abapgit_oo_object_fnc.intf.abap @@ -15,6 +15,8 @@ INTERFACE zif_abapgit_oo_object_fnc PUBLIC. TYPES: ty_seocompotx_tt TYPE STANDARD TABLE OF seocompotx WITH DEFAULT KEY . + TYPES: + ty_seosubcotx_tt TYPE STANDARD TABLE OF seosubcotx WITH DEFAULT KEY . METHODS: create @@ -54,6 +56,10 @@ INTERFACE zif_abapgit_oo_object_fnc PUBLIC. IMPORTING is_key TYPE seoclskey it_descriptions TYPE ty_seocompotx_tt, + update_descriptions_sub + IMPORTING + is_key TYPE seoclskey + it_descriptions TYPE ty_seosubcotx_tt, add_to_activation_list IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item @@ -145,6 +151,12 @@ INTERFACE zif_abapgit_oo_object_fnc PUBLIC. iv_language TYPE spras OPTIONAL RETURNING VALUE(rt_descriptions) TYPE ty_seocompotx_tt, + read_descriptions_sub + IMPORTING + iv_object_name TYPE seoclsname + iv_language TYPE spras OPTIONAL + RETURNING + VALUE(rt_descriptions) TYPE ty_seosubcotx_tt, delete IMPORTING is_deletion_key TYPE seoclskey diff --git a/src/objects/zcl_abapgit_object_clas.clas.abap b/src/objects/zcl_abapgit_object_clas.clas.abap index f1a37cb05..334e9466a 100644 --- a/src/objects/zcl_abapgit_object_clas.clas.abap +++ b/src/objects/zcl_abapgit_object_clas.clas.abap @@ -45,6 +45,12 @@ CLASS zcl_abapgit_object_clas DEFINITION !iv_clsname TYPE seoclsname RAISING zcx_abapgit_exception, + serialize_descr_sub + IMPORTING + !ii_xml TYPE REF TO zif_abapgit_xml_output + !iv_clsname TYPE seoclsname + RAISING + zcx_abapgit_exception, serialize_docu IMPORTING !ii_xml TYPE REF TO zif_abapgit_xml_output @@ -119,6 +125,7 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION. lt_local_macros TYPE seop_source_string, lt_test_classes TYPE seop_source_string, lt_descriptions TYPE zif_abapgit_oo_object_fnc=>ty_seocompotx_tt, + lt_descriptions_sub TYPE zif_abapgit_oo_object_fnc=>ty_seosubcotx_tt, ls_class_key TYPE seoclskey, lt_attributes TYPE zif_abapgit_definitions=>ty_obj_attribute_tt. @@ -180,6 +187,13 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION. is_key = ls_class_key it_descriptions = lt_descriptions ). + ii_xml->read( EXPORTING iv_name = 'DESCRIPTIONS_SUB' + CHANGING cg_data = lt_descriptions_sub ). + + mi_object_oriented_object_fct->update_descriptions_sub( + is_key = ls_class_key + it_descriptions = lt_descriptions_sub ). + mi_object_oriented_object_fct->add_to_activation_list( ms_item ). ENDMETHOD. @@ -395,6 +409,33 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION. ENDMETHOD. + METHOD serialize_descr_sub. + + DATA: lt_descriptions TYPE zif_abapgit_oo_object_fnc=>ty_seosubcotx_tt, + lv_language TYPE spras, + lt_language_filter TYPE zif_abapgit_environment=>ty_system_language_filter. + + IF ii_xml->i18n_params( )-main_language_only = abap_true. + lv_language = mv_language. + ENDIF. + + lt_descriptions = mi_object_oriented_object_fct->read_descriptions_sub( + iv_object_name = iv_clsname + iv_language = lv_language ). + + IF lines( lt_descriptions ) = 0. + RETURN. + ENDIF. + " Remove technical languages + lt_language_filter = zcl_abapgit_factory=>get_environment( )->get_system_language_filter( ). + DELETE lt_descriptions WHERE NOT langu IN lt_language_filter. + + ii_xml->add( iv_name = 'DESCRIPTIONS_SUB' + ig_data = lt_descriptions ). + + ENDMETHOD. + + METHOD serialize_docu. DATA: lt_lines TYPE tlinetab, @@ -590,6 +631,9 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION. serialize_descr( ii_xml = ii_xml iv_clsname = ls_clskey-clsname ). + serialize_descr_sub( ii_xml = ii_xml + iv_clsname = ls_clskey-clsname ). + serialize_attr( ii_xml = ii_xml iv_clsname = ls_clskey-clsname ). diff --git a/src/objects/zcl_abapgit_object_intf.clas.abap b/src/objects/zcl_abapgit_object_intf.clas.abap index baefc3a33..36fc5d182 100644 --- a/src/objects/zcl_abapgit_object_intf.clas.abap +++ b/src/objects/zcl_abapgit_object_intf.clas.abap @@ -10,16 +10,16 @@ CLASS zcl_abapgit_object_intf DEFINITION PUBLIC FINAL INHERITING FROM zcl_abapgi TYPES: BEGIN OF ty_intf, - vseointerf TYPE vseointerf, - docu TYPE ty_docu, - description TYPE zif_abapgit_oo_object_fnc=>ty_seocompotx_tt, + vseointerf TYPE vseointerf, + docu TYPE ty_docu, + description TYPE zif_abapgit_oo_object_fnc=>ty_seocompotx_tt, + description_sub TYPE zif_abapgit_oo_object_fnc=>ty_seosubcotx_tt, END OF ty_intf. METHODS constructor IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item iv_language TYPE spras. - PROTECTED SECTION. METHODS deserialize_proxy IMPORTING @@ -46,6 +46,13 @@ CLASS zcl_abapgit_object_intf DEFINITION PUBLIC FINAL INHERITING FROM zcl_abapgi RETURNING VALUE(rs_description) TYPE ty_intf-description RAISING zcx_abapgit_exception. + METHODS serialize_descr_sub + IMPORTING + !ii_xml TYPE REF TO zif_abapgit_xml_output + !iv_clsname TYPE seoclsname + RETURNING VALUE(rs_description) TYPE ty_intf-description_sub + RAISING + zcx_abapgit_exception. METHODS serialize_xml IMPORTING !io_xml TYPE REF TO zif_abapgit_xml_output @@ -65,6 +72,9 @@ CLASS zcl_abapgit_object_intf DEFINITION PUBLIC FINAL INHERITING FROM zcl_abapgi METHODS deserialize_descriptions IMPORTING it_description TYPE zif_abapgit_oo_object_fnc=>ty_seocompotx_tt OPTIONAL. + METHODS deserialize_descr_sub + IMPORTING + it_description TYPE zif_abapgit_oo_object_fnc=>ty_seosubcotx_tt OPTIONAL. METHODS read_xml IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input @@ -90,17 +100,6 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. ENDMETHOD. - METHOD read_xml. - ii_xml->read( EXPORTING iv_name = 'VSEOINTERF' - CHANGING cg_data = rs_intf-vseointerf ). - ii_xml->read( EXPORTING iv_name = 'DESCRIPTIONS' - CHANGING cg_data = rs_intf-description ). - ii_xml->read( EXPORTING iv_name = 'LINES' - CHANGING cg_data = rs_intf-docu-lines ). - ii_xml->read( EXPORTING iv_name = 'I18N_LINES' - CHANGING cg_data = rs_intf-docu-i18n_lines ). - ENDMETHOD. - METHOD deserialize_descriptions. DATA: ls_clskey TYPE seoclskey. ls_clskey-clsname = ms_item-obj_name. @@ -111,6 +110,16 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. ENDMETHOD. + METHOD deserialize_descr_sub. + DATA: ls_clskey TYPE seoclskey. + ls_clskey-clsname = ms_item-obj_name. + + mi_object_oriented_object_fct->update_descriptions_sub( + is_key = ls_clskey + it_descriptions = it_description ). + ENDMETHOD. + + METHOD deserialize_docu. DATA: lv_object TYPE dokhl-object, ls_i18n_lines TYPE zif_abapgit_lang_definitions=>ty_i18n_line. @@ -204,6 +213,35 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. ENDMETHOD. + METHOD read_json. + DATA lv_json_data TYPE xstring. + DATA ls_intf_aff TYPE zif_abapgit_aff_intf_v1=>ty_main. + DATA lo_aff_mapper TYPE REF TO zif_abapgit_aff_type_mapping. + + lv_json_data = zif_abapgit_object~mo_files->read_raw( iv_ext = 'json' ). + ls_intf_aff = lcl_aff_metadata_handler=>deserialize( lv_json_data ). + + CREATE OBJECT lo_aff_mapper TYPE lcl_aff_type_mapping. + lo_aff_mapper->to_abapgit( EXPORTING iv_data = ls_intf_aff + iv_object_name = ms_item-obj_name + IMPORTING es_data = rs_intf ). + ENDMETHOD. + + + METHOD read_xml. + ii_xml->read( EXPORTING iv_name = 'VSEOINTERF' + CHANGING cg_data = rs_intf-vseointerf ). + ii_xml->read( EXPORTING iv_name = 'DESCRIPTIONS' + CHANGING cg_data = rs_intf-description ). + ii_xml->read( EXPORTING iv_name = 'DESCRIPTIONS_SUB' + CHANGING cg_data = rs_intf-description_sub ). + ii_xml->read( EXPORTING iv_name = 'LINES' + CHANGING cg_data = rs_intf-docu-lines ). + ii_xml->read( EXPORTING iv_name = 'I18N_LINES' + CHANGING cg_data = rs_intf-docu-i18n_lines ). + ENDMETHOD. + + METHOD serialize_descr. DATA: lt_descriptions TYPE zif_abapgit_oo_object_fnc=>ty_seocompotx_tt, @@ -231,6 +269,33 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. ENDMETHOD. + METHOD serialize_descr_sub. + + DATA: lt_descriptions TYPE zif_abapgit_oo_object_fnc=>ty_seosubcotx_tt, + lv_language TYPE spras, + lt_language_filter TYPE zif_abapgit_environment=>ty_system_language_filter. + + IF ii_xml->i18n_params( )-main_language_only = abap_true. + lv_language = mv_language. + ENDIF. + + lt_descriptions = mi_object_oriented_object_fct->read_descriptions_sub( + iv_object_name = iv_clsname + iv_language = lv_language ). + + " Remove technical languages + lt_language_filter = zcl_abapgit_factory=>get_environment( )->get_system_language_filter( ). + DELETE lt_descriptions WHERE NOT langu IN lt_language_filter. + + IF lines( lt_descriptions ) = 0. + RETURN. + ENDIF. + + rs_description = lt_descriptions. + + ENDMETHOD. + + METHOD serialize_docu. DATA: lt_lines TYPE tlinetab, @@ -312,6 +377,9 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. ls_intf-description = serialize_descr( ii_xml = io_xml iv_clsname = ls_clskey-clsname ). + ls_intf-description_sub = serialize_descr_sub( ii_xml = io_xml + iv_clsname = ls_clskey-clsname ). + " HERE: switch with feature flag for XML or JSON file format IF zcl_abapgit_persist_factory=>get_settings( )->read( )->get_experimental_features( ) = abap_true. lv_serialized_data = lcl_aff_metadata_handler=>serialize( ls_intf ). @@ -323,6 +391,8 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. ig_data = ls_intf-vseointerf ). io_xml->add( iv_name = 'DESCRIPTIONS' ig_data = ls_intf-description ). + io_xml->add( iv_name = 'DESCRIPTIONS_SUB' + ig_data = ls_intf-description_sub ). io_xml->add( iv_name = 'LINES' ig_data = ls_intf-docu-lines ). io_xml->add( iv_name = 'I18N_LINES' @@ -423,6 +493,8 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. deserialize_descriptions( it_description = ls_intf-description ). + deserialize_descr_sub( it_description = ls_intf-description_sub ). + deserialize_docu( is_docu = ls_intf-docu ). mi_object_oriented_object_fct->add_to_activation_list( ms_item ). @@ -443,21 +515,6 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. ENDMETHOD. - METHOD read_json. - DATA lv_json_data TYPE xstring. - DATA ls_intf_aff TYPE zif_abapgit_aff_intf_v1=>ty_main. - DATA lo_aff_mapper TYPE REF TO zif_abapgit_aff_type_mapping. - - lv_json_data = zif_abapgit_object~mo_files->read_raw( iv_ext = 'json' ). - ls_intf_aff = lcl_aff_metadata_handler=>deserialize( lv_json_data ). - - CREATE OBJECT lo_aff_mapper TYPE lcl_aff_type_mapping. - lo_aff_mapper->to_abapgit( EXPORTING iv_data = ls_intf_aff - iv_object_name = ms_item-obj_name - IMPORTING es_data = rs_intf ). - ENDMETHOD. - - METHOD zif_abapgit_object~exists. DATA: ls_class_key TYPE seoclskey, diff --git a/src/objects/zcl_abapgit_object_intf.clas.testclasses.abap b/src/objects/zcl_abapgit_object_intf.clas.testclasses.abap index 73966cb18..47e740884 100644 --- a/src/objects/zcl_abapgit_object_intf.clas.testclasses.abap +++ b/src/objects/zcl_abapgit_object_intf.clas.testclasses.abap @@ -79,6 +79,9 @@ CLASS lth_oo_object_fnc IMPLEMENTATION. METHOD zif_abapgit_oo_object_fnc~read_descriptions. ENDMETHOD. + METHOD zif_abapgit_oo_object_fnc~read_descriptions_sub. + ENDMETHOD. + METHOD zif_abapgit_oo_object_fnc~read_documentation. ENDMETHOD. @@ -99,6 +102,9 @@ CLASS lth_oo_object_fnc IMPLEMENTATION. mt_descriptions = it_descriptions. ENDMETHOD. + METHOD zif_abapgit_oo_object_fnc~update_descriptions_sub. + ENDMETHOD. + ENDCLASS. diff --git a/src/objects/zcl_abapgit_objects_program.clas.abap b/src/objects/zcl_abapgit_objects_program.clas.abap index 1125d55c9..56415b7e9 100644 --- a/src/objects/zcl_abapgit_objects_program.clas.abap +++ b/src/objects/zcl_abapgit_objects_program.clas.abap @@ -41,23 +41,23 @@ CLASS zcl_abapgit_objects_program DEFINITION 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 + !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 + !iv_extra TYPE clike OPTIONAL RAISING zcx_abapgit_exception. METHODS read_progdir IMPORTING - !iv_program TYPE programm + !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 + !it_source TYPE abaptxt255_tab + !it_tpool TYPE textpool_table !iv_package TYPE devclass RAISING zcx_abapgit_exception. @@ -200,7 +200,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_OBJECTS_PROGRAM IMPLEMENTATION. +CLASS zcl_abapgit_objects_program IMPLEMENTATION. METHOD add_tpool. @@ -337,10 +337,10 @@ CLASS ZCL_ABAPGIT_OBJECTS_PROGRAM IMPLEMENTATION. CONSTANTS lc_rpyty_force_off TYPE c LENGTH 1 VALUE '/'. - DATA: lv_name TYPE dwinactiv-obj_name, + DATA: lv_name TYPE dwinactiv-obj_name, lt_d020s_to_delete TYPE TABLE OF d020s, - ls_d020s LIKE LINE OF lt_d020s_to_delete, - ls_dynpro LIKE LINE OF it_dynpros. + ls_d020s LIKE LINE OF lt_d020s_to_delete, + ls_dynpro LIKE LINE OF it_dynpros. FIELD-SYMBOLS: TYPE rpy_dyfatc. @@ -446,9 +446,9 @@ CLASS ZCL_ABAPGIT_OBJECTS_PROGRAM IMPLEMENTATION. CALL FUNCTION 'RS_SCRP_DELETE' EXPORTING - dynnr = ls_d020s-dnum - progname = ms_item-obj_name - with_popup = abap_false + dynnr = ls_d020s-dnum + progname = ms_item-obj_name + with_popup = abap_false EXCEPTIONS enqueued_by_user = 1 enqueue_system_failure = 2