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 <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2022-09-15 11:34:32 -04:00 committed by GitHub
parent b9bb9a8094
commit b18586ba32
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 215 additions and 46 deletions

View File

@ -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 <ls_description> 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 <ls_description>.
CLEAR <ls_description>-clsname.
ENDLOOP.
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~read_descriptions_sub.
FIELD-SYMBOLS <ls_description> 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 <ls_description>.
CLEAR <ls_description>-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 <ls_description> LIKE LINE OF it_descriptions.
lt_descriptions = it_descriptions.
LOOP AT lt_descriptions ASSIGNING <ls_description>.
<ls_description>-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 <ls_description> LIKE LINE OF it_descriptions.
lt_descriptions = it_descriptions.
LOOP AT lt_descriptions ASSIGNING <ls_description>.
<ls_description>-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.

View File

@ -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

View File

@ -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 ).

View File

@ -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,

View File

@ -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.

View File

@ -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: <ls_field> 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