From bfd54d3d61ba19d317a117209d305f0f0a2bd986 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Sat, 9 Sep 2017 07:14:31 +0200 Subject: [PATCH 01/11] docs: few notes on .abapgit.xml --- docs/ref-dot-abapgit.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/ref-dot-abapgit.md b/docs/ref-dot-abapgit.md index b0fdbf5ac..abbd77734 100644 --- a/docs/ref-dot-abapgit.md +++ b/docs/ref-dot-abapgit.md @@ -31,9 +31,12 @@ Example: abapGit own .abapgit.xml # Description +## Location +The `.abapgit.xml` file must be located in the root folder of the git repository. + ## Master Language -The language in which all documentation and dictionary elements texts will be created. Follows SAP `sy-langu` values. +The language in which all documentation and dictionary elements texts will be created. Follows SAP `sy-langu` values. Note that this implies that all objects in a repository will/should have the same master language. ## Starting Folder @@ -69,4 +72,4 @@ will give folder structure /zsomething/zhello/ ## Ignore -Files which abapGit will not download into your ABAP system. \ No newline at end of file +Files which abapGit will not download into your ABAP system. From 04b84e7381829edf06485705e132ead300384f87 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 9 Sep 2017 13:19:32 +0000 Subject: [PATCH 02/11] SICF show error, close #919 --- src/zabapgit_object_sicf.prog.abap | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/zabapgit_object_sicf.prog.abap b/src/zabapgit_object_sicf.prog.abap index 51a09b31e..fc4fd2a78 100644 --- a/src/zabapgit_object_sicf.prog.abap +++ b/src/zabapgit_object_sicf.prog.abap @@ -407,6 +407,11 @@ CLASS lcl_object_sicf IMPLEMENTATION. RETURN. ENDIF. + IF ls_icfservice-icfparguid CO '0'. +* not supported by the SAP standard API + lcx_exception=>raise( 'SICF - cannot delete root node, delete node manually' ). + ENDIF. + cl_icf_tree=>if_icf_tree~delete_node( EXPORTING icfparguid = ls_icfservice-icfparguid From 03b74e0992055931cc16a99e0c2b273263e8e43a Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 9 Sep 2017 13:45:11 +0000 Subject: [PATCH 03/11] DDLS error messages --- src/zabapgit_object_ddls.prog.abap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/zabapgit_object_ddls.prog.abap b/src/zabapgit_object_ddls.prog.abap index 7279125d2..a79e61e70 100644 --- a/src/zabapgit_object_ddls.prog.abap +++ b/src/zabapgit_object_ddls.prog.abap @@ -142,7 +142,7 @@ CLASS lcl_object_ddls IMPLEMENTATION. EXPORTING name = ms_item-obj_name. CATCH cx_root. - lcx_exception=>raise( 'DDLS error' ). + lcx_exception=>raise( 'DDLS error deleting' ). ENDTRY. ENDMETHOD. "delete @@ -171,7 +171,7 @@ CLASS lcl_object_ddls IMPLEMENTATION. IMPORTING ddddlsrcv_wa = . CATCH cx_root. - lcx_exception=>raise( 'DDLS error' ). + lcx_exception=>raise( 'DDLS error reading' ). ENDTRY. ASSIGN COMPONENT 'AS4USER' OF STRUCTURE TO . @@ -233,7 +233,7 @@ CLASS lcl_object_ddls IMPLEMENTATION. devclass = iv_package prid = 0. CATCH cx_root. - lcx_exception=>raise( 'DDLS error' ). + lcx_exception=>raise( 'DDLS error writing TADIR' ). ENDTRY. lcl_objects_activation=>add_item( ms_item ). From 0016916564a71967f31d7859a1a5c8fc5979d55a Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 10 Sep 2017 12:21:16 +0000 Subject: [PATCH 04/11] experimental features switch, #910 --- src/zabapgit_page_settings.prog.abap | 23 ++++- src/zabapgit_persistence.prog.abap | 132 +++++++++++++++------------ 2 files changed, 93 insertions(+), 62 deletions(-) diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap index cf155e04a..42e207acb 100644 --- a/src/zabapgit_page_settings.prog.abap +++ b/src/zabapgit_page_settings.prog.abap @@ -164,6 +164,13 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. mo_settings->set_run_critical_tests( abap_false ). ENDIF. + READ TABLE it_post_fields ASSIGNING WITH KEY name = 'experimental_features'. + IF sy-subrc = 0. + mo_settings->set_experimental_features( abap_true ). + ELSE. + mo_settings->set_experimental_features( abap_false ). + ENDIF. + READ TABLE it_post_fields ASSIGNING WITH KEY name = 'max_lines'. IF sy-subrc = 0. lv_i_param_value = -value. @@ -263,16 +270,24 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. METHOD render_development_internals. - DATA lv_checked TYPE string. + DATA: lv_critical_tests TYPE string, + lv_experimental TYPE string. IF mo_settings->get_run_critical_tests( ) = abap_true. - lv_checked = 'checked'. + lv_critical_tests = 'checked'. + ENDIF. + + IF mo_settings->get_experimental_features( ) = abap_true. + lv_experimental = 'checked'. ENDIF. CREATE OBJECT ro_html. ro_html->add( |

abapGit Development Internals settings

| ). - ro_html->add( ` Enable critical unit tests (see LTCL_DANGEROUS)` ). + ro_html->add( ` Enable critical unit tests (see LTCL_DANGEROUS)` ). + ro_html->add( |
| ). + ro_html->add( ` Enable experimental features` ). ro_html->add( |
| ). ro_html->add( |
| ). diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 2bb48a4d6..121077330 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -119,7 +119,7 @@ CLASS lcl_persistence_repo DEFINITION FINAL. TYPES: BEGIN OF ty_repo, key TYPE lcl_persistence_db=>ty_value. - INCLUDE TYPE ty_repo_xml. + INCLUDE TYPE ty_repo_xml. TYPES: END OF ty_repo. TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY. TYPES: tt_repo_keys TYPE STANDARD TABLE OF ty_repo-key WITH DEFAULT KEY. @@ -236,7 +236,7 @@ CLASS lcl_persist_background DEFINITION FINAL. TYPES: BEGIN OF ty_background, key TYPE lcl_persistence_db=>ty_value. - INCLUDE TYPE ty_xml. + INCLUDE TYPE ty_xml. TYPES: END OF ty_background. TYPES: tt_background TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY. @@ -284,59 +284,70 @@ CLASS lcl_settings DEFINITION FINAL. CONSTANTS: c_commitmsg_body_size_dft TYPE i VALUE 72. CONSTANTS: c_dbtype_settings TYPE lcl_persistence_db=>ty_type VALUE 'SETTINGS' ##NO_TEXT. - METHODS set_proxy_url + METHODS: set_proxy_url IMPORTING - iv_url TYPE string. - METHODS set_proxy_port - IMPORTING - iv_port TYPE string. - METHODS set_proxy_authentication - IMPORTING - iv_auth TYPE abap_bool. - METHODS get_proxy_url - RETURNING - VALUE(rv_proxy_url) TYPE string. - METHODS get_proxy_port - RETURNING - VALUE(rv_port) TYPE string. - METHODS get_proxy_authentication - RETURNING - VALUE(rv_auth) TYPE abap_bool. - METHODS set_run_critical_tests - IMPORTING - iv_run TYPE abap_bool. - METHODS + iv_url TYPE string, + set_proxy_port + IMPORTING + iv_port TYPE string, + set_proxy_authentication + IMPORTING + iv_auth TYPE abap_bool, + get_proxy_url + RETURNING + VALUE(rv_proxy_url) TYPE string, + get_proxy_port + RETURNING + VALUE(rv_port) TYPE string, + get_proxy_authentication + RETURNING + VALUE(rv_auth) TYPE abap_bool, + set_run_critical_tests + IMPORTING + iv_run TYPE abap_bool, get_run_critical_tests - RETURNING VALUE(rv_run) TYPE abap_bool. - METHODS set_max_lines - IMPORTING iv_lines TYPE i. - METHODS get_max_lines - RETURNING - VALUE(rv_lines) TYPE i. - METHODS set_adt_jump_enanbled - IMPORTING iv_adt_jump_enabled TYPE abap_bool. - METHODS get_adt_jump_enabled - RETURNING - VALUE(rv_adt_jump_enabled) TYPE abap_bool. - METHODS set_commitmsg_comment_length - IMPORTING iv_length TYPE i. - METHODS get_commitmsg_comment_length - RETURNING - VALUE(rv_length) TYPE i. - METHODS set_commitmsg_body_size - IMPORTING iv_length TYPE i. - METHODS get_commitmsg_body_size - RETURNING - VALUE(rv_length) TYPE i. - METHODS get_settings_xml - RETURNING VALUE(ev_settings_xml) TYPE string - RAISING lcx_exception. - METHODS set_xml_settings - IMPORTING iv_settings_xml TYPE string - RAISING lcx_exception. - METHODS set_defaults. - - + RETURNING + VALUE(rv_run) TYPE abap_bool, + set_experimental_features + IMPORTING + iv_run TYPE abap_bool, + get_experimental_features + RETURNING + VALUE(rv_run) TYPE abap_bool, + set_max_lines + IMPORTING iv_lines TYPE i, + get_max_lines + RETURNING + VALUE(rv_lines) TYPE i, + set_adt_jump_enanbled + IMPORTING + iv_adt_jump_enabled TYPE abap_bool, + get_adt_jump_enabled + RETURNING + VALUE(rv_adt_jump_enabled) TYPE abap_bool, + set_commitmsg_comment_length + IMPORTING + iv_length TYPE i, + get_commitmsg_comment_length + RETURNING + VALUE(rv_length) TYPE i, + set_commitmsg_body_size + IMPORTING + iv_length TYPE i, + get_commitmsg_body_size + RETURNING + VALUE(rv_length) TYPE i, + get_settings_xml + RETURNING + VALUE(ev_settings_xml) TYPE string + RAISING + lcx_exception, + set_xml_settings + IMPORTING + iv_settings_xml TYPE string + RAISING + lcx_exception, + set_defaults. PRIVATE SECTION. TYPES: BEGIN OF ty_s_settings, @@ -344,6 +355,7 @@ CLASS lcl_settings DEFINITION FINAL. proxy_port TYPE string, proxy_auth TYPE string, run_critical_tests TYPE abap_bool, + experimental_features TYPE abap_bool, max_lines TYPE i, adt_jump_enabled TYPE abap_bool, commitmsg_comment_length TYPE i, @@ -1828,6 +1840,14 @@ CLASS lcl_settings IMPLEMENTATION. rv_run = ms_settings-run_critical_tests. ENDMETHOD. + METHOD set_experimental_features. + ms_settings-experimental_features = iv_run. + ENDMETHOD. + + METHOD get_experimental_features. + rv_run = ms_settings-experimental_features. + ENDMETHOD. + METHOD get_max_lines. rv_lines = ms_settings-max_lines. ENDMETHOD. @@ -1891,15 +1911,11 @@ CLASS lcl_settings IMPLEMENTATION. CLEAR ms_settings. set_proxy_authentication( abap_false ). - set_run_critical_tests( abap_false ). - + set_experimental_features( abap_false ). set_max_lines( 500 ). - set_adt_jump_enanbled( abap_false ). - set_commitmsg_comment_length( lcl_settings=>c_commitmsg_comment_length_dft ). - set_commitmsg_body_size( lcl_settings=>c_commitmsg_body_size_dft ). ENDMETHOD. From a48bf4e69826d420cffa337ee50a14c9e57eb9d8 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 10 Sep 2017 13:45:09 +0000 Subject: [PATCH 05/11] code moved into abapGit #904 not tested, experimental --- src/zabapgit_object_clas.prog.abap | 57 ++-- src/zabapgit_object_clas_new.prog.abap | 396 ++++++++++++++++++++++ src/zabapgit_object_clas_new.prog.xml | 22 ++ src/zabapgit_object_serializing.prog.abap | 1 + 4 files changed, 446 insertions(+), 30 deletions(-) create mode 100644 src/zabapgit_object_clas_new.prog.abap create mode 100644 src/zabapgit_object_clas_new.prog.xml diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 0f58fa619..35991602c 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -18,32 +18,27 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program. iv_language TYPE spras. PROTECTED SECTION. - METHODS deserialize_abap - IMPORTING io_xml TYPE REF TO lcl_xml_input - iv_package TYPE devclass - RAISING lcx_exception. - - METHODS deserialize_docu - IMPORTING io_xml TYPE REF TO lcl_xml_input - RAISING lcx_exception. - DATA mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc. - PRIVATE SECTION. - DATA mv_skip_testclass TYPE abap_bool. - - METHODS deserialize_tpool - IMPORTING io_xml TYPE REF TO lcl_xml_input - RAISING lcx_exception. - - METHODS deserialize_sotr - IMPORTING io_xml TYPE REF TO lcl_xml_input - iv_package TYPE devclass - RAISING lcx_exception. - - - METHODS serialize_xml - IMPORTING io_xml TYPE REF TO lcl_xml_output - RAISING lcx_exception. + DATA: mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc, + mv_skip_testclass TYPE abap_bool. + METHODS: + deserialize_abap + IMPORTING io_xml TYPE REF TO lcl_xml_input + iv_package TYPE devclass + RAISING lcx_exception, + deserialize_docu + IMPORTING io_xml TYPE REF TO lcl_xml_input + RAISING lcx_exception, + deserialize_tpool + IMPORTING io_xml TYPE REF TO lcl_xml_input + RAISING lcx_exception, + deserialize_sotr + IMPORTING io_xml TYPE REF TO lcl_xml_input + iv_package TYPE devclass + RAISING lcx_exception, + serialize_xml + IMPORTING io_xml TYPE REF TO lcl_xml_output + RAISING lcx_exception. ENDCLASS. "lcl_object_dtel DEFINITION @@ -366,6 +361,7 @@ CLASS lcl_object_clas IMPLEMENTATION. iv_package = iv_package CHANGING is_properties = ls_vseoclass ). + mo_object_oriented_object_fct->generate_locals( is_key = ls_class_key iv_force = seox_true @@ -375,8 +371,8 @@ CLASS lcl_object_clas IMPLEMENTATION. it_local_test_classes = lt_test_classes ). mo_object_oriented_object_fct->deserialize_source( - is_key = ls_class_key - it_source = lt_source ). + is_key = ls_class_key + it_source = lt_source ). io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS' CHANGING cg_data = lt_descriptions ). @@ -385,7 +381,7 @@ CLASS lcl_object_clas IMPLEMENTATION. is_key = ls_class_key it_descriptions = lt_descriptions ). - mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ). + mo_object_oriented_object_fct->add_to_activation_list( ms_item ). ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. @@ -396,7 +392,7 @@ CLASS lcl_object_clas IMPLEMENTATION. super->constructor( is_item = is_item iv_language = iv_language ). - mo_object_oriented_object_fct = lcl_oo_factory=>make( iv_object_type = ms_item-obj_type ). + mo_object_oriented_object_fct = lcl_oo_factory=>make( ms_item-obj_type ). ENDMETHOD. ENDCLASS. "lcl_object_CLAS IMPLEMENTATION @@ -457,8 +453,9 @@ CLASS lcl_oo_class IMPLEMENTATION. lcx_exception=>raise( 'error from generate_locals' ). ENDIF. ENDMETHOD. + METHOD lif_oo_object_fnc~insert_text_pool. - DATA: lv_cp TYPE program. + DATA: lv_cp TYPE program. lv_cp = cl_oo_classname_service=>get_classpool_name( iv_class_name ). diff --git a/src/zabapgit_object_clas_new.prog.abap b/src/zabapgit_object_clas_new.prog.abap new file mode 100644 index 000000000..f42ca49bb --- /dev/null +++ b/src/zabapgit_object_clas_new.prog.abap @@ -0,0 +1,396 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_CLAS_NEW +*&---------------------------------------------------------------------* + +* todo: downport +* todo: refactoring +* todo: error handling, no breakpoints + +CLASS lcl_oo_class_new DEFINITION INHERITING FROM lcl_oo_class. + + PUBLIC SECTION. + METHODS: + lif_oo_object_fnc~create REDEFINITION, + lif_oo_object_fnc~generate_locals REDEFINITION, + lif_oo_object_fnc~deserialize_source REDEFINITION. + + PRIVATE SECTION. + CLASS-METHODS: + update_report + IMPORTING + iv_program TYPE programm + it_source TYPE string_table + RETURNING + VALUE(rv_updated) TYPE abap_bool, + generate_classpool + IMPORTING + iv_name TYPE seoclsname, + update_meta + IMPORTING + iv_name TYPE seoclsname + iv_exposure TYPE seoexpose + it_source TYPE rswsourcet, + determine_method_include + IMPORTING + iv_name TYPE seoclsname + iv_method TYPE seocpdname + RETURNING + VALUE(rv_program) TYPE programm, + init_scanner + IMPORTING + it_source TYPE lif_defs=>ty_string_tt + iv_name TYPE seoclsname + RETURNING + VALUE(ro_scanner) TYPE REF TO cl_oo_source_scanner_class. + +ENDCLASS. + +CLASS lcl_oo_class_new IMPLEMENTATION. + + METHOD determine_method_include. + + DATA: ls_mtdkey TYPE seocpdkey. + + + ls_mtdkey-clsname = iv_name. + ls_mtdkey-cpdname = iv_method. + + cl_oo_classname_service=>get_method_include( + EXPORTING + mtdkey = ls_mtdkey + RECEIVING + result = rv_program + EXCEPTIONS + method_not_existing = 1 ). + IF sy-subrc = 0. + RETURN. + ENDIF. + + CALL FUNCTION 'SEO_METHOD_GENERATE_INCLUDE' + EXPORTING + suppress_mtdkey_check = seox_true + mtdkey = ls_mtdkey + EXCEPTIONS + not_existing = 1 + model_only = 2 + include_existing = 3 + method_imp_not_generated = 4 + method_imp_not_initialised = 5 + _internal_class_not_existing = 6 + _internal_method_overflow = 7 + cancelled = 8 + method_is_abstract_implemented = 9 + method_is_final_implemented = 10 + internal_error_insert_report = 11 + OTHERS = 12. + IF sy-subrc <> 0. + BREAK-POINT. + ENDIF. + + rv_program = cl_oo_classname_service=>get_method_include( ls_mtdkey ). + + ENDMETHOD. + + METHOD lif_oo_object_fnc~create. +* same as in super class, but with "version = seoc_version_active" + + CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE' + EXPORTING + devclass = iv_package + overwrite = iv_overwrite + version = seoc_version_active + CHANGING + class = is_properties + EXCEPTIONS + existing = 1 + is_interface = 2 + db_error = 3 + component_error = 4 + no_access = 5 + other = 6 + OTHERS = 7. + IF sy-subrc <> 0. + lcx_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ). + ENDIF. + + ENDMETHOD. + + METHOD init_scanner. + +* DATA: lt_source TYPE seop_source_string. + + ro_scanner = cl_oo_source_scanner_class=>create_class_scanner( + clif_name = iv_name + source = it_source ). + ro_scanner->scan( ). + + ENDMETHOD. + + METHOD update_report. + + DATA: lt_old TYPE string_table. + + READ REPORT iv_program INTO lt_old. + ASSERT sy-subrc = 0. " include should have been created previously + IF lt_old <> it_source. + INSERT REPORT iv_program FROM it_source. + ASSERT sy-subrc = 0. + rv_updated = abap_true. + ELSE. + rv_updated = abap_false. + ENDIF. + + ENDMETHOD. + + METHOD lif_oo_object_fnc~generate_locals. + + DATA: lv_program TYPE programm. + + + lv_program = cl_oo_classname_service=>get_ccdef_name( is_key-clsname ). + update_report( iv_program = lv_program + it_source = it_local_definitions ). + + lv_program = cl_oo_classname_service=>get_ccimp_name( is_key-clsname ). + update_report( iv_program = lv_program + it_source = it_local_implementations ). + + lv_program = cl_oo_classname_service=>get_ccmac_name( is_key-clsname ). + update_report( iv_program = lv_program + it_source = it_local_macros ). + +* IF ms_class-with_unit_tests = abap_true. +* todo, this one is special +* iv_testclasses TYPE string OPTIONAL +* ENDIF. + + ENDMETHOD. + + METHOD update_meta. + + DATA: lo_update TYPE REF TO cl_oo_class_section_source, + ls_clskey TYPE seoclskey, + lv_scan_error TYPE seox_boolean. + + + ls_clskey-clsname = iv_name. + + CREATE OBJECT lo_update + EXPORTING + clskey = ls_clskey + exposure = iv_exposure + state = 'A' + source = it_source + suppress_constrctr_generation = seox_true + EXCEPTIONS + class_not_existing = 1 + read_source_error = 2 + OTHERS = 3. + IF sy-subrc <> 0. + BREAK-POINT. + ENDIF. + + lo_update->set_dark_mode( seox_true ). + lo_update->set_amdp_support( abap_true ). + lo_update->scan_section_source( + RECEIVING + scan_error = lv_scan_error + EXCEPTIONS + scan_abap_source_error = 1 + OTHERS = 2 ). + IF sy-subrc <> 0 OR lv_scan_error = abap_true. + BREAK-POINT. + ENDIF. + +* this will update the SEO* database tables + lo_update->revert_scan_result( ). + + IF iv_exposure = seoc_exposure_public. + generate_classpool( iv_name ). + ENDIF. + + ENDMETHOD. + + METHOD generate_classpool. + + DATA: ls_clskey TYPE seoclskey. + + ls_clskey-clsname = iv_name. + + CALL FUNCTION 'SEO_CLASS_GENERATE_CLASSPOOL' + EXPORTING + clskey = ls_clskey + suppress_corr = seox_true + EXCEPTIONS + not_existing = 1 + model_only = 2 + class_pool_not_generated = 3 + class_stment_not_generated = 4 + locals_not_generated = 5 + macros_not_generated = 6 + public_sec_not_generated = 7 + protected_sec_not_generated = 8 + private_sec_not_generated = 9 + typeref_not_generated = 10 + class_pool_not_initialised = 11 + class_stment_not_initialised = 12 + locals_not_initialised = 13 + macros_not_initialised = 14 + public_sec_not_initialised = 15 + protected_sec_not_initialised = 16 + private_sec_not_initialised = 17 + typeref_not_initialised = 18 + _internal_class_overflow = 19 + OTHERS = 20. + IF sy-subrc <> 0. + BREAK-POINT. + ENDIF. + + ENDMETHOD. + + METHOD lif_oo_object_fnc~deserialize_source. + + DATA: lv_updated TYPE abap_bool. + + DATA(lo_scanner) = init_scanner( + it_source = it_source + iv_name = is_key-clsname ). + +* public + DATA(lt_source) = lo_scanner->get_public_section_source( ). + DATA(lv_program) = cl_oo_classname_service=>get_pubsec_name( is_key-clsname ). + lv_updated = update_report( iv_program = lv_program + it_source = lt_source ). + IF lv_updated = abap_true. + update_meta( iv_name = is_key-clsname + iv_exposure = seoc_exposure_public + it_source = lt_source ). + ENDIF. + +* protected + lt_source = lo_scanner->get_protected_section_source( ). + lv_program = cl_oo_classname_service=>get_prosec_name( is_key-clsname ). + lv_updated = update_report( iv_program = lv_program + it_source = lt_source ). + IF lv_updated = abap_true. + update_meta( iv_name = is_key-clsname + iv_exposure = seoc_exposure_protected + it_source = lt_source ). + ENDIF. + +* private + lt_source = lo_scanner->get_private_section_source( ). + lv_program = cl_oo_classname_service=>get_prisec_name( is_key-clsname ). + lv_updated = update_report( iv_program = lv_program + it_source = lt_source ). + IF lv_updated = abap_true. + update_meta( iv_name = is_key-clsname + iv_exposure = seoc_exposure_private + it_source = lt_source ). + ENDIF. + +* methods + DATA(lt_methods) = lo_scanner->get_method_implementations( ). + + LOOP AT lt_methods INTO DATA(lv_method). + TRY. + lt_source = lo_scanner->get_method_impl_source( lv_method ). + CATCH cx_oo_clif_component. + BREAK-POINT. + ENDTRY. + lv_program = determine_method_include( + iv_name = is_key-clsname + iv_method = lv_method ). + + update_report( + iv_program = lv_program + it_source = lt_source ). + ENDLOOP. + + ENDMETHOD. + +ENDCLASS. + +CLASS lcl_object_clas_new DEFINITION INHERITING FROM lcl_object_clas. + + PUBLIC SECTION. + METHODS: constructor + IMPORTING + is_item TYPE lif_defs=>ty_item + iv_language TYPE spras. + + PROTECTED SECTION. + METHODS: + deserialize_abap REDEFINITION. + +ENDCLASS. + +CLASS lcl_object_clas_new IMPLEMENTATION. + + METHOD constructor. + super->constructor( is_item = is_item + iv_language = iv_language ). + + CREATE OBJECT mo_object_oriented_object_fct TYPE lcl_oo_class_new. + ENDMETHOD. + + METHOD deserialize_abap. +* same as in lcl_object_clas, but without "mo_object_oriented_object_fct->add_to_activation_list" + + DATA: ls_vseoclass TYPE vseoclass, + lt_source TYPE seop_source_string, + lt_local_definitions TYPE seop_source_string, + lt_local_implementations TYPE seop_source_string, + lt_local_macros TYPE seop_source_string, + lt_test_classes TYPE seop_source_string, + lt_descriptions TYPE lif_defs=>ty_seocompotx_tt, + ls_class_key TYPE seoclskey. + + + lt_source = mo_files->read_abap( ). + + lt_local_definitions = mo_files->read_abap( iv_extra = 'locals_def' + iv_error = abap_false ). "#EC NOTEXT + + lt_local_implementations = mo_files->read_abap( iv_extra = 'locals_imp' + iv_error = abap_false ). "#EC NOTEXT + + lt_local_macros = mo_files->read_abap( iv_extra = 'macros' + iv_error = abap_false ). "#EC NOTEXT + + lt_test_classes = mo_files->read_abap( iv_extra = 'testclasses' + iv_error = abap_false ). "#EC NOTEXT + + ls_class_key-clsname = ms_item-obj_name. + + io_xml->read( EXPORTING iv_name = 'VSEOCLASS' + CHANGING cg_data = ls_vseoclass ). + + mo_object_oriented_object_fct->create( + EXPORTING + iv_package = iv_package + CHANGING + is_properties = ls_vseoclass ). + + mo_object_oriented_object_fct->generate_locals( + is_key = ls_class_key + iv_force = seox_true + it_local_definitions = lt_local_definitions + it_local_implementations = lt_local_implementations + it_local_macros = lt_local_macros + it_local_test_classes = lt_test_classes ). + + mo_object_oriented_object_fct->deserialize_source( + is_key = ls_class_key + it_source = lt_source ). + + io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS' + CHANGING cg_data = lt_descriptions ). + + mo_object_oriented_object_fct->update_descriptions( + is_key = ls_class_key + it_descriptions = lt_descriptions ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zabapgit_object_clas_new.prog.xml b/src/zabapgit_object_clas_new.prog.xml new file mode 100644 index 000000000..7216bb678 --- /dev/null +++ b/src/zabapgit_object_clas_new.prog.xml @@ -0,0 +1,22 @@ + + + + + + ZABAPGIT_OBJECT_CLAS_NEW + A + X + I + E + X + + + + R + Include ZABAPGIT_OBJECT_CLAS_NEW + 32 + + + + + diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index 873d73425..b1bbe3978 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -8,6 +8,7 @@ INCLUDE zabapgit_object_acid. INCLUDE zabapgit_object_auth. INCLUDE zabapgit_object_oo_functions. INCLUDE zabapgit_object_clas. +INCLUDE zabapgit_object_clas_new. INCLUDE zabapgit_object_cmpt. INCLUDE zabapgit_object_dcls. INCLUDE zabapgit_object_ddls. From 1dd493d1e66119b978a04671fdd15963fd5cfb98 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 10 Sep 2017 13:59:47 +0000 Subject: [PATCH 06/11] enable via experimental switch #904 --- src/zabapgit_object_clas_new.prog.abap | 2 -- src/zabapgit_objects_impl.prog.abap | 20 +++++++++----------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/zabapgit_object_clas_new.prog.abap b/src/zabapgit_object_clas_new.prog.abap index f42ca49bb..17f1814eb 100644 --- a/src/zabapgit_object_clas_new.prog.abap +++ b/src/zabapgit_object_clas_new.prog.abap @@ -117,8 +117,6 @@ CLASS lcl_oo_class_new IMPLEMENTATION. METHOD init_scanner. -* DATA: lt_source TYPE seop_source_string. - ro_scanner = cl_oo_source_scanner_class=>create_class_scanner( clif_name = iv_name source = it_source ). diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 7f261aaef..843c0bcc0 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -227,34 +227,32 @@ CLASS lcl_objects IMPLEMENTATION. CONCATENATE 'LCL_OBJECT_' is_item-obj_type INTO rv_class_name. "#EC NOTEXT + IF lcl_app=>settings( )->read( )->get_experimental_features( ) = abap_true + AND is_item-obj_type = 'CLAS'. + rv_class_name = 'LCL_OBJECT_CLAS_NEW'. + ENDIF. + ENDMETHOD. "class_name METHOD jump. - DATA: li_obj TYPE REF TO lif_object, - adt_jump_enabled TYPE abap_bool. + DATA: li_obj TYPE REF TO lif_object, + lv_adt_jump_enabled TYPE abap_bool. li_obj = create_object( is_item = is_item iv_language = lif_defs=>gc_english ). - adt_jump_enabled = lcl_app=>settings( )->read( )->get_adt_jump_enabled( ). - - IF adt_jump_enabled = abap_true. + lv_adt_jump_enabled = lcl_app=>settings( )->read( )->get_adt_jump_enabled( ). + IF lv_adt_jump_enabled = abap_true. TRY. lcl_objects_super=>jump_adt( i_obj_name = is_item-obj_name i_obj_type = is_item-obj_type ). - CATCH lcx_exception. - li_obj->jump( ). - ENDTRY. - ELSE. - li_obj->jump( ). - ENDIF. ENDMETHOD. "jump From 5dfc9168fa1caf9c60a8b71b2d209eb4d431f2dd Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 10 Sep 2017 14:48:33 +0000 Subject: [PATCH 07/11] minor fixes and downporting #904 --- src/zabapgit_object_clas_new.prog.abap | 22 ++++++++++++++-------- src/zabapgit_objects_impl.prog.abap | 14 ++++++-------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/zabapgit_object_clas_new.prog.abap b/src/zabapgit_object_clas_new.prog.abap index 17f1814eb..15204852f 100644 --- a/src/zabapgit_object_clas_new.prog.abap +++ b/src/zabapgit_object_clas_new.prog.abap @@ -5,6 +5,7 @@ * todo: downport * todo: refactoring * todo: error handling, no breakpoints +* todo: testing, possible from master branch via experimental switch CLASS lcl_oo_class_new DEFINITION INHERITING FROM lcl_oo_class. @@ -157,10 +158,11 @@ CLASS lcl_oo_class_new IMPLEMENTATION. update_report( iv_program = lv_program it_source = it_local_macros ). -* IF ms_class-with_unit_tests = abap_true. -* todo, this one is special -* iv_testclasses TYPE string OPTIONAL -* ENDIF. + IF lines( it_local_test_classes ) > 0. + lv_program = cl_oo_classname_service=>get_ccau_name( is_key-clsname ). + update_report( iv_program = lv_program + it_source = it_local_test_classes ). + ENDIF. ENDMETHOD. @@ -248,15 +250,19 @@ CLASS lcl_oo_class_new IMPLEMENTATION. METHOD lif_oo_object_fnc~deserialize_source. - DATA: lv_updated TYPE abap_bool. + DATA: lv_updated TYPE abap_bool, + lv_program TYPE program, + lo_scanner TYPE REF TO cl_oo_source_scanner_class, + lt_source TYPE seop_source_string. - DATA(lo_scanner) = init_scanner( + + lo_scanner = init_scanner( it_source = it_source iv_name = is_key-clsname ). * public - DATA(lt_source) = lo_scanner->get_public_section_source( ). - DATA(lv_program) = cl_oo_classname_service=>get_pubsec_name( is_key-clsname ). + lt_source = lo_scanner->get_public_section_source( ). + lv_program = cl_oo_classname_service=>get_pubsec_name( is_key-clsname ). lv_updated = update_report( iv_program = lv_program it_source = lt_source ). IF lv_updated = abap_true. diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 843c0bcc0..0efc5a322 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -133,6 +133,11 @@ CLASS lcl_objects IMPLEMENTATION. lv_class_name = class_name( is_item ). ENDIF. + IF lcl_app=>settings( )->read( )->get_experimental_features( ) = abap_true + AND is_item-obj_type = 'CLAS'. + lv_class_name = 'LCL_OBJECT_CLAS_NEW'. + ENDIF. + TRY. CREATE OBJECT ri_obj TYPE (lv_class_name) EXPORTING @@ -227,11 +232,6 @@ CLASS lcl_objects IMPLEMENTATION. CONCATENATE 'LCL_OBJECT_' is_item-obj_type INTO rv_class_name. "#EC NOTEXT - IF lcl_app=>settings( )->read( )->get_experimental_features( ) = abap_true - AND is_item-obj_type = 'CLAS'. - rv_class_name = 'LCL_OBJECT_CLAS_NEW'. - ENDIF. - ENDMETHOD. "class_name METHOD jump. @@ -587,9 +587,7 @@ CLASS lcl_objects IMPLEMENTATION. lt_remote = io_repo->get_files_remote( ). lt_results = lcl_file_status=>status( io_repo ). - DELETE lt_results WHERE - match = abap_true. " Full match -* OR rstate IS INITIAL. " no remote changes, only local + DELETE lt_results WHERE match = abap_true. " Full match SORT lt_results BY obj_type ASCENDING obj_name ASCENDING. DELETE ADJACENT DUPLICATES FROM lt_results COMPARING obj_type obj_name. From 26a55f25424b7125a55cd21c1aaef596d6f0ddb2 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 10 Sep 2017 15:11:27 +0000 Subject: [PATCH 08/11] remove breakpoints #904 --- src/zabapgit_object_clas_new.prog.abap | 30 +++++++++++++++----------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/zabapgit_object_clas_new.prog.abap b/src/zabapgit_object_clas_new.prog.abap index 15204852f..4491372d4 100644 --- a/src/zabapgit_object_clas_new.prog.abap +++ b/src/zabapgit_object_clas_new.prog.abap @@ -2,9 +2,7 @@ *& Include ZABAPGIT_OBJECT_CLAS_NEW *&---------------------------------------------------------------------* -* todo: downport * todo: refactoring -* todo: error handling, no breakpoints * todo: testing, possible from master branch via experimental switch CLASS lcl_oo_class_new DEFINITION INHERITING FROM lcl_oo_class. @@ -25,18 +23,24 @@ CLASS lcl_oo_class_new DEFINITION INHERITING FROM lcl_oo_class. VALUE(rv_updated) TYPE abap_bool, generate_classpool IMPORTING - iv_name TYPE seoclsname, + iv_name TYPE seoclsname + RAISING + lcx_exception, update_meta IMPORTING iv_name TYPE seoclsname iv_exposure TYPE seoexpose - it_source TYPE rswsourcet, + it_source TYPE rswsourcet + RAISING + lcx_exception, determine_method_include IMPORTING iv_name TYPE seoclsname iv_method TYPE seocpdname RETURNING - VALUE(rv_program) TYPE programm, + VALUE(rv_program) TYPE programm + RAISING + lcx_exception, init_scanner IMPORTING it_source TYPE lif_defs=>ty_string_tt @@ -85,7 +89,7 @@ CLASS lcl_oo_class_new IMPLEMENTATION. internal_error_insert_report = 11 OTHERS = 12. IF sy-subrc <> 0. - BREAK-POINT. + lcx_exception=>raise( 'error from SEO_METHOD_GENERATE_INCLUDE' ). ENDIF. rv_program = cl_oo_classname_service=>get_method_include( ls_mtdkey ). @@ -187,7 +191,7 @@ CLASS lcl_oo_class_new IMPLEMENTATION. read_source_error = 2 OTHERS = 3. IF sy-subrc <> 0. - BREAK-POINT. + lcx_exception=>raise( 'error instantiating CL_OO_CLASS_SECTION_SOURCE' ). ENDIF. lo_update->set_dark_mode( seox_true ). @@ -199,7 +203,7 @@ CLASS lcl_oo_class_new IMPLEMENTATION. scan_abap_source_error = 1 OTHERS = 2 ). IF sy-subrc <> 0 OR lv_scan_error = abap_true. - BREAK-POINT. + lcx_exception=>raise( 'CLAS, error while scanning source' ). ENDIF. * this will update the SEO* database tables @@ -243,7 +247,7 @@ CLASS lcl_oo_class_new IMPLEMENTATION. _internal_class_overflow = 19 OTHERS = 20. IF sy-subrc <> 0. - BREAK-POINT. + lcx_exception=>raise( 'error from SEO_CLASS_GENERATE_CLASSPOOL' ). ENDIF. ENDMETHOD. @@ -253,6 +257,8 @@ CLASS lcl_oo_class_new IMPLEMENTATION. DATA: lv_updated TYPE abap_bool, lv_program TYPE program, lo_scanner TYPE REF TO cl_oo_source_scanner_class, + lt_methods TYPE cl_oo_source_scanner_class=>type_method_implementations, + lv_method LIKE LINE OF lt_methods, lt_source TYPE seop_source_string. @@ -294,13 +300,13 @@ CLASS lcl_oo_class_new IMPLEMENTATION. ENDIF. * methods - DATA(lt_methods) = lo_scanner->get_method_implementations( ). + lt_methods = lo_scanner->get_method_implementations( ). - LOOP AT lt_methods INTO DATA(lv_method). + LOOP AT lt_methods INTO lv_method. TRY. lt_source = lo_scanner->get_method_impl_source( lv_method ). CATCH cx_oo_clif_component. - BREAK-POINT. + lcx_exception=>raise( 'error from GET_METHOD_IMPL_SOURCE' ). ENDTRY. lv_program = determine_method_include( iv_name = is_key-clsname From 352d47426357c7f77f5da35547fd5b14a9548a2c Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 11 Sep 2017 16:47:45 +0000 Subject: [PATCH 09/11] add variable, #914 --- src/zabapgit_object_fugr.prog.abap | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index 57af54833..948da37cf 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -430,11 +430,12 @@ CLASS lcl_object_fugr IMPLEMENTATION. cnam TYPE reposrc-cnam, END OF ty_reposrc. - DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc WITH DEFAULT KEY, - ls_reposrc LIKE LINE OF lt_reposrc, - lv_program TYPE program, - lv_tabix LIKE sy-tabix, - lt_functab TYPE ty_rs38l_incl_tt. + DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc WITH DEFAULT KEY, + ls_reposrc LIKE LINE OF lt_reposrc, + lv_program TYPE program, + lv_offset_ns TYPE i, + lv_tabix LIKE sy-tabix, + lt_functab TYPE ty_rs38l_incl_tt. FIELD-SYMBOLS: LIKE LINE OF rt_includes, LIKE LINE OF lt_functab. @@ -464,15 +465,15 @@ CLASS lcl_object_fugr IMPLEMENTATION. * handle generated maintenance views APPEND INITIAL LINE TO rt_includes ASSIGNING . - if ms_item-obj_name(1) <> '/'. + IF ms_item-obj_name(1) <> '/'. "FGroup name does not contain a namespace = |L{ ms_item-obj_name }T00|. - else. + ELSE. "FGroup name contains a namespace lv_offset_ns = find( val = ms_item-obj_name+1 sub = '/' ). lv_offset_ns = lv_offset_ns + 2. = |{ ms_item-obj_name(lv_offset_ns) }L{ ms_item-obj_name+lv_offset_ns }T00|. - endif. + ENDIF. IF lines( rt_includes ) > 0. SELECT progname cnam FROM reposrc From 03c3c7acc3affe4005eb0a8b13e7d046c12cd0a4 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 11 Sep 2017 16:48:34 +0000 Subject: [PATCH 10/11] v1.41.2 --- src/zabapgit_definitions.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index db306e460..8aae714e6 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -7,7 +7,7 @@ TYPE-POOLS seop. INTERFACE lif_defs. CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.41.1'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.41.2'. "#EC NOTEXT TYPES: ty_type TYPE c LENGTH 6, ty_bitbyte TYPE c LENGTH 8, From 23c9b69fbbed058b995f7d7fa95c5a6af46fa576 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Mon, 11 Sep 2017 18:51:02 +0200 Subject: [PATCH 11/11] v1.41.2 --- changelog.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/changelog.txt b/changelog.txt index 741bbe4e7..175ca1a4c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -8,6 +8,14 @@ Legend + : added - : removed +2017-09-11 v1.41.2 +------------------ +* FUGR table maintenance, namespaces +* SICF show error message when deleting root node +* DDLS better error messages +* ENHS allow transport popup ++ experimental, optional opt-in: CLAS deserialization performance + 2017-09-03 v1.41.1 ------------------ * DDLS changed_by