From 0f653bf15f11ebb3d2c077ba9db9499931534498 Mon Sep 17 00:00:00 2001
From: larshp
Date: Sun, 29 Jan 2017 09:59:52 +0000
Subject: [PATCH 1/6] ZABAPGIT table activation, #583
---
src/zabapgit_persistence.prog.abap | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap
index a72153586..499c3da02 100644
--- a/src/zabapgit_persistence.prog.abap
+++ b/src/zabapgit_persistence.prog.abap
@@ -1349,7 +1349,8 @@ CLASS lcl_persistence_migrate IMPLEMENTATION.
METHOD table_create.
- DATA: lv_obj_name TYPE tadir-obj_name,
+ DATA: lv_rc LIKE sy-subrc,
+ lv_obj_name TYPE tadir-obj_name,
ls_dd02v TYPE dd02v,
ls_dd09l TYPE dd09l,
lt_dd03p TYPE STANDARD TABLE OF dd03p WITH DEFAULT KEY.
@@ -1427,11 +1428,14 @@ CLASS lcl_persistence_migrate IMPLEMENTATION.
CALL FUNCTION 'DDIF_TABL_ACTIVATE'
EXPORTING
name = lcl_persistence_db=>c_tabname
+ auth_chk = abap_false
+ IMPORTING
+ rc = lv_rc
EXCEPTIONS
not_found = 1
put_failure = 2
OTHERS = 3.
- IF sy-subrc <> 0.
+ IF sy-subrc <> 0 OR lv_rc <> 0.
lcx_exception=>raise( 'migrate, error from DDIF_TABL_ACTIVATE' ).
ENDIF.
From 40289285379fc447724f65429918241d22ac0aef Mon Sep 17 00:00:00 2001
From: larshp
Date: Sun, 29 Jan 2017 10:11:31 +0000
Subject: [PATCH 2/6] debug page: add time #576
---
src/zabapgit_page_debug.prog.abap | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/zabapgit_page_debug.prog.abap b/src/zabapgit_page_debug.prog.abap
index d3897add1..be61c1292 100644
--- a/src/zabapgit_page_debug.prog.abap
+++ b/src/zabapgit_page_debug.prog.abap
@@ -13,7 +13,8 @@ CLASS lcl_gui_page_debuginfo DEFINITION FINAL INHERITING FROM lcl_gui_page.
PRIVATE SECTION.
METHODS render_debug_info
- RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
+ RETURNING VALUE(ro_html) TYPE REF TO lcl_html
+ RAISING lcx_exception.
METHODS render_supported_object_types
RETURNING VALUE(rv_html) TYPE string.
@@ -57,6 +58,8 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION.
ro_html->add( |abapGit version: { gc_abap_version }
| ).
ro_html->add( |XML version: { gc_xml_version }
| ).
ro_html->add( |GUI version: { lv_gui_version }
| ).
+ ro_html->add( |LCL_TIME: { lcl_time=>get( ) }
| ).
+ ro_html->add( |SY time: { sy-datum } { sy-uzeit } { sy-tzone }
| ).
ENDMETHOD. "render_debug_info
@@ -93,7 +96,7 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION.
CREATE OBJECT ro_html.
- ro_html->add( 'debugOutput("Browser: " + navigator.userAgent, "debug_info");' ).
+ ro_html->add( 'debugOutput("Browser: " + navigator.userAgent + "
Frontend time: " + new Date(), "debug_info");' ).
ENDMETHOD. "scripts
From be5da79d15627570d0500009c487c5a0e3bf5581 Mon Sep 17 00:00:00 2001
From: larshp
Date: Sun, 29 Jan 2017 10:13:47 +0000
Subject: [PATCH 3/6] fix line length
---
src/zabapgit_page_debug.prog.abap | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/zabapgit_page_debug.prog.abap b/src/zabapgit_page_debug.prog.abap
index be61c1292..263c22cdb 100644
--- a/src/zabapgit_page_debug.prog.abap
+++ b/src/zabapgit_page_debug.prog.abap
@@ -96,7 +96,8 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION.
CREATE OBJECT ro_html.
- ro_html->add( 'debugOutput("Browser: " + navigator.userAgent + "
Frontend time: " + new Date(), "debug_info");' ).
+ ro_html->add( 'debugOutput("Browser: " + navigator.userAgent + ' &&
+ '"
Frontend time: " + new Date(), "debug_info");' ).
ENDMETHOD. "scripts
From 7620089f0ef8b7830cd3a11b263c689930b62f68 Mon Sep 17 00:00:00 2001
From: larshp
Date: Sun, 29 Jan 2017 10:26:49 +0000
Subject: [PATCH 4/6] tutorial: show msg when installed #573
---
src/zabapgit_view_tutorial.prog.abap | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/src/zabapgit_view_tutorial.prog.abap b/src/zabapgit_view_tutorial.prog.abap
index a438e2f0a..a73ca6806 100644
--- a/src/zabapgit_view_tutorial.prog.abap
+++ b/src/zabapgit_view_tutorial.prog.abap
@@ -66,12 +66,24 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION.
_add 'abapGit related repositories
'.
_add ''.
_add '- '.
- ro_html->add_a( iv_txt = 'install abapGit repo' iv_act = gc_action-abapgit_install ).
- _add ' - To keep abapGit up-to-date (or also to contribute) you need to'.
- _add 'install it as a repository.
'.
+ IF lcl_services_abapgit=>is_installed( ) = abap_true.
+ _add 'abapGit installed in package '.
+ _add lcl_services_abapgit=>c_package_abapgit.
+ ELSE.
+ ro_html->add_a( iv_txt = 'install abapGit repo' iv_act = gc_action-abapgit_install ).
+ _add ' - To keep abapGit up-to-date (or also to contribute) you need to'.
+ _add 'install it as a repository.'.
+ ENDIF.
+ _add ''.
_add '- '.
- ro_html->add_a( iv_txt = 'install abapGit plugins' iv_act = gc_action-abapgit_install_pi ).
- _add ' - you can also install plugins to extend supported object types
'.
+ IF lcl_services_abapgit=>is_installed_pi( ) = abap_true.
+ _add 'abapGit plugins installed in package '.
+ _add lcl_services_abapgit=>c_package_plugins.
+ ELSE.
+ ro_html->add_a( iv_txt = 'install abapGit plugins' iv_act = gc_action-abapgit_install_pi ).
+ _add ' - you can also install plugins to extend supported object types'.
+ ENDIF.
+ _add ''.
_add '
'.
ENDMETHOD. " render_content.
From c6d1bb8e69cde9ec859e35c79db8d4f2b8aad662 Mon Sep 17 00:00:00 2001
From: eduardocopat
Date: Mon, 30 Jan 2017 15:26:25 +0100
Subject: [PATCH 5/6] Separate CLAS and INTF serialization
---
src/zabapgit_object_clas.prog.abap | 1725 +++++++++++---------
src/zabapgit_unit_test_clas_intf.prog.abap | 722 +++++++-
2 files changed, 1642 insertions(+), 805 deletions(-)
diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap
index ea8794c50..48b364c98 100644
--- a/src/zabapgit_object_clas.prog.abap
+++ b/src/zabapgit_object_clas.prog.abap
@@ -7,7 +7,9 @@
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
-INTERFACE lif_object_oriented_object.
+"This interface contains SAP object oriented functions that can't be put under test
+"(i.e. creating a Class in the system)
+INTERFACE lif_object_oriented_object_fnc.
TYPES: BEGIN OF ty_includes,
programm TYPE programm,
END OF ty_includes,
@@ -72,52 +74,133 @@ INTERFACE lif_object_oriented_object.
IMPORTING
iv_object_name TYPE sobj_name
RETURNING
- VALUE(rt_includes) TYPE ty_includes_tt.
+ VALUE(rt_includes) TYPE ty_includes_tt,
+ exists
+ IMPORTING
+ iv_object_name TYPE seoclskey
+ RETURNING
+ VALUE(rv_exists) TYPE abap_bool,
+ serialize_abap
+ IMPORTING
+ is_class_key TYPE seoclskey
+ iv_type TYPE seop_include_ext_app OPTIONAL
+ CHANGING
+ cv_test_classes_skipped TYPE abap_bool OPTIONAL
+ RETURNING
+ VALUE(rt_source) TYPE ty_string_tt
+ RAISING
+ lcx_exception
+ cx_sy_dyn_call_error,
+ get_class_properties
+ IMPORTING
+ is_class_key TYPE seoclskey
+ RETURNING
+ VALUE(rs_class_properties) TYPE vseoclass
+ RAISING
+ lcx_exception,
+ get_interface_properties
+ IMPORTING
+ is_interface_key TYPE seoclskey
+ RETURNING
+ VALUE(rs_interface_properties) TYPE vseointerf
+ RAISING
+ lcx_exception,
+ read_text_pool
+ IMPORTING
+ iv_class_name TYPE seoclsname
+ iv_language TYPE spras
+ RETURNING
+ VALUE(rt_text_pool) TYPE textpool_table,
+ read_documentation
+ IMPORTING
+ iv_class_name TYPE seoclsname
+ iv_language TYPE spras
+ RETURNING
+ VALUE(rt_lines) TYPE tlinetab,
+ read_sotr
+ IMPORTING
+ iv_object_name TYPE sobj_name
+ RETURNING
+ VALUE(rt_sotr) TYPE ty_sotr_tt
+ RAISING
+ lcx_exception,
+ read_descriptions
+ IMPORTING
+ iv_obejct_name TYPE seoclsname
+ RETURNING
+ VALUE(rt_descriptions) TYPE ty_seocompotx_tt.
ENDINTERFACE.
-CLASS lcl_object_oriented_base DEFINITION ABSTRACT.
+CLASS lcl_oo_object_serializer DEFINITION.
PUBLIC SECTION.
- INTERFACES: lif_object_oriented_object.
- PRIVATE SECTION.
- METHODS deserialize_abap_source_old
- IMPORTING is_clskey TYPE seoclskey
- it_source TYPE ty_string_tt
+
+ METHODS:
+ serialize_abap_clif_source
+ IMPORTING
+ is_class_key TYPE seoclskey
+ iv_type TYPE seop_include_ext_app OPTIONAL
+ RETURNING
+ VALUE(rt_source) TYPE ty_string_tt
+ RAISING
+ lcx_exception
+ cx_sy_dyn_call_error,
+ are_test_classes_skipped
+ RETURNING
+ VALUE(rv_return) TYPE abap_bool.
+ METHODS serialize_locals_imp
+ IMPORTING is_clskey TYPE seoclskey
+ RETURNING VALUE(rt_source) TYPE ty_string_tt
RAISING lcx_exception.
- METHODS deserialize_abap_source_new
- IMPORTING is_clskey TYPE seoclskey
- it_source TYPE ty_string_tt
+ METHODS serialize_locals_def
+ IMPORTING is_clskey TYPE seoclskey
+ RETURNING VALUE(rt_source) TYPE ty_string_tt
+ RAISING lcx_exception.
+ METHODS serialize_testclasses
+ IMPORTING
+ is_clskey TYPE seoclskey
+ RETURNING VALUE(rt_source) TYPE ty_string_tt
+ RAISING lcx_exception.
+
+ METHODS serialize_macros
+ IMPORTING is_clskey TYPE seoclskey
+ RETURNING VALUE(rt_source) TYPE ty_string_tt
+ RAISING lcx_exception.
+ PRIVATE SECTION.
+ DATA mv_skip_testclass TYPE abap_bool.
+ METHODS serialize_abap_old
+ IMPORTING is_clskey TYPE seoclskey
+ RETURNING VALUE(rt_source) TYPE ty_string_tt
+ RAISING lcx_exception.
+
+ METHODS serialize_abap_new
+ IMPORTING is_clskey TYPE seoclskey
+ RETURNING VALUE(rt_source) TYPE ty_string_tt
RAISING lcx_exception
cx_sy_dyn_call_error.
+ METHODS remove_signatures
+ CHANGING ct_source TYPE ty_string_tt.
+
+ METHODS read_include
+ IMPORTING is_clskey TYPE seoclskey
+ iv_type TYPE seop_include_ext_app
+ RETURNING VALUE(rt_source) TYPE seop_source_string.
+
+
+ METHODS reduce
+ CHANGING ct_source TYPE ty_string_tt.
ENDCLASS.
-CLASS lcl_object_oriented_base IMPLEMENTATION.
-
- METHOD lif_object_oriented_object~create.
- "Subclass responsibility
- ASSERT 0 = 1.
- ENDMETHOD.
-
- METHOD lif_object_oriented_object~deserialize_source.
+CLASS lcl_oo_object_serializer IMPLEMENTATION.
+ METHOD serialize_abap_clif_source.
TRY.
- deserialize_abap_source_new(
- is_clskey = is_key
- it_source = it_source ).
+ rt_source = serialize_abap_new( is_class_key ).
CATCH cx_sy_dyn_call_error.
- deserialize_abap_source_old(
- is_clskey = is_key
- it_source = it_source ).
+ rt_source = serialize_abap_old( is_class_key ).
ENDTRY.
ENDMETHOD.
-
- METHOD lif_object_oriented_object~generate_locals.
- "Subclass responsibility
- ASSERT 0 = 1.
- ENDMETHOD.
-
- METHOD deserialize_abap_source_old.
- "for backwards compatability down to 702
-
+ METHOD serialize_abap_old.
+* for old ABAP AS versions
DATA: lo_source TYPE REF TO cl_oo_source.
CREATE OBJECT lo_source
@@ -130,548 +213,69 @@ CLASS lcl_object_oriented_base IMPLEMENTATION.
lcx_exception=>raise( 'error from CL_OO_SOURCE' ).
ENDIF.
- TRY.
- lo_source->access_permission( seok_access_modify ).
- lo_source->set_source( it_source ).
- lo_source->save( ).
- lo_source->access_permission( seok_access_free ).
- CATCH cx_oo_access_permission.
- lcx_exception=>raise( 'permission error' ).
- CATCH cx_oo_source_save_failure.
- lcx_exception=>raise( 'save failure' ).
- ENDTRY.
+ lo_source->read( 'A' ).
+ rt_source = lo_source->get_old_source( ).
+ remove_signatures( CHANGING ct_source = rt_source ).
- ENDMETHOD.
+ ENDMETHOD. "serialize_abap
- METHOD deserialize_abap_source_new.
- DATA: lo_factory TYPE REF TO object,
- lo_source TYPE REF TO object.
+ METHOD serialize_abap_new.
+ DATA: lo_source TYPE REF TO object,
+ lo_instance TYPE REF TO object.
+
+* do not call the class/methods statically, as it will
+* give syntax errors on old versions
CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
RECEIVING
- result = lo_factory.
+ result = lo_instance.
- CALL METHOD lo_factory->('CREATE_CLIF_SOURCE')
+ CALL METHOD lo_instance->('CREATE_CLIF_SOURCE')
EXPORTING
clif_name = is_clskey-clsname
+ version = 'A'
RECEIVING
result = lo_source.
- TRY.
- CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~LOCK').
- CATCH cx_oo_access_permission.
- lcx_exception=>raise( 'source_new, access permission exception' ).
- ENDTRY.
-
- CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SET_SOURCE')
- EXPORTING
- source = it_source.
-
- CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SAVE').
-
- CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~UNLOCK').
-
- ENDMETHOD.
- METHOD lif_object_oriented_object~add_to_activation_list.
- lcl_objects_activation=>add_item( is_item ).
- ENDMETHOD.
-
- METHOD lif_object_oriented_object~update_descriptions.
- DELETE FROM seocompotx WHERE clsname = is_key-clsname.
- INSERT seocompotx FROM TABLE it_descriptions.
- ENDMETHOD.
- METHOD lif_object_oriented_object~insert_text_pool.
- "Subclass responsibility
- ASSERT 0 = 1.
- ENDMETHOD.
-
- METHOD lif_object_oriented_object~create_sotr.
- "Subclass responsibility
- ASSERT 0 = 1.
- ENDMETHOD.
-
- METHOD lif_object_oriented_object~create_documentation.
- CALL FUNCTION 'DOCU_UPD'
- EXPORTING
- id = 'CL'
- langu = iv_language
- object = iv_object_name
- TABLES
- line = it_lines
- EXCEPTIONS
- ret_code = 1
- OTHERS = 2.
- IF sy-subrc <> 0.
- lcx_exception=>raise( 'error from DOCU_UPD' ).
- ENDIF.
- ENDMETHOD.
-
- METHOD lif_object_oriented_object~get_includes.
- "Subclass responsibility
- ASSERT 0 = 1.
- ENDMETHOD.
-
-ENDCLASS.
-
-
-CLASS lcl_object_oriented_class DEFINITION
- INHERITING FROM lcl_object_oriented_base.
- PUBLIC SECTION.
- METHODS:
- lif_object_oriented_object~create REDEFINITION,
- lif_object_oriented_object~generate_locals REDEFINITION,
- lif_object_oriented_object~insert_text_pool REDEFINITION,
- lif_object_oriented_object~create_sotr REDEFINITION,
- lif_object_oriented_object~get_includes REDEFINITION.
-
-ENDCLASS.
-CLASS lcl_object_oriented_class IMPLEMENTATION.
- METHOD lif_object_oriented_object~create.
- CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
- EXPORTING
- devclass = iv_package
- overwrite = iv_overwrite
- 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 lif_object_oriented_object~generate_locals.
- CALL FUNCTION 'SEO_CLASS_GENERATE_LOCALS'
- EXPORTING
- clskey = is_key
- force = iv_force
- locals_def = it_local_definitions
- locals_imp = it_local_implementations
- locals_mac = it_local_macros
- locals_testclasses = it_local_test_classes
- EXCEPTIONS
- not_existing = 1
- model_only = 2
- locals_not_generated = 3
- locals_not_initialised = 4
- OTHERS = 5.
- IF sy-subrc <> 0.
- lcx_exception=>raise( 'error from generate_locals' ).
- ENDIF.
- ENDMETHOD.
- METHOD lif_object_oriented_object~insert_text_pool.
- DATA: lv_cp TYPE program.
-
- lv_cp = cl_oo_classname_service=>get_classpool_name( iv_class_name ).
-
- INSERT TEXTPOOL lv_cp
- FROM it_text_pool
- LANGUAGE iv_language
- STATE 'I'.
- IF sy-subrc <> 0.
- lcx_exception=>raise( 'error from INSERT TEXTPOOL' ).
- ENDIF.
-
- lcl_objects_activation=>add( iv_type = 'REPT'
- iv_name = lv_cp ).
- ENDMETHOD.
-
- METHOD lif_object_oriented_object~create_sotr.
- DATA: lt_sotr TYPE ty_sotr_tt,
- lt_objects TYPE sotr_objects,
- ls_paket TYPE sotr_pack,
- lv_object LIKE LINE OF lt_objects.
-
- FIELD-SYMBOLS: LIKE LINE OF lt_sotr.
-
- LOOP AT it_sotr ASSIGNING .
- CALL FUNCTION 'SOTR_OBJECT_GET_OBJECTS'
- EXPORTING
- object_vector = -header-objid_vec
- IMPORTING
- objects = lt_objects
- EXCEPTIONS
- object_not_found = 1
- OTHERS = 2.
- IF sy-subrc <> 0.
- lcx_exception=>raise( 'error from SOTR_OBJECT_GET_OBJECTS' ).
- ENDIF.
-
- READ TABLE lt_objects INDEX 1 INTO lv_object.
- ASSERT sy-subrc = 0.
-
- ls_paket-paket = iv_package.
-
- CALL FUNCTION 'SOTR_CREATE_CONCEPT'
- EXPORTING
- paket = ls_paket
- crea_lan = -header-crea_lan
- alias_name = -header-alias_name
- object = lv_object
- entries = -entries
- concept_default = -header-concept
- EXCEPTIONS
- package_missing = 1
- crea_lan_missing = 2
- object_missing = 3
- paket_does_not_exist = 4
- alias_already_exist = 5
- object_type_not_found = 6
- langu_missing = 7
- identical_context_not_allowed = 8
- text_too_long = 9
- error_in_update = 10
- no_master_langu = 11
- error_in_concept_id = 12
- alias_not_allowed = 13
- tadir_entry_creation_failed = 14
- internal_error = 15
- error_in_correction = 16
- user_cancelled = 17
- no_entry_found = 18
- OTHERS = 19.
- IF sy-subrc <> 0.
- lcx_exception=>raise( 'error from SOTR_CREATE_CONCEPT' ).
- ENDIF.
- ENDLOOP.
- ENDMETHOD.
-
- METHOD lif_object_oriented_object~get_includes.
-* note: includes returned might not exist
-* method cl_oo_classname_service=>GET_ALL_CLASS_INCLUDES does not exist in 702
-
- DATA: lv_class_name TYPE seoclsname,
- lt_methods TYPE seop_methods_w_include.
-
- FIELD-SYMBOLS: LIKE LINE OF lt_methods.
-
- lv_class_name = iv_object_name.
-
- APPEND cl_oo_classname_service=>get_ccdef_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_ccmac_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_ccimp_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_cl_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_ccau_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_pubsec_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_prosec_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_prisec_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_classpool_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_ct_name( lv_class_name ) TO rt_includes.
- APPEND cl_oo_classname_service=>get_cs_name( lv_class_name ) TO rt_includes.
-
- lt_methods = cl_oo_classname_service=>get_all_method_includes( lv_class_name ).
- LOOP AT lt_methods ASSIGNING .
- APPEND -incname TO rt_includes.
- ENDLOOP.
-
- ENDMETHOD.
-
-ENDCLASS.
-
-CLASS lcl_object_oriented_interface DEFINITION
- INHERITING FROM lcl_object_oriented_base.
- PUBLIC SECTION.
- METHODS:
- lif_object_oriented_object~create REDEFINITION,
- lif_object_oriented_object~get_includes REDEFINITION.
-ENDCLASS.
-
-CLASS lcl_object_oriented_interface IMPLEMENTATION.
- METHOD lif_object_oriented_object~create.
- CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
- EXPORTING
- devclass = iv_package
- overwrite = iv_overwrite
- CHANGING
- interface = is_properties
- EXCEPTIONS
- existing = 1
- is_class = 2
- db_error = 3
- component_error = 4
- no_access = 5
- other = 6
- OTHERS = 7.
- IF sy-subrc <> 0.
- lcx_exception=>raise( 'Error from SEO_INTERFACE_CREATE_COMPLETE' ).
- ENDIF.
- ENDMETHOD.
- METHOD lif_object_oriented_object~get_includes.
- DATA lv_interface_name TYPE seoclsname.
- lv_interface_name = iv_object_name.
- APPEND cl_oo_classname_service=>get_interfacepool_name( lv_interface_name ) TO rt_includes.
- ENDMETHOD.
-
-ENDCLASS.
-
-CLASS lth_oo_factory_injector DEFINITION DEFERRED.
-
-CLASS lcl_object_oriented_factory DEFINITION
- FRIENDS lth_oo_factory_injector.
- PUBLIC SECTION.
- CLASS-METHODS:
- make
- IMPORTING
- iv_object_type TYPE tadir-object
- RETURNING
- VALUE(ro_object_oriented_object) TYPE REF TO lif_object_oriented_object.
- PRIVATE SECTION.
- CLASS-DATA:
- go_object_oriented_object TYPE REF TO lif_object_oriented_object.
-ENDCLASS.
-CLASS lcl_object_oriented_factory IMPLEMENTATION.
- METHOD make.
- IF go_object_oriented_object IS BOUND.
- ro_object_oriented_object = go_object_oriented_object.
- RETURN.
- ENDIF.
- IF iv_object_type = 'CLAS'.
- CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_class.
- ELSEIF iv_object_type = 'INTF'.
- CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_interface.
- ENDIF.
- ENDMETHOD.
-ENDCLASS.
-
-CLASS lth_oo_factory_injector DEFINITION FOR TESTING.
- PUBLIC SECTION.
- CLASS-METHODS:
- inject
- IMPORTING
- io_object_oriented_object TYPE REF TO lif_object_oriented_object.
-ENDCLASS.
-CLASS lth_oo_factory_injector IMPLEMENTATION.
- METHOD inject.
- lcl_object_oriented_factory=>go_object_oriented_object = io_object_oriented_object.
- ENDMETHOD.
-ENDCLASS.
-
-CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
-
- PUBLIC SECTION.
- INTERFACES lif_object.
- ALIASES mo_files FOR lif_object~mo_files.
- METHODS constructor
+ CALL METHOD lo_source->('GET_SOURCE')
IMPORTING
- is_item TYPE ty_item
- 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 TYPE REF TO lif_object_oriented_object.
- 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_abap_old
- IMPORTING is_clskey TYPE seoclskey
- RETURNING VALUE(rt_source) TYPE ty_string_tt
- RAISING lcx_exception.
-
- METHODS serialize_abap_new
- IMPORTING is_clskey TYPE seoclskey
- RETURNING VALUE(rt_source) TYPE ty_string_tt
- RAISING lcx_exception
- cx_sy_dyn_call_error.
-
- METHODS serialize_locals_imp
- IMPORTING is_clskey TYPE seoclskey
- RETURNING VALUE(rt_source) TYPE ty_string_tt
- RAISING lcx_exception.
-
- METHODS serialize_locals_def
- IMPORTING is_clskey TYPE seoclskey
- RETURNING VALUE(rt_source) TYPE ty_string_tt
- RAISING lcx_exception.
-
- METHODS read_include
- IMPORTING is_clskey TYPE seoclskey
- iv_type TYPE seop_include_ext_app
- RETURNING VALUE(rt_source) TYPE seop_source_string.
-
- METHODS serialize_testclasses
- IMPORTING is_clskey TYPE seoclskey
- RETURNING VALUE(rt_source) TYPE ty_string_tt
- RAISING lcx_exception.
-
- METHODS serialize_macros
- IMPORTING is_clskey TYPE seoclskey
- RETURNING VALUE(rt_source) TYPE ty_string_tt
- RAISING lcx_exception.
-
- METHODS serialize_xml
- IMPORTING io_xml TYPE REF TO lcl_xml_output
- RAISING lcx_exception.
-
- METHODS read_sotr
- RETURNING VALUE(rt_sotr) TYPE ty_sotr_tt
- RAISING lcx_exception.
-
- METHODS remove_signatures
- CHANGING ct_source TYPE ty_string_tt.
-
- METHODS reduce
- CHANGING ct_source TYPE ty_string_tt.
-ENDCLASS. "lcl_object_dtel DEFINITION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_object_clas IMPLEMENTATION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_object_clas IMPLEMENTATION.
-
- METHOD lif_object~has_changed_since.
- DATA:
- lt_includes TYPE seoincl_t.
-
- FIELD-SYMBOLS LIKE LINE OF lt_includes.
-
- lt_includes = mo_object_oriented_object->get_includes( ms_item-obj_name ).
- LOOP AT lt_includes ASSIGNING .
- rv_changed = check_prog_changed_since(
- iv_program =
- iv_timestamp = iv_timestamp
- iv_skip_gui = abap_true ).
- IF rv_changed = abap_true.
- RETURN.
- ENDIF.
- ENDLOOP.
- ENDMETHOD. "lif_object~has_changed_since
-
- METHOD lif_object~get_metadata.
- rs_metadata = get_metadata( ).
- ENDMETHOD. "lif_object~get_metadata
-
- METHOD lif_object~changed_by.
-
- TYPES: BEGIN OF ty_includes,
- programm TYPE programm,
- END OF ty_includes.
-
- TYPES: BEGIN OF ty_reposrc,
- unam TYPE reposrc-unam,
- udat TYPE reposrc-udat,
- utime TYPE reposrc-utime,
- END OF ty_reposrc.
-
- DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc,
- ls_reposrc LIKE LINE OF lt_reposrc,
- lt_includes TYPE STANDARD TABLE OF ty_includes.
-
- lt_includes = mo_object_oriented_object->get_includes( ms_item-obj_name ).
- ASSERT lines( lt_includes ) > 0.
-
- SELECT unam udat utime FROM reposrc
- INTO TABLE lt_reposrc
- FOR ALL ENTRIES IN lt_includes
- WHERE progname = lt_includes-programm
- AND r3state = 'A'.
- IF sy-subrc <> 0.
- rv_user = c_user_unknown.
- ELSE.
- SORT lt_reposrc BY udat DESCENDING utime DESCENDING.
- READ TABLE lt_reposrc INDEX 1 INTO ls_reposrc.
- ASSERT sy-subrc = 0.
- rv_user = ls_reposrc-unam.
- ENDIF.
+ source = rt_source.
ENDMETHOD.
- METHOD lif_object~exists.
+ METHOD remove_signatures.
- DATA: ls_clskey TYPE seoclskey.
+* signatures messes up in CL_OO_SOURCE when deserializing and serializing
+* within same session
+ DATA: lv_begin TYPE string,
+ lv_end TYPE string,
+ lv_remove TYPE sap_bool,
+ lv_source LIKE LINE OF ct_source.
- ls_clskey-clsname = ms_item-obj_name.
+ "@TODO: Put under test
+ CONCATENATE '* ------------------------------------'
+ '---------------------------------------------------+'
+ INTO lv_begin.
- CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK'
- EXPORTING
- clskey = ls_clskey
- EXCEPTIONS
- not_specified = 1
- not_existing = 2
- is_interface = 3
- no_text = 4
- inconsistent = 5
- OTHERS = 6.
- rv_bool = boolc( sy-subrc <> 2 ).
+ CONCATENATE '* +------------------------------------------------'
+ '--------------------------------------'
+ INTO lv_end.
- ENDMETHOD. "lif_object~exists
-
- METHOD lif_object~jump.
-
- CALL FUNCTION 'RS_TOOL_ACCESS'
- EXPORTING
- operation = 'SHOW'
- object_name = ms_item-obj_name
- object_type = 'CLAS'
- in_new_window = abap_true.
-
- ENDMETHOD. "jump
-
- METHOD lif_object~delete.
-
- DATA: ls_clskey TYPE seoclskey.
-
-
- ls_clskey-clsname = ms_item-obj_name.
-
- CASE ms_item-obj_type.
- WHEN 'CLAS'.
- CALL FUNCTION 'SEO_CLASS_DELETE_COMPLETE'
- EXPORTING
- clskey = ls_clskey
- EXCEPTIONS
- not_existing = 1
- is_interface = 2
- db_error = 3
- no_access = 4
- other = 5
- OTHERS = 6.
- IF sy-subrc <> 0.
- lcx_exception=>raise( 'Error from SEO_CLASS_DELETE_COMPLETE' ).
- ENDIF.
- WHEN 'INTF'.
- CALL FUNCTION 'SEO_INTERFACE_DELETE_COMPLETE'
- EXPORTING
- intkey = ls_clskey
- EXCEPTIONS
- not_existing = 1
- is_class = 2
- db_error = 3
- no_access = 4
- other = 5
- OTHERS = 6.
- IF sy-subrc <> 0.
- lcx_exception=>raise( 'Error from SEO_INTERFACE_DELETE_COMPLETE' ).
- ENDIF.
- WHEN OTHERS.
- lcx_exception=>raise( 'class delete, unknown type' ).
- ENDCASE.
-
- ENDMETHOD. "delete
+ lv_remove = abap_false.
+ LOOP AT ct_source INTO lv_source.
+ IF lv_source = lv_begin.
+ lv_remove = abap_true.
+ ENDIF.
+ IF lv_remove = abap_true.
+ DELETE ct_source INDEX sy-tabix.
+ ENDIF.
+ IF lv_source = lv_end.
+ lv_remove = abap_false.
+ ENDIF.
+ ENDLOOP.
+ ENDMETHOD. "remove_signatures
METHOD reduce.
DATA: lv_source LIKE LINE OF ct_source,
@@ -745,6 +349,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
* creating an extra file in the repository.
* Also remove it if the content is manually removed, but
* the class still thinks it contains tests
+ "@TODO: Put under test
mv_skip_testclass = abap_false.
IF lines( rt_source ) = 2.
READ TABLE rt_source INDEX 1 INTO lv_line1.
@@ -776,12 +381,57 @@ CLASS lcl_object_clas IMPLEMENTATION.
reduce( CHANGING ct_source = rt_source ).
ENDMETHOD. "serialize_macro
+ METHOD are_test_classes_skipped.
+ rv_return = mv_skip_testclass.
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS lcl_object_oriented_base DEFINITION ABSTRACT.
+ PUBLIC SECTION.
+ INTERFACES: lif_object_oriented_object_fnc.
+ PRIVATE SECTION.
+ METHODS deserialize_abap_source_old
+ IMPORTING is_clskey TYPE seoclskey
+ it_source TYPE ty_string_tt
+ RAISING lcx_exception.
+
+ METHODS deserialize_abap_source_new
+ IMPORTING is_clskey TYPE seoclskey
+ it_source TYPE ty_string_tt
+ RAISING lcx_exception
+ cx_sy_dyn_call_error.
+ENDCLASS.
+
+CLASS lcl_object_oriented_base IMPLEMENTATION.
+
+ METHOD lif_object_oriented_object_fnc~create.
+ "Subclass responsibility
+ ASSERT 0 = 1.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~deserialize_source.
+ TRY.
+ deserialize_abap_source_new(
+ is_clskey = is_key
+ it_source = it_source ).
+ CATCH cx_sy_dyn_call_error.
+ deserialize_abap_source_old(
+ is_clskey = is_key
+ it_source = it_source ).
+ ENDTRY.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~generate_locals.
+ "Subclass responsibility
+ ASSERT 0 = 1.
+ ENDMETHOD.
+
+ METHOD deserialize_abap_source_old.
+ "for backwards compatability down to 702
- METHOD serialize_abap_old.
-* for old ABAP AS versions
DATA: lo_source TYPE REF TO cl_oo_source.
-
CREATE OBJECT lo_source
EXPORTING
clskey = is_clskey
@@ -792,131 +442,360 @@ CLASS lcl_object_clas IMPLEMENTATION.
lcx_exception=>raise( 'error from CL_OO_SOURCE' ).
ENDIF.
- lo_source->read( 'A' ).
- rt_source = lo_source->get_old_source( ).
- remove_signatures( CHANGING ct_source = rt_source ).
-
- ENDMETHOD. "serialize_abap
-
- METHOD serialize_abap_new.
-
- DATA: lo_source TYPE REF TO object,
- lo_instance TYPE REF TO object.
-
-* do not call the class/methods statically, as it will
-* give syntax errors on old versions
- CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
- RECEIVING
- result = lo_instance.
-
- CALL METHOD lo_instance->('CREATE_CLIF_SOURCE')
- EXPORTING
- clif_name = is_clskey-clsname
- version = 'A'
- RECEIVING
- result = lo_source.
-
- CALL METHOD lo_source->('GET_SOURCE')
- IMPORTING
- source = rt_source.
+ TRY.
+ lo_source->access_permission( seok_access_modify ).
+ lo_source->set_source( it_source ).
+ lo_source->save( ).
+ lo_source->access_permission( seok_access_free ).
+ CATCH cx_oo_access_permission.
+ lcx_exception=>raise( 'permission error' ).
+ CATCH cx_oo_source_save_failure.
+ lcx_exception=>raise( 'save failure' ).
+ ENDTRY.
ENDMETHOD.
- METHOD remove_signatures.
+ METHOD deserialize_abap_source_new.
+ DATA: lo_factory TYPE REF TO object,
+ lo_source TYPE REF TO object.
-* signatures messes up in CL_OO_SOURCE when deserializing and serializing
-* within same session
+ CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
+ RECEIVING
+ result = lo_factory.
- DATA: lv_begin TYPE string,
- lv_end TYPE string,
- lv_remove TYPE sap_bool,
- lv_source LIKE LINE OF ct_source.
-
-
- CONCATENATE '* ------------------------------------'
- '---------------------------------------------------+'
- INTO lv_begin.
-
- CONCATENATE '* +------------------------------------------------'
- '--------------------------------------'
- INTO lv_end.
-
- lv_remove = abap_false.
- LOOP AT ct_source INTO lv_source.
- IF lv_source = lv_begin.
- lv_remove = abap_true.
- ENDIF.
- IF lv_remove = abap_true.
- DELETE ct_source INDEX sy-tabix.
- ENDIF.
- IF lv_source = lv_end.
- lv_remove = abap_false.
- ENDIF.
- ENDLOOP.
-
- ENDMETHOD. "remove_signatures
-
- METHOD lif_object~serialize.
-
- DATA: lt_source TYPE seop_source_string,
- ls_clskey TYPE seoclskey.
-
-
- ls_clskey-clsname = ms_item-obj_name.
-
- IF lif_object~exists( ) = abap_false.
- RETURN.
- ENDIF.
-
- CALL FUNCTION 'SEO_BUFFER_REFRESH'
+ CALL METHOD lo_factory->('CREATE_CLIF_SOURCE')
EXPORTING
- version = seoc_version_active
- force = seox_true.
- CALL FUNCTION 'SEO_BUFFER_REFRESH'
- EXPORTING
- version = seoc_version_inactive
- force = seox_true.
+ clif_name = is_clskey-clsname
+ RECEIVING
+ result = lo_source.
TRY.
- lt_source = serialize_abap_new( ls_clskey ).
- CATCH cx_sy_dyn_call_error.
- lt_source = serialize_abap_old( ls_clskey ).
+ CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~LOCK').
+ CATCH cx_oo_access_permission.
+ lcx_exception=>raise( 'source_new, access permission exception' ).
ENDTRY.
- mo_files->add_abap( lt_source ).
+ CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SET_SOURCE')
+ EXPORTING
+ source = it_source.
- IF ms_item-obj_type = 'CLAS'.
- lt_source = serialize_locals_def( ls_clskey ).
- IF NOT lt_source[] IS INITIAL.
- mo_files->add_abap( iv_extra = 'locals_def'
- it_abap = lt_source ). "#EC NOTEXT
- ENDIF.
+ CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SAVE').
- lt_source = serialize_locals_imp( ls_clskey ).
- IF NOT lt_source[] IS INITIAL.
- mo_files->add_abap( iv_extra = 'locals_imp'
- it_abap = lt_source ). "#EC NOTEXT
- ENDIF.
+ CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~UNLOCK').
- lt_source = serialize_testclasses( ls_clskey ).
- IF NOT lt_source[] IS INITIAL AND mv_skip_testclass = abap_false.
- mo_files->add_abap( iv_extra = 'testclasses'
- it_abap = lt_source ). "#EC NOTEXT
- ENDIF.
+ ENDMETHOD.
+ METHOD lif_object_oriented_object_fnc~add_to_activation_list.
+ lcl_objects_activation=>add_item( is_item ).
+ ENDMETHOD.
- lt_source = serialize_macros( ls_clskey ).
- IF NOT lt_source[] IS INITIAL.
- mo_files->add_abap( iv_extra = 'macros'
- it_abap = lt_source ). "#EC NOTEXT
- ENDIF.
+ METHOD lif_object_oriented_object_fnc~update_descriptions.
+ DELETE FROM seocompotx WHERE clsname = is_key-clsname.
+ INSERT seocompotx FROM TABLE it_descriptions.
+ ENDMETHOD.
+ METHOD lif_object_oriented_object_fnc~insert_text_pool.
+ "Subclass responsibility
+ ASSERT 0 = 1.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~create_sotr.
+ "Subclass responsibility
+ ASSERT 0 = 1.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~create_documentation.
+ CALL FUNCTION 'DOCU_UPD'
+ EXPORTING
+ id = 'CL'
+ langu = iv_language
+ object = iv_object_name
+ TABLES
+ line = it_lines
+ EXCEPTIONS
+ ret_code = 1
+ OTHERS = 2.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'error from DOCU_UPD' ).
+ ENDIF.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~get_includes.
+ "Subclass responsibility
+ ASSERT 0 = 1.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~exists.
+ CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK'
+ EXPORTING
+ clskey = iv_object_name
+ EXCEPTIONS
+ not_specified = 1
+ not_existing = 2
+ is_interface = 3
+ no_text = 4
+ inconsistent = 5
+ OTHERS = 6.
+ rv_exists = boolc( sy-subrc <> 2 ).
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~serialize_abap.
+ DATA lo_oo_serializer TYPE REF TO lcl_oo_object_serializer.
+ CREATE OBJECT lo_oo_serializer.
+ CASE iv_type.
+ WHEN seop_ext_class_locals_def.
+ rt_source = lo_oo_serializer->serialize_locals_def( is_class_key ).
+ WHEN seop_ext_class_locals_imp.
+ rt_source = lo_oo_serializer->serialize_locals_imp( is_class_key ).
+ WHEN seop_ext_class_macros.
+ rt_source = lo_oo_serializer->serialize_macros( is_class_key ).
+ WHEN seop_ext_class_testclasses.
+ rt_source = lo_oo_serializer->serialize_testclasses( is_class_key ).
+ WHEN OTHERS.
+ rt_source = lo_oo_serializer->serialize_abap_clif_source( is_class_key ).
+ ENDCASE.
+ ENDMETHOD.
+ METHOD lif_object_oriented_object_fnc~get_class_properties.
+ ASSERT 0 = 1.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~get_interface_properties.
+ ASSERT 0 = 1.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_text_pool.
+ ASSERT 0 = 1.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_sotr.
+ ASSERT 0 = 1.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_documentation.
+ DATA:
+ lv_state TYPE dokstate,
+ lv_object TYPE dokhl-object,
+ lt_lines TYPE tlinetab.
+
+ lv_object = iv_class_name.
+
+ CALL FUNCTION 'DOCU_GET'
+ EXPORTING
+ id = 'CL'
+ langu = iv_language
+ object = lv_object
+ IMPORTING
+ dokstate = lv_state
+ TABLES
+ line = lt_lines
+ EXCEPTIONS
+ no_docu_on_screen = 1
+ no_docu_self_def = 2
+ no_docu_temp = 3
+ ret_code = 4
+ OTHERS = 5.
+ IF sy-subrc = 0 AND lv_state = 'R'.
+ rt_lines = lt_lines.
+ ELSE.
+ CLEAR rt_lines.
+ ENDIF.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_descriptions.
+ SELECT * FROM seocompotx INTO TABLE rt_descriptions
+ WHERE clsname = iv_obejct_name.
+ DELETE rt_descriptions WHERE descript IS INITIAL.
+ ENDMETHOD.
+
+ENDCLASS.
+
+
+
+CLASS lcl_object_oriented_class DEFINITION
+ INHERITING FROM lcl_object_oriented_base.
+ PUBLIC SECTION.
+ METHODS:
+ lif_object_oriented_object_fnc~create REDEFINITION,
+ lif_object_oriented_object_fnc~generate_locals REDEFINITION,
+ lif_object_oriented_object_fnc~insert_text_pool REDEFINITION,
+ lif_object_oriented_object_fnc~create_sotr REDEFINITION,
+ lif_object_oriented_object_fnc~get_includes REDEFINITION,
+ lif_object_oriented_object_fnc~get_class_properties REDEFINITION,
+ lif_object_oriented_object_fnc~read_text_pool REDEFINITION,
+ lif_object_oriented_object_fnc~read_sotr REDEFINITION.
+ENDCLASS.
+CLASS lcl_object_oriented_class IMPLEMENTATION.
+ METHOD lif_object_oriented_object_fnc~create.
+ CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
+ EXPORTING
+ devclass = iv_package
+ overwrite = iv_overwrite
+ 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 lif_object_oriented_object_fnc~generate_locals.
+ CALL FUNCTION 'SEO_CLASS_GENERATE_LOCALS'
+ EXPORTING
+ clskey = is_key
+ force = iv_force
+ locals_def = it_local_definitions
+ locals_imp = it_local_implementations
+ locals_mac = it_local_macros
+ locals_testclasses = it_local_test_classes
+ EXCEPTIONS
+ not_existing = 1
+ model_only = 2
+ locals_not_generated = 3
+ locals_not_initialised = 4
+ OTHERS = 5.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'error from generate_locals' ).
+ ENDIF.
+ ENDMETHOD.
+ METHOD lif_object_oriented_object_fnc~insert_text_pool.
+ DATA: lv_cp TYPE program.
+
+ lv_cp = cl_oo_classname_service=>get_classpool_name( iv_class_name ).
+
+ INSERT TEXTPOOL lv_cp
+ FROM it_text_pool
+ LANGUAGE iv_language
+ STATE 'I'.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'error from INSERT TEXTPOOL' ).
ENDIF.
- serialize_xml( io_xml ).
+ lcl_objects_activation=>add( iv_type = 'REPT'
+ iv_name = lv_cp ).
+ ENDMETHOD.
- ENDMETHOD. "serialize
+ METHOD lif_object_oriented_object_fnc~create_sotr.
+ DATA: lt_sotr TYPE ty_sotr_tt,
+ lt_objects TYPE sotr_objects,
+ ls_paket TYPE sotr_pack,
+ lv_object LIKE LINE OF lt_objects.
- METHOD read_sotr.
+ FIELD-SYMBOLS: LIKE LINE OF lt_sotr.
+ LOOP AT it_sotr ASSIGNING .
+ CALL FUNCTION 'SOTR_OBJECT_GET_OBJECTS'
+ EXPORTING
+ object_vector = -header-objid_vec
+ IMPORTING
+ objects = lt_objects
+ EXCEPTIONS
+ object_not_found = 1
+ OTHERS = 2.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'error from SOTR_OBJECT_GET_OBJECTS' ).
+ ENDIF.
+
+ READ TABLE lt_objects INDEX 1 INTO lv_object.
+ ASSERT sy-subrc = 0.
+
+ ls_paket-paket = iv_package.
+
+ CALL FUNCTION 'SOTR_CREATE_CONCEPT'
+ EXPORTING
+ paket = ls_paket
+ crea_lan = -header-crea_lan
+ alias_name = -header-alias_name
+ object = lv_object
+ entries = -entries
+ concept_default = -header-concept
+ EXCEPTIONS
+ package_missing = 1
+ crea_lan_missing = 2
+ object_missing = 3
+ paket_does_not_exist = 4
+ alias_already_exist = 5
+ object_type_not_found = 6
+ langu_missing = 7
+ identical_context_not_allowed = 8
+ text_too_long = 9
+ error_in_update = 10
+ no_master_langu = 11
+ error_in_concept_id = 12
+ alias_not_allowed = 13
+ tadir_entry_creation_failed = 14
+ internal_error = 15
+ error_in_correction = 16
+ user_cancelled = 17
+ no_entry_found = 18
+ OTHERS = 19.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'error from SOTR_CREATE_CONCEPT' ).
+ ENDIF.
+ ENDLOOP.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~get_includes.
+* note: includes returned might not exist
+* method cl_oo_classname_service=>GET_ALL_CLASS_INCLUDES does not exist in 702
+
+ DATA: lv_class_name TYPE seoclsname,
+ lt_methods TYPE seop_methods_w_include.
+
+ FIELD-SYMBOLS: LIKE LINE OF lt_methods.
+
+ lv_class_name = iv_object_name.
+
+ APPEND cl_oo_classname_service=>get_ccdef_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_ccmac_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_ccimp_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_cl_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_ccau_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_pubsec_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_prosec_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_prisec_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_classpool_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_ct_name( lv_class_name ) TO rt_includes.
+ APPEND cl_oo_classname_service=>get_cs_name( lv_class_name ) TO rt_includes.
+
+ lt_methods = cl_oo_classname_service=>get_all_method_includes( lv_class_name ).
+ LOOP AT lt_methods ASSIGNING .
+ APPEND -incname TO rt_includes.
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~get_class_properties.
+ CALL FUNCTION 'SEO_CLIF_GET'
+ EXPORTING
+ cifkey = is_class_key
+ version = seoc_version_active
+ IMPORTING
+ class = rs_class_properties
+ EXCEPTIONS
+ not_existing = 1
+ deleted = 2
+ model_only = 3
+ OTHERS = 4.
+ IF sy-subrc = 1.
+ RETURN. " in case only inactive version exists
+ ELSEIF sy-subrc <> 0.
+ lcx_exception=>raise( 'error from seo_clif_get' ).
+ ENDIF.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_text_pool.
+ DATA:
+ lv_cp TYPE program.
+
+ lv_cp = cl_oo_classname_service=>get_classpool_name( iv_class_name ).
+ READ TEXTPOOL lv_cp INTO rt_text_pool LANGUAGE iv_language. "#EC CI_READ_REP
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_sotr.
DATA: lv_concept TYPE sotr_head-concept,
lt_seocompodf TYPE STANDARD TABLE OF seocompodf WITH DEFAULT KEY,
ls_header TYPE sotr_head,
@@ -929,7 +808,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
SELECT * FROM seocompodf
INTO TABLE lt_seocompodf
- WHERE clsname = ms_item-obj_name
+ WHERE clsname = iv_object_name
AND version = '1'
AND exposure = '2'
AND attdecltyp = '2'
@@ -973,32 +852,52 @@ CLASS lcl_object_clas IMPLEMENTATION.
-entries = lt_entries.
ENDLOOP.
-
ENDMETHOD.
- METHOD serialize_xml.
+ENDCLASS.
- DATA: ls_vseoclass TYPE vseoclass,
- lv_cp TYPE program,
- lt_tpool TYPE textpool_table,
- lv_object TYPE dokhl-object,
- lv_state TYPE dokhl-dokstate,
- lt_descriptions TYPE ty_seocompotx_tt,
- ls_vseointerf TYPE vseointerf,
- ls_clskey TYPE seoclskey,
- lt_sotr TYPE ty_sotr_tt,
- lt_lines TYPE tlinetab.
+CLASS lcl_object_oriented_interface DEFINITION
+ INHERITING FROM lcl_object_oriented_base.
+ PUBLIC SECTION.
+ METHODS:
+ lif_object_oriented_object_fnc~create REDEFINITION,
+ lif_object_oriented_object_fnc~get_includes REDEFINITION,
+ lif_object_oriented_object_fnc~get_interface_properties REDEFINITION.
+ENDCLASS.
+CLASS lcl_object_oriented_interface IMPLEMENTATION.
+ METHOD lif_object_oriented_object_fnc~create.
+ CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
+ EXPORTING
+ devclass = iv_package
+ overwrite = iv_overwrite
+ CHANGING
+ interface = is_properties
+ EXCEPTIONS
+ existing = 1
+ is_class = 2
+ db_error = 3
+ component_error = 4
+ no_access = 5
+ other = 6
+ OTHERS = 7.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'Error from SEO_INTERFACE_CREATE_COMPLETE' ).
+ ENDIF.
+ ENDMETHOD.
+ METHOD lif_object_oriented_object_fnc~get_includes.
+ DATA lv_interface_name TYPE seoclsname.
+ lv_interface_name = iv_object_name.
+ APPEND cl_oo_classname_service=>get_interfacepool_name( lv_interface_name ) TO rt_includes.
+ ENDMETHOD.
- ls_clskey-clsname = ms_item-obj_name.
-
+ METHOD lif_object_oriented_object_fnc~get_interface_properties.
CALL FUNCTION 'SEO_CLIF_GET'
EXPORTING
- cifkey = ls_clskey
+ cifkey = is_interface_key
version = seoc_version_active
IMPORTING
- class = ls_vseoclass
- interface = ls_vseointerf
+ interface = rs_interface_properties
EXCEPTIONS
not_existing = 1
deleted = 2
@@ -1009,6 +908,295 @@ CLASS lcl_object_clas IMPLEMENTATION.
ELSEIF sy-subrc <> 0.
lcx_exception=>raise( 'error from seo_clif_get' ).
ENDIF.
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS lth_oo_factory_injector DEFINITION DEFERRED.
+
+CLASS lcl_object_oriented_factory DEFINITION
+ FRIENDS lth_oo_factory_injector.
+ PUBLIC SECTION.
+ CLASS-METHODS:
+ make
+ IMPORTING
+ iv_object_type TYPE tadir-object
+ RETURNING
+ VALUE(ro_object_oriented_object) TYPE REF TO lif_object_oriented_object_fnc.
+ PRIVATE SECTION.
+ CLASS-DATA:
+ go_object_oriented_object TYPE REF TO lif_object_oriented_object_fnc.
+ENDCLASS.
+CLASS lcl_object_oriented_factory IMPLEMENTATION.
+ METHOD make.
+ IF go_object_oriented_object IS BOUND.
+ ro_object_oriented_object = go_object_oriented_object.
+ RETURN.
+ ENDIF.
+ IF iv_object_type = 'CLAS'.
+ CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_class.
+ ELSEIF iv_object_type = 'INTF'.
+ CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_interface.
+ ENDIF.
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS lth_oo_factory_injector DEFINITION FOR TESTING.
+ PUBLIC SECTION.
+ CLASS-METHODS:
+ inject
+ IMPORTING
+ io_object_oriented_object TYPE REF TO lif_object_oriented_object_fnc.
+ENDCLASS.
+CLASS lth_oo_factory_injector IMPLEMENTATION.
+ METHOD inject.
+ lcl_object_oriented_factory=>go_object_oriented_object = io_object_oriented_object.
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
+
+ PUBLIC SECTION.
+ INTERFACES lif_object.
+ ALIASES mo_files FOR lif_object~mo_files.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE ty_item
+ 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_object_oriented_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.
+
+
+ENDCLASS. "lcl_object_dtel DEFINITION
+
+*----------------------------------------------------------------------*
+* CLASS lcl_object_clas IMPLEMENTATION
+*----------------------------------------------------------------------*
+*
+*----------------------------------------------------------------------*
+CLASS lcl_object_clas IMPLEMENTATION.
+
+ METHOD lif_object~has_changed_since.
+ DATA:
+ lt_includes TYPE seoincl_t.
+
+ FIELD-SYMBOLS LIKE LINE OF lt_includes.
+
+ lt_includes = mo_object_oriented_object_fct->get_includes( ms_item-obj_name ).
+ LOOP AT lt_includes ASSIGNING .
+ rv_changed = check_prog_changed_since(
+ iv_program =
+ iv_timestamp = iv_timestamp
+ iv_skip_gui = abap_true ).
+ IF rv_changed = abap_true.
+ RETURN.
+ ENDIF.
+ ENDLOOP.
+ ENDMETHOD. "lif_object~has_changed_since
+
+ METHOD lif_object~get_metadata.
+ rs_metadata = get_metadata( ).
+ ENDMETHOD. "lif_object~get_metadata
+
+ METHOD lif_object~changed_by.
+
+ TYPES: BEGIN OF ty_includes,
+ programm TYPE programm,
+ END OF ty_includes.
+
+ TYPES: BEGIN OF ty_reposrc,
+ unam TYPE reposrc-unam,
+ udat TYPE reposrc-udat,
+ utime TYPE reposrc-utime,
+ END OF ty_reposrc.
+
+ DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc,
+ ls_reposrc LIKE LINE OF lt_reposrc,
+ lt_includes TYPE STANDARD TABLE OF ty_includes.
+
+ lt_includes = mo_object_oriented_object_fct->get_includes( ms_item-obj_name ).
+ ASSERT lines( lt_includes ) > 0.
+
+ SELECT unam udat utime FROM reposrc
+ INTO TABLE lt_reposrc
+ FOR ALL ENTRIES IN lt_includes
+ WHERE progname = lt_includes-programm
+ AND r3state = 'A'.
+ IF sy-subrc <> 0.
+ rv_user = c_user_unknown.
+ ELSE.
+ SORT lt_reposrc BY udat DESCENDING utime DESCENDING.
+ READ TABLE lt_reposrc INDEX 1 INTO ls_reposrc.
+ ASSERT sy-subrc = 0.
+ rv_user = ls_reposrc-unam.
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD lif_object~exists.
+ DATA: ls_class_key TYPE seoclskey.
+ ls_class_key-clsname = ms_item-obj_name.
+
+ rv_bool = mo_object_oriented_object_fct->exists( iv_object_name = ls_class_key ).
+ ENDMETHOD. "lif_object~exists
+
+ METHOD lif_object~jump.
+
+ CALL FUNCTION 'RS_TOOL_ACCESS'
+ EXPORTING
+ operation = 'SHOW'
+ object_name = ms_item-obj_name
+ object_type = 'CLAS'
+ in_new_window = abap_true.
+
+ ENDMETHOD. "jump
+
+ METHOD lif_object~delete.
+
+ DATA: ls_clskey TYPE seoclskey.
+
+
+ ls_clskey-clsname = ms_item-obj_name.
+
+ CASE ms_item-obj_type.
+ WHEN 'CLAS'.
+ CALL FUNCTION 'SEO_CLASS_DELETE_COMPLETE'
+ EXPORTING
+ clskey = ls_clskey
+ EXCEPTIONS
+ not_existing = 1
+ is_interface = 2
+ db_error = 3
+ no_access = 4
+ other = 5
+ OTHERS = 6.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'Error from SEO_CLASS_DELETE_COMPLETE' ).
+ ENDIF.
+ WHEN 'INTF'.
+ CALL FUNCTION 'SEO_INTERFACE_DELETE_COMPLETE'
+ EXPORTING
+ intkey = ls_clskey
+ EXCEPTIONS
+ not_existing = 1
+ is_class = 2
+ db_error = 3
+ no_access = 4
+ other = 5
+ OTHERS = 6.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'Error from SEO_INTERFACE_DELETE_COMPLETE' ).
+ ENDIF.
+ WHEN OTHERS.
+ lcx_exception=>raise( 'class delete, unknown type' ).
+ ENDCASE.
+ ENDMETHOD. "delete
+
+ METHOD lif_object~serialize.
+
+ DATA: lt_source TYPE seop_source_string,
+ ls_class_key TYPE seoclskey.
+
+ ls_class_key-clsname = ms_item-obj_name.
+
+ IF lif_object~exists( ) = abap_false.
+ RETURN.
+ ENDIF.
+
+ CALL FUNCTION 'SEO_BUFFER_REFRESH'
+ EXPORTING
+ version = seoc_version_active
+ force = seox_true.
+ CALL FUNCTION 'SEO_BUFFER_REFRESH'
+ EXPORTING
+ version = seoc_version_inactive
+ force = seox_true.
+
+ lt_source = mo_object_oriented_object_fct->serialize_abap( ls_class_key ).
+
+ mo_files->add_abap( lt_source ).
+
+ lt_source = mo_object_oriented_object_fct->serialize_abap(
+ is_class_key = ls_class_key
+ iv_type = seop_ext_class_locals_def ).
+ IF NOT lt_source[] IS INITIAL.
+ mo_files->add_abap( iv_extra = 'locals_def'
+ it_abap = lt_source ). "#EC NOTEXT
+ ENDIF.
+
+ lt_source = mo_object_oriented_object_fct->serialize_abap(
+ is_class_key = ls_class_key
+ iv_type = seop_ext_class_locals_imp ).
+ IF NOT lt_source[] IS INITIAL.
+ mo_files->add_abap( iv_extra = 'locals_imp'
+ it_abap = lt_source ). "#EC NOTEXT
+ ENDIF.
+
+ lt_source = mo_object_oriented_object_fct->serialize_abap(
+ EXPORTING
+ is_class_key = ls_class_key
+ iv_type = seop_ext_class_testclasses
+ CHANGING
+ cv_test_classes_skipped = mv_skip_testclass ).
+ IF NOT lt_source[] IS INITIAL AND mv_skip_testclass = abap_false.
+ mo_files->add_abap( iv_extra = 'testclasses'
+ it_abap = lt_source ). "#EC NOTEXT
+ ENDIF.
+
+ lt_source = mo_object_oriented_object_fct->serialize_abap(
+ is_class_key = ls_class_key
+ iv_type = seop_ext_class_macros ).
+ IF NOT lt_source[] IS INITIAL.
+ mo_files->add_abap( iv_extra = 'macros'
+ it_abap = lt_source ). "#EC NOTEXT
+ ENDIF.
+
+ serialize_xml( io_xml ).
+
+ ENDMETHOD. "serialize
+
+
+
+ METHOD serialize_xml.
+
+ DATA: ls_vseoclass TYPE vseoclass,
+ lt_tpool TYPE textpool_table,
+ lv_object TYPE dokhl-object,
+ lv_state TYPE dokhl-dokstate,
+ lt_descriptions TYPE ty_seocompotx_tt,
+ ls_clskey TYPE seoclskey,
+ lt_sotr TYPE ty_sotr_tt,
+ lt_lines TYPE tlinetab.
+
+
+ ls_clskey-clsname = ms_item-obj_name.
+
+ ls_vseoclass = mo_object_oriented_object_fct->get_class_properties( is_class_key = ls_clskey ).
CLEAR: ls_vseoclass-uuid,
ls_vseoclass-author,
@@ -1023,61 +1211,32 @@ CLASS lcl_object_clas IMPLEMENTATION.
CLEAR ls_vseoclass-with_unit_tests.
ENDIF.
- CLEAR: ls_vseointerf-uuid,
- ls_vseointerf-author,
- ls_vseointerf-createdon,
- ls_vseointerf-changedby,
- ls_vseointerf-changedon,
- ls_vseointerf-r3release.
+ io_xml->add( iv_name = 'VSEOCLASS'
+ ig_data = ls_vseoclass ).
- CASE ms_item-obj_type.
- WHEN 'CLAS'.
- io_xml->add( iv_name = 'VSEOCLASS'
- ig_data = ls_vseoclass ).
+ lt_tpool = mo_object_oriented_object_fct->read_text_pool(
+ iv_class_name = ls_clskey-clsname
+ iv_language = mv_language ).
+ io_xml->add( iv_name = 'TPOOL'
+ ig_data = add_tpool( lt_tpool ) ).
- lv_cp = cl_oo_classname_service=>get_classpool_name( ls_clskey-clsname ).
- READ TEXTPOOL lv_cp INTO lt_tpool LANGUAGE mv_language. "#EC CI_READ_REP
- io_xml->add( iv_name = 'TPOOL'
- ig_data = add_tpool( lt_tpool ) ).
+ IF ls_vseoclass-category = seoc_category_exception.
+ lt_sotr = mo_object_oriented_object_fct->read_sotr( ms_item-obj_name ).
+ IF lines( lt_sotr ) > 0.
+ io_xml->add( iv_name = 'SOTR'
+ ig_data = lt_sotr ).
+ ENDIF.
+ ENDIF.
- IF ls_vseoclass-category = seoc_category_exception.
- lt_sotr = read_sotr( ).
- IF lines( lt_sotr ) > 0.
- io_xml->add( iv_name = 'SOTR'
- ig_data = lt_sotr ).
- ENDIF.
- ENDIF.
- WHEN 'INTF'.
- io_xml->add( iv_name = 'VSEOINTERF'
- ig_data = ls_vseointerf ).
- WHEN OTHERS.
- ASSERT 0 = 1.
- ENDCASE.
-
- lv_object = ls_clskey-clsname.
- CALL FUNCTION 'DOCU_GET'
- EXPORTING
- id = 'CL'
- langu = mv_language
- object = lv_object
- IMPORTING
- dokstate = lv_state
- TABLES
- line = lt_lines
- EXCEPTIONS
- no_docu_on_screen = 1
- no_docu_self_def = 2
- no_docu_temp = 3
- ret_code = 4
- OTHERS = 5.
- IF sy-subrc = 0 AND lv_state = 'R'.
+ lt_lines = mo_object_oriented_object_fct->read_documentation(
+ iv_class_name = ls_clskey-clsname
+ iv_language = mv_language ).
+ IF lines( lt_lines ) > 0.
io_xml->add( iv_name = 'LINES'
ig_data = lt_lines ).
ENDIF.
- SELECT * FROM seocompotx INTO TABLE lt_descriptions
- WHERE clsname = ls_clskey-clsname.
- DELETE lt_descriptions WHERE descript IS INITIAL.
+ lt_descriptions = mo_object_oriented_object_fct->read_descriptions( ls_clskey-clsname ).
IF lines( lt_descriptions ) > 0.
io_xml->add( iv_name = 'DESCRIPTIONS'
ig_data = lt_descriptions ).
@@ -1102,7 +1261,6 @@ CLASS lcl_object_clas IMPLEMENTATION.
DATA: lt_sotr TYPE ty_sotr_tt,
lt_objects TYPE sotr_objects.
-
io_xml->read( EXPORTING iv_name = 'SOTR'
CHANGING cg_data = lt_sotr ).
@@ -1110,7 +1268,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
RETURN.
ENDIF.
- mo_object_oriented_object->create_sotr(
+ mo_object_oriented_object_fct->create_sotr(
iv_package = iv_package
it_sotr = lt_sotr ).
ENDMETHOD.
@@ -1129,7 +1287,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
lv_object = ms_item-obj_name.
- mo_object_oriented_object->create_documentation(
+ mo_object_oriented_object_fct->create_documentation(
it_lines = lt_lines
iv_object_name = lv_object
iv_language = mv_language ).
@@ -1152,7 +1310,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
lv_clsname = ms_item-obj_name.
- mo_object_oriented_object->insert_text_pool(
+ mo_object_oriented_object_fct->insert_text_pool(
iv_class_name = lv_clsname
it_text_pool = lt_tpool
iv_language = mv_language ).
@@ -1190,12 +1348,12 @@ CLASS lcl_object_clas IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'VSEOCLASS'
CHANGING cg_data = ls_vseoclass ).
- mo_object_oriented_object->create(
+ mo_object_oriented_object_fct->create(
EXPORTING
iv_package = iv_package
CHANGING
is_properties = ls_vseoclass ).
- mo_object_oriented_object->generate_locals(
+ mo_object_oriented_object_fct->generate_locals(
is_key = ls_class_key
iv_force = seox_true
it_local_definitions = lt_local_definitions
@@ -1203,18 +1361,18 @@ CLASS lcl_object_clas IMPLEMENTATION.
it_local_macros = lt_local_macros
it_local_test_classes = lt_test_classes ).
- mo_object_oriented_object->deserialize_source(
+ 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->update_descriptions(
+ mo_object_oriented_object_fct->update_descriptions(
is_key = ls_class_key
it_descriptions = lt_descriptions ).
- mo_object_oriented_object->add_to_activation_list( is_item = ms_item ).
+ mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ).
ENDMETHOD. "deserialize
METHOD lif_object~compare_to_remote_version.
@@ -1225,7 +1383,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
super->constructor(
is_item = is_item
iv_language = iv_language ).
- mo_object_oriented_object = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ).
+ mo_object_oriented_object_fct = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ).
ENDMETHOD.
ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
@@ -1236,15 +1394,20 @@ ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
*
*----------------------------------------------------------------------*
CLASS lcl_object_intf DEFINITION INHERITING FROM lcl_object_clas FINAL.
-* todo, CLAS + INTF to be refactored, see:
+* @TODO, CLAS + INTF to be refactored, see:
* https://github.com/larshp/abapGit/issues/21
PUBLIC SECTION.
METHODS:
lif_object~deserialize REDEFINITION,
- lif_object~has_changed_since REDEFINITION.
+ lif_object~has_changed_since REDEFINITION,
+ lif_object~serialize REDEFINITION.
PROTECTED SECTION.
METHODS:
deserialize_abap REDEFINITION.
+ PRIVATE SECTION.
+ METHODS serialize_xml
+ IMPORTING io_xml TYPE REF TO lcl_xml_output
+ RAISING lcx_exception.
ENDCLASS. "lcl_object_intf DEFINITION
CLASS lcl_object_intf IMPLEMENTATION.
METHOD lif_object~deserialize.
@@ -1265,31 +1428,31 @@ CLASS lcl_object_intf IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
CHANGING cg_data = ls_vseointerf ).
- mo_object_oriented_object->create(
+ mo_object_oriented_object_fct->create(
EXPORTING
iv_package = iv_package
CHANGING
is_properties = ls_vseointerf ).
- mo_object_oriented_object->deserialize_source(
+ mo_object_oriented_object_fct->deserialize_source(
is_key = ls_clskey
it_source = lt_source ).
io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
CHANGING cg_data = lt_descriptions ).
- mo_object_oriented_object->update_descriptions(
+ mo_object_oriented_object_fct->update_descriptions(
is_key = ls_clskey
it_descriptions = lt_descriptions ).
- mo_object_oriented_object->add_to_activation_list( is_item = ms_item ).
+ mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ).
ENDMETHOD.
METHOD lif_object~has_changed_since.
DATA:
lv_program TYPE program,
lt_includes TYPE seoincl_t.
- lt_includes = mo_object_oriented_object->get_includes( ms_item-obj_name ).
+ lt_includes = mo_object_oriented_object_fct->get_includes( ms_item-obj_name ).
READ TABLE lt_includes INDEX 1 INTO lv_program.
"lv_program = cl_oo_classname_service=>get_interfacepool_name( lv_clsname ).
rv_changed = check_prog_changed_since(
@@ -1298,4 +1461,72 @@ CLASS lcl_object_intf IMPLEMENTATION.
iv_skip_gui = abap_true ).
ENDMETHOD.
+ METHOD lif_object~serialize.
+
+ DATA: lt_source TYPE seop_source_string,
+ ls_interface_key TYPE seoclskey.
+
+ ls_interface_key-clsname = ms_item-obj_name.
+
+ IF lif_object~exists( ) = abap_false.
+ RETURN.
+ ENDIF.
+
+ CALL FUNCTION 'SEO_BUFFER_REFRESH'
+ EXPORTING
+ version = seoc_version_active
+ force = seox_true.
+ CALL FUNCTION 'SEO_BUFFER_REFRESH'
+ EXPORTING
+ version = seoc_version_inactive
+ force = seox_true.
+
+ lt_source = mo_object_oriented_object_fct->serialize_abap( ls_interface_key ).
+
+ mo_files->add_abap( lt_source ).
+
+ serialize_xml( io_xml ).
+ ENDMETHOD.
+
+ METHOD serialize_xml.
+ DATA:
+ lt_tpool TYPE textpool_table,
+ lv_object TYPE dokhl-object,
+ lv_state TYPE dokhl-dokstate,
+ lt_descriptions TYPE ty_seocompotx_tt,
+ ls_vseointerf TYPE vseointerf,
+ ls_clskey TYPE seoclskey,
+ lt_sotr TYPE ty_sotr_tt,
+ lt_lines TYPE tlinetab.
+
+
+ ls_clskey-clsname = ms_item-obj_name.
+
+ ls_vseointerf = mo_object_oriented_object_fct->get_interface_properties( is_interface_key = ls_clskey ).
+
+ CLEAR: ls_vseointerf-uuid,
+ ls_vseointerf-author,
+ ls_vseointerf-createdon,
+ ls_vseointerf-changedby,
+ ls_vseointerf-changedon,
+ ls_vseointerf-r3release.
+
+ io_xml->add( iv_name = 'VSEOINTERF'
+ ig_data = ls_vseointerf ).
+
+ lt_lines = mo_object_oriented_object_fct->read_documentation(
+ iv_class_name = ls_clskey-clsname
+ iv_language = mv_language ).
+ IF lines( lt_lines ) > 0.
+ io_xml->add( iv_name = 'LINES'
+ ig_data = lt_lines ).
+ ENDIF.
+
+ lt_descriptions = mo_object_oriented_object_fct->read_descriptions( ls_clskey-clsname ).
+ IF lines( lt_descriptions ) > 0.
+ io_xml->add( iv_name = 'DESCRIPTIONS'
+ ig_data = lt_descriptions ).
+ ENDIF.
+ ENDMETHOD.
+
ENDCLASS.
diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap
index a5f4c7b37..ec060d4d6 100644
--- a/src/zabapgit_unit_test_clas_intf.prog.abap
+++ b/src/zabapgit_unit_test_clas_intf.prog.abap
@@ -1,7 +1,7 @@
CLASS ltd_spy_oo_object DEFINITION FOR TESTING.
PUBLIC SECTION.
- INTERFACES: lif_object_oriented_object.
+ INTERFACES: lif_object_oriented_object_fnc.
DATA:
mv_package TYPE devclass,
mv_overwrite TYPE seox_boolean,
@@ -26,10 +26,17 @@ CLASS ltd_spy_oo_object DEFINITION FOR TESTING.
mv_docu_object_name TYPE dokhl-object,
mv_docu_language TYPE spras,
mt_docu_lines TYPE tlinetab,
- mv_get_includes_called TYPE abap_bool.
+ mv_get_includes_called TYPE abap_bool,
+ mv_exists TYPE abap_bool,
+ mv_exists_called TYPE abap_bool,
+ ms_serialize_key TYPE seoclskey,
+ mv_skip_test_classes TYPE abap_bool.
+ PRIVATE SECTION.
+
+
ENDCLASS.
CLASS ltd_spy_oo_object IMPLEMENTATION.
- METHOD lif_object_oriented_object~create.
+ METHOD lif_object_oriented_object_fnc~create.
DATA lv_properties_structure_name TYPE string.
lv_properties_structure_name = cl_abap_typedescr=>describe_by_data( is_properties )->absolute_name.
IF lv_properties_structure_name = cl_abap_typedescr=>describe_by_data( ms_interface_properties )->absolute_name.
@@ -40,7 +47,7 @@ CLASS ltd_spy_oo_object IMPLEMENTATION.
mv_package = iv_package.
mv_overwrite = iv_overwrite.
ENDMETHOD.
- METHOD lif_object_oriented_object~generate_locals.
+ METHOD lif_object_oriented_object_fnc~generate_locals.
ms_locals_key = is_key.
mt_local_definitions = it_local_definitions.
mt_local_implementations = it_local_implementations.
@@ -49,51 +56,98 @@ CLASS ltd_spy_oo_object IMPLEMENTATION.
mv_force = iv_force.
ENDMETHOD.
- METHOD lif_object_oriented_object~deserialize_source.
+ METHOD lif_object_oriented_object_fnc~deserialize_source.
ms_deserialize_key = is_key.
mt_source = it_source.
ENDMETHOD.
- METHOD lif_object_oriented_object~add_to_activation_list.
+ METHOD lif_object_oriented_object_fnc~add_to_activation_list.
ms_item_to_activate = is_item.
ENDMETHOD.
- METHOD lif_object_oriented_object~update_descriptions.
+ METHOD lif_object_oriented_object_fnc~update_descriptions.
ms_description_key = is_key.
mt_descriptions = it_descriptions.
ENDMETHOD.
- METHOD lif_object_oriented_object~insert_text_pool.
- mv_text_pool_inserted = abap_true.
+ METHOD lif_object_oriented_object_fnc~insert_text_pool.
+ mv_text_pool_inserted = abap_true.
mv_text_pool_class_name = iv_class_name.
- mt_text_pool = it_text_pool.
+ mt_text_pool = it_text_pool.
cl_abap_unit_assert=>assert_equals(
act = iv_language
exp = sy-langu ).
ENDMETHOD.
- METHOD lif_object_oriented_object~create_sotr.
+ METHOD lif_object_oriented_object_fnc~create_sotr.
mt_sotr = it_sotr.
mt_sotr_package = iv_package.
ENDMETHOD.
- METHOD lif_object_oriented_object~create_documentation.
+ METHOD lif_object_oriented_object_fnc~create_documentation.
mv_docu_object_name = iv_object_name.
mv_docu_language = iv_language.
mt_docu_lines = it_lines.
ENDMETHOD.
- METHOD lif_object_oriented_object~get_includes.
+ METHOD lif_object_oriented_object_fnc~get_includes.
APPEND 'dummy' TO rt_includes.
mv_get_includes_called = abap_true.
ENDMETHOD.
+ METHOD lif_object_oriented_object_fnc~exists.
+ mv_exists_called = abap_true.
+ rv_exists = mv_exists.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~serialize_abap.
+ ms_serialize_key = is_class_key.
+ CASE iv_type.
+ WHEN seop_ext_class_locals_def.
+ rt_source = mt_local_definitions.
+ WHEN seop_ext_class_locals_imp.
+ rt_source = mt_local_implementations.
+ WHEN seop_ext_class_macros.
+ rt_source = mt_local_macros.
+ WHEN seop_ext_class_testclasses.
+ rt_source = mt_local_test_classes.
+ cv_test_classes_skipped = mv_skip_test_classes.
+ WHEN OTHERS.
+ rt_source = mt_source.
+ ENDCASE.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~get_class_properties.
+ rs_class_properties = ms_class_properties.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~get_interface_properties.
+ rs_interface_properties = ms_interface_properties.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_text_pool.
+ rt_text_pool = mt_text_pool.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_sotr.
+ rt_sotr = mt_sotr.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_documentation.
+ rt_lines = mt_docu_lines.
+ ENDMETHOD.
+
+ METHOD lif_object_oriented_object_fnc~read_descriptions.
+ rt_descriptions = mt_descriptions.
+ ENDMETHOD.
+
ENDCLASS.
CLASS ltd_fake_object_files DEFINITION FOR TESTING
INHERITING FROM lcl_objects_files.
PUBLIC SECTION.
METHODS constructor.
+ METHODS add_abap REDEFINITION.
METHODS read_abap REDEFINITION.
DATA:
mt_sources TYPE seop_source_string,
@@ -130,18 +184,32 @@ CLASS ltd_fake_object_files IMPLEMENTATION.
APPEND 'macro' TO me->mt_local_macros.
APPEND 'test' TO me->mt_local_test_classes.
ENDMETHOD.
-
+ METHOD add_abap.
+ CASE iv_extra.
+ WHEN 'locals_def'.
+ mt_local_definitions = it_abap.
+ WHEN 'locals_imp'.
+ mt_local_implementations = it_abap.
+ WHEN 'macros'.
+ mt_local_macros = it_abap.
+ WHEN 'testclasses'.
+ mt_local_test_classes = it_abap.
+ WHEN OTHERS.
+ mt_sources = it_abap.
+ RETURN.
+ ENDCASE.
+ ENDMETHOD.
ENDCLASS.
CLASS ltc_oo_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PROTECTED SECTION.
DATA:
- mo_spy_oo_object TYPE REF TO ltd_spy_oo_object,
- mo_fake_object_files TYPE REF TO ltd_fake_object_files,
- mo_xml_input TYPE REF TO lcl_xml_input,
- mo_xml_out TYPE REF TO lcl_xml_output,
- mo_oo_object TYPE REF TO lif_object,
- ms_item TYPE ty_item.
+ mo_spy_oo_object_functions TYPE REF TO ltd_spy_oo_object,
+ mo_fake_object_files TYPE REF TO ltd_fake_object_files,
+ mo_xml_input TYPE REF TO lcl_xml_input,
+ mo_xml_out TYPE REF TO lcl_xml_output,
+ mo_oo_object TYPE REF TO lif_object,
+ ms_item TYPE ty_item.
METHODS: when_deserializing
RAISING
lcx_exception,
@@ -162,22 +230,31 @@ CLASS ltc_oo_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
lcx_exception,
then_docu_should_be_created
IMPORTING
- it_lines TYPE tlinetab.
+ it_lines TYPE tlinetab,
+ should_serialize_with_obj_key.
ENDCLASS.
CLASS ltc_oo_test IMPLEMENTATION.
+ METHOD should_serialize_with_obj_key.
+
+ cl_abap_unit_assert=>assert_equals(
+ act = me->mo_spy_oo_object_functions->ms_serialize_key
+ exp = ms_item-obj_name ).
+
+ ENDMETHOD.
+
METHOD then_docu_should_be_created.
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_docu_lines
+ act = mo_spy_oo_object_functions->mt_docu_lines
exp = it_lines ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mv_docu_object_name
+ act = mo_spy_oo_object_functions->mv_docu_object_name
exp = ms_item-obj_name ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mv_docu_language
+ act = mo_spy_oo_object_functions->mv_docu_language
exp = sy-langu ).
ENDMETHOD.
@@ -189,17 +266,17 @@ CLASS ltc_oo_test IMPLEMENTATION.
METHOD then_it_should_add_activation.
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->ms_item_to_activate
+ act = mo_spy_oo_object_functions->ms_item_to_activate
exp = ms_item ).
ENDMETHOD.
METHOD then_shuld_update_descriptions.
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_descriptions
+ act = mo_spy_oo_object_functions->mt_descriptions
exp = it_descriptions ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->ms_description_key
+ act = mo_spy_oo_object_functions->ms_description_key
exp = ms_item-obj_name ).
ENDMETHOD.
@@ -211,11 +288,11 @@ CLASS ltc_oo_test IMPLEMENTATION.
METHOD then_should_deserialize_source.
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_source
+ act = mo_spy_oo_object_functions->mt_source
exp = mo_fake_object_files->mt_sources ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->ms_deserialize_key
+ act = mo_spy_oo_object_functions->ms_deserialize_key
exp = ms_item-obj_name ).
ENDMETHOD.
@@ -255,9 +332,9 @@ ENDCLASS.
CLASS ltcl_class_deserialization IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_fake_object_files.
- CREATE OBJECT mo_spy_oo_object.
+ CREATE OBJECT mo_spy_oo_object_functions.
CREATE OBJECT mo_xml_out.
- lth_oo_factory_injector=>inject( mo_spy_oo_object ).
+ lth_oo_factory_injector=>inject( mo_spy_oo_object_functions ).
ms_item-devclass = 'package_name'.
ms_item-obj_name = 'zcl_class'.
@@ -329,40 +406,40 @@ CLASS ltcl_class_deserialization IMPLEMENTATION.
METHOD then_should_create_class.
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->ms_class_properties
+ act = mo_spy_oo_object_functions->ms_class_properties
exp = ms_class_properties ).
- cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object->mv_overwrite
+ cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object_functions->mv_overwrite
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mv_package
+ act = mo_spy_oo_object_functions->mv_package
exp = 'package_name' ).
ENDMETHOD.
METHOD then_it_should_generate_locals.
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->ms_locals_key
+ act = mo_spy_oo_object_functions->ms_locals_key
exp = ms_item-obj_name ).
- cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object->mv_force
+ cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object_functions->mv_force
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_local_definitions
+ act = mo_spy_oo_object_functions->mt_local_definitions
exp = mo_fake_object_files->mt_local_definitions ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_local_implementations
+ act = mo_spy_oo_object_functions->mt_local_implementations
exp = mo_fake_object_files->mt_local_implementations ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_local_macros
+ act = mo_spy_oo_object_functions->mt_local_macros
exp = mo_fake_object_files->mt_local_macros ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_local_test_classes
+ act = mo_spy_oo_object_functions->mt_local_test_classes
exp = mo_fake_object_files->mt_local_test_classes ).
ENDMETHOD.
METHOD no_text_pool_no_insert.
@@ -370,7 +447,7 @@ CLASS ltcl_class_deserialization IMPLEMENTATION.
when_deserializing( ).
- cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object->mv_text_pool_inserted
+ cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object_functions->mv_text_pool_inserted
exp = abap_false ).
ENDMETHOD.
@@ -390,11 +467,11 @@ CLASS ltcl_class_deserialization IMPLEMENTATION.
when_deserializing( ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_text_pool
+ act = mo_spy_oo_object_functions->mt_text_pool
exp = lt_pool_external ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mv_text_pool_class_name
+ act = mo_spy_oo_object_functions->mv_text_pool_class_name
exp = 'zcl_class' ).
ENDMETHOD.
@@ -414,10 +491,10 @@ CLASS ltcl_class_deserialization IMPLEMENTATION.
when_deserializing( ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_sotr
+ act = mo_spy_oo_object_functions->mt_sotr
exp = lt_sotr ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mt_sotr_package
+ act = mo_spy_oo_object_functions->mt_sotr_package
exp = 'package_name' ).
ENDMETHOD.
@@ -457,9 +534,9 @@ ENDCLASS.
CLASS ltcl_interface_deserialization IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_fake_object_files.
- CREATE OBJECT mo_spy_oo_object.
+ CREATE OBJECT mo_spy_oo_object_functions.
CREATE OBJECT mo_xml_out.
- lth_oo_factory_injector=>inject( mo_spy_oo_object ).
+ lth_oo_factory_injector=>inject( mo_spy_oo_object_functions ).
ms_item-devclass = 'package_name'.
ms_item-obj_name = 'zif_interface'.
@@ -522,14 +599,14 @@ CLASS ltcl_interface_deserialization IMPLEMENTATION.
METHOD then_should_create_interface.
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->ms_interface_properties
+ act = mo_spy_oo_object_functions->ms_interface_properties
exp = ms_interface_properties ).
- cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object->mv_overwrite
+ cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object_functions->mv_overwrite
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mv_package
+ act = mo_spy_oo_object_functions->mv_package
exp = 'package_name' ).
ENDMETHOD.
@@ -561,9 +638,9 @@ ENDCLASS.
CLASS ltcl_class_changed IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_fake_object_files.
- CREATE OBJECT mo_spy_oo_object.
+ CREATE OBJECT mo_spy_oo_object_functions.
CREATE OBJECT mo_xml_out.
- lth_oo_factory_injector=>inject( mo_spy_oo_object ).
+ lth_oo_factory_injector=>inject( mo_spy_oo_object_functions ).
ms_item-devclass = 'package_name'.
ms_item-obj_name = 'zcl_class'.
@@ -580,7 +657,7 @@ CLASS ltcl_class_changed IMPLEMENTATION.
lv_username = mo_oo_object->changed_by( ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mv_get_includes_called
+ act = mo_spy_oo_object_functions->mv_get_includes_called
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
@@ -593,7 +670,7 @@ CLASS ltcl_class_changed IMPLEMENTATION.
mo_oo_object->has_changed_since( lv_timestamp ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mv_get_includes_called
+ act = mo_spy_oo_object_functions->mv_get_includes_called
exp = abap_true ).
ENDMETHOD.
ENDCLASS.
@@ -608,9 +685,9 @@ ENDCLASS.
CLASS ltcl_interface_changed IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_fake_object_files.
- CREATE OBJECT mo_spy_oo_object.
+ CREATE OBJECT mo_spy_oo_object_functions.
CREATE OBJECT mo_xml_out.
- lth_oo_factory_injector=>inject( mo_spy_oo_object ).
+ lth_oo_factory_injector=>inject( mo_spy_oo_object_functions ).
ms_item-devclass = 'package_name'.
ms_item-obj_name = 'zif_interface'.
@@ -627,7 +704,7 @@ CLASS ltcl_interface_changed IMPLEMENTATION.
lv_username = mo_oo_object->changed_by( ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mv_get_includes_called
+ act = mo_spy_oo_object_functions->mv_get_includes_called
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
@@ -640,7 +717,536 @@ CLASS ltcl_interface_changed IMPLEMENTATION.
mo_oo_object->has_changed_since( lv_timestamp ).
cl_abap_unit_assert=>assert_equals(
- act = mo_spy_oo_object->mv_get_includes_called
+ act = mo_spy_oo_object_functions->mv_get_includes_called
+ exp = abap_true ).
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS ltcl_exists_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT
+INHERITING FROM ltc_oo_test.
+ PRIVATE SECTION.
+ METHODS:
+ setup,
+ class_exists FOR TESTING RAISING cx_static_check,
+ interface_exists FOR TESTING RAISING cx_static_check.
+ENDCLASS.
+
+CLASS ltcl_exists_test IMPLEMENTATION.
+ METHOD setup.
+ CREATE OBJECT mo_spy_oo_object_functions.
+ me->mo_spy_oo_object_functions->mv_exists = abap_true.
+ lth_oo_factory_injector=>inject( mo_spy_oo_object_functions ).
+ ENDMETHOD.
+
+ METHOD class_exists.
+ ms_item-devclass = 'package_name'.
+ ms_item-obj_name = 'zcl_class'.
+ ms_item-obj_type = 'CLAS'.
+ CREATE OBJECT mo_oo_object TYPE lcl_object_clas
+ EXPORTING
+ is_item = ms_item
+ iv_language = sy-langu.
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_oo_object->exists( )
+ exp = abap_true ).
+ cl_abap_unit_assert=>assert_equals(
+ act = me->mo_spy_oo_object_functions->mv_exists_called
+ exp = abap_true ).
+ ENDMETHOD.
+
+ METHOD interface_exists.
+ ms_item-devclass = 'package_name'.
+ ms_item-obj_name = 'zif_interface'.
+ ms_item-obj_type = 'INTF'.
+
+ CREATE OBJECT mo_oo_object TYPE lcl_object_intf
+ EXPORTING
+ is_item = ms_item
+ iv_language = sy-langu.
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_oo_object->exists( )
+ exp = abap_true ).
+ cl_abap_unit_assert=>assert_equals(
+ act = me->mo_spy_oo_object_functions->mv_exists_called
+ exp = abap_true ).
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS ltcl_serialize_class DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT
+INHERITING FROM ltc_oo_test.
+ PRIVATE SECTION.
+ METHODS:
+ setup,
+ teardown,
+ serialize_abap FOR TESTING RAISING cx_static_check,
+ no_existing_no_serialize FOR TESTING RAISING cx_static_check,
+ serialize_local_definitions FOR TESTING RAISING cx_static_check,
+ serialize_local_implementation FOR TESTING RAISING cx_static_check,
+ serialize_local_macros FOR TESTING RAISING cx_static_check,
+ serialize_test_classes FOR TESTING RAISING cx_static_check,
+ serialize_properties_to_xml FOR TESTING RAISING cx_static_check,
+ serialize_skipping_tests_xml FOR TESTING RAISING cx_static_check,
+ serialize_textpool FOR TESTING RAISING cx_static_check,
+ read_sotr_if_exception_class FOR TESTING RAISING cx_static_check,
+ do_not_read_sotr_regular_class FOR TESTING RAISING cx_static_check,
+ should_serialize_documentation FOR TESTING RAISING cx_static_check,
+ should_serialize_descriptions FOR TESTING RAISING cx_static_check.
+ENDCLASS.
+
+CLASS ltcl_serialize_class IMPLEMENTATION.
+
+ METHOD setup.
+ CREATE OBJECT mo_fake_object_files.
+ CREATE OBJECT mo_spy_oo_object_functions.
+ me->mo_spy_oo_object_functions->mv_exists = abap_true.
+ lth_oo_factory_injector=>inject( mo_spy_oo_object_functions ).
+
+ ms_item-devclass = 'package_name'.
+ ms_item-obj_name = 'zcl_class'.
+ ms_item-obj_type = 'CLAS'.
+
+ CREATE OBJECT mo_oo_object TYPE lcl_object_clas
+ EXPORTING
+ is_item = ms_item
+ iv_language = sy-langu.
+ CREATE OBJECT mo_xml_out.
+ mo_oo_object->mo_files = mo_fake_object_files.
+ ENDMETHOD.
+
+ METHOD serialize_abap.
+ DATA lt_abap_source TYPE ty_string_tt.
+
+ APPEND 'a_source_line' TO me->mo_spy_oo_object_functions->mt_source.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ should_serialize_with_obj_key( ).
+
+ lt_abap_source = mo_fake_object_files->read_abap( ).
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_abap_source
+ exp = me->mo_spy_oo_object_functions->mt_source ).
+ ENDMETHOD.
+
+ METHOD serialize_local_definitions.
+ DATA lt_abap_source TYPE ty_string_tt.
+
+ APPEND 'a_local_definition' TO me->mo_spy_oo_object_functions->mt_local_definitions.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ should_serialize_with_obj_key( ).
+
+ lt_abap_source = mo_fake_object_files->read_abap( iv_extra = 'locals_def' iv_error = abap_false ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_abap_source
+ exp = me->mo_spy_oo_object_functions->mt_local_definitions ).
+ ENDMETHOD.
+
+ METHOD serialize_local_implementation.
+ DATA lt_abap_source TYPE ty_string_tt.
+
+ APPEND 'a_local_implementation' TO me->mo_spy_oo_object_functions->mt_local_implementations.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ should_serialize_with_obj_key( ).
+
+ lt_abap_source = mo_fake_object_files->read_abap( iv_extra = 'locals_imp' iv_error = abap_false ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_abap_source
+ exp = me->mo_spy_oo_object_functions->mt_local_implementations ).
+ ENDMETHOD.
+
+ METHOD serialize_local_macros.
+ DATA lt_abap_source TYPE ty_string_tt.
+ APPEND 'a_local_macro' TO me->mo_spy_oo_object_functions->mt_local_macros.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ should_serialize_with_obj_key( ).
+
+ lt_abap_source = mo_fake_object_files->read_abap( iv_extra = 'macros' iv_error = abap_false ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_abap_source
+ exp = me->mo_spy_oo_object_functions->mt_local_macros ).
+ ENDMETHOD.
+
+ METHOD serialize_test_classes.
+ DATA lt_abap_source TYPE ty_string_tt.
+ APPEND 'a_local_test' TO me->mo_spy_oo_object_functions->mt_local_test_classes.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ should_serialize_with_obj_key( ).
+
+ lt_abap_source = mo_fake_object_files->read_abap( iv_extra = 'testclasses' iv_error = abap_false ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_abap_source
+ exp = me->mo_spy_oo_object_functions->mt_local_test_classes ).
+ ENDMETHOD.
+
+ METHOD no_existing_no_serialize.
+ me->mo_spy_oo_object_functions->mv_exists = abap_false.
+ mo_oo_object->serialize( mo_xml_out ).
+ ENDMETHOD.
+
+
+ METHOD serialize_properties_to_xml.
+ DATA:
+ ls_expected_properties LIKE me->mo_spy_oo_object_functions->ms_class_properties,
+ ls_actual_properties LIKE me->mo_spy_oo_object_functions->ms_class_properties.
+
+ me->mo_spy_oo_object_functions->ms_class_properties-clsname = ms_item-obj_name.
+ me->mo_spy_oo_object_functions->ms_class_properties-uuid = '123'.
+ me->mo_spy_oo_object_functions->ms_class_properties-author = 'author'.
+ me->mo_spy_oo_object_functions->ms_class_properties-createdon = '2016'.
+ me->mo_spy_oo_object_functions->ms_class_properties-changedby = 'other'.
+ me->mo_spy_oo_object_functions->ms_class_properties-changedon = '2017'.
+ me->mo_spy_oo_object_functions->ms_class_properties-r3release = '1'.
+ me->mo_spy_oo_object_functions->ms_class_properties-chgdanyby = 'other'.
+ me->mo_spy_oo_object_functions->ms_class_properties-chgdanyon = '2017'.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ ls_expected_properties = me->mo_spy_oo_object_functions->ms_class_properties.
+ CLEAR:
+ ls_expected_properties-uuid,
+ ls_expected_properties-author,
+ ls_expected_properties-createdon,
+ ls_expected_properties-changedby,
+ ls_expected_properties-changedon,
+ ls_expected_properties-r3release,
+ ls_expected_properties-chgdanyby,
+ ls_expected_properties-chgdanyon.
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'VSEOCLASS'
+ CHANGING
+ cg_data = ls_actual_properties ).
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_actual_properties
+ exp = ls_expected_properties ).
+ ENDMETHOD.
+
+ METHOD serialize_skipping_tests_xml.
+ DATA:
+ ls_actual_properties LIKE me->mo_spy_oo_object_functions->ms_class_properties.
+ APPEND 'a_local_test' TO me->mo_spy_oo_object_functions->mt_local_test_classes.
+ me->mo_spy_oo_object_functions->mv_skip_test_classes = abap_true.
+
+ me->mo_spy_oo_object_functions->ms_class_properties-clsname = ms_item-obj_name.
+ me->mo_spy_oo_object_functions->ms_class_properties-with_unit_tests = abap_true.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'VSEOCLASS'
+ CHANGING
+ cg_data = ls_actual_properties ).
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_actual_properties-with_unit_tests
+ exp = abap_false ).
+ ENDMETHOD.
+
+ METHOD serialize_textpool.
+ DATA:
+ ls_textpool TYPE textpool,
+ lt_actual_text_pool TYPE textpool_table.
+ ls_textpool-id = '1'.
+ ls_textpool-key = '1'.
+ APPEND ls_textpool TO mo_spy_oo_object_functions->mt_text_pool.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'TPOOL'
+ CHANGING
+ cg_data = lt_actual_text_pool ).
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_actual_text_pool
+ exp = mo_spy_oo_object_functions->mt_text_pool ).
+ ENDMETHOD.
+
+ METHOD read_sotr_if_exception_class.
+ DATA:
+ lt_sotr TYPE ty_sotr_tt,
+ lt_actual_sotr TYPE ty_sotr_tt,
+ ls_sotr LIKE LINE OF lt_sotr.
+
+ me->mo_spy_oo_object_functions->ms_class_properties-category = seoc_category_exception.
+
+ ls_sotr-header-concept = 'HEADER'.
+ APPEND ls_sotr TO lt_sotr.
+
+ me->mo_spy_oo_object_functions->mt_sotr = lt_sotr.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'SOTR'
+ CHANGING
+ cg_data = lt_actual_sotr ).
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_actual_sotr
+ exp = mo_spy_oo_object_functions->mt_sotr ).
+ ENDMETHOD.
+
+ METHOD do_not_read_sotr_regular_class.
+ DATA:
+ lt_actual_sotr TYPE ty_sotr_tt.
+
+ CLEAR: me->mo_spy_oo_object_functions->ms_class_properties-category.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'SOTR'
+ CHANGING
+ cg_data = lt_actual_sotr ).
+ cl_abap_unit_assert=>assert_initial( lt_actual_sotr ).
+ ENDMETHOD.
+
+ METHOD should_serialize_documentation.
+ DATA:
+ lt_lines TYPE tlinetab,
+ lt_actual_lines TYPE tlinetab,
+ ls_line LIKE LINE OF lt_lines.
+
+ ls_line-tdline = 'a_line'.
+ APPEND ls_line TO lt_lines.
+
+ me->mo_spy_oo_object_functions->mt_docu_lines = lt_lines.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'LINES'
+ CHANGING
+ cg_data = lt_actual_lines ).
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_actual_lines
+ exp = me->mo_spy_oo_object_functions->mt_docu_lines ).
+ ENDMETHOD.
+
+ METHOD should_serialize_descriptions.
+ DATA:
+ lt_descriptions TYPE ty_seocompotx_tt,
+ lt_actual_descriptions TYPE ty_seocompotx_tt,
+ ls_description TYPE LINE OF ty_seocompotx_tt.
+
+ ls_description-clsname = 'class'.
+ APPEND ls_description TO lt_descriptions.
+
+
+ me->mo_spy_oo_object_functions->mt_descriptions = lt_descriptions.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'DESCRIPTIONS'
+ CHANGING
+ cg_data = lt_actual_descriptions ).
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_actual_descriptions
+ exp = me->mo_spy_oo_object_functions->mt_descriptions ).
+ ENDMETHOD.
+
+ METHOD teardown.
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_spy_oo_object_functions->mv_exists_called
+ exp = abap_true ).
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS ltcl_serialize_interface DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT
+INHERITING FROM ltc_oo_test.
+ PRIVATE SECTION.
+ METHODS:
+ setup,
+ teardown,
+ serialize_abap FOR TESTING RAISING cx_static_check,
+ no_existing_no_serialize FOR TESTING RAISING cx_static_check,
+ serialize_properties_to_xml FOR TESTING RAISING cx_static_check,
+ should_serialize_documentation FOR TESTING RAISING cx_static_check,
+ should_serialize_descriptions FOR TESTING RAISING cx_static_check.
+ENDCLASS.
+
+CLASS ltcl_serialize_interface IMPLEMENTATION.
+ METHOD setup.
+ CREATE OBJECT mo_fake_object_files.
+ CREATE OBJECT mo_spy_oo_object_functions.
+ me->mo_spy_oo_object_functions->mv_exists = abap_true.
+ lth_oo_factory_injector=>inject( mo_spy_oo_object_functions ).
+
+ ms_item-devclass = 'package_name'.
+ ms_item-obj_name = 'zif_interface'.
+ ms_item-obj_type = 'INTF'.
+
+ CREATE OBJECT mo_oo_object TYPE lcl_object_intf
+ EXPORTING
+ is_item = ms_item
+ iv_language = sy-langu.
+ CREATE OBJECT mo_xml_out.
+ mo_oo_object->mo_files = mo_fake_object_files.
+ ENDMETHOD.
+
+ METHOD serialize_abap.
+ DATA lt_abap_source TYPE ty_string_tt.
+
+ APPEND 'a_source_line' TO me->mo_spy_oo_object_functions->mt_source.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ should_serialize_with_obj_key( ).
+
+ lt_abap_source = mo_fake_object_files->read_abap( ).
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_abap_source
+ exp = me->mo_spy_oo_object_functions->mt_source ).
+ ENDMETHOD.
+
+ METHOD no_existing_no_serialize.
+ me->mo_spy_oo_object_functions->mv_exists = abap_false.
+ mo_oo_object->serialize( mo_xml_out ).
+ ENDMETHOD.
+
+
+ METHOD serialize_properties_to_xml.
+ DATA:
+ ls_expected_properties LIKE me->mo_spy_oo_object_functions->ms_interface_properties,
+ ls_actual_properties LIKE me->mo_spy_oo_object_functions->ms_interface_properties.
+
+ me->mo_spy_oo_object_functions->ms_interface_properties-clsname = ms_item-obj_name.
+ me->mo_spy_oo_object_functions->ms_interface_properties-uuid = '123'.
+ me->mo_spy_oo_object_functions->ms_interface_properties-author = 'author'.
+ me->mo_spy_oo_object_functions->ms_interface_properties-createdon = '2016'.
+ me->mo_spy_oo_object_functions->ms_interface_properties-changedby = 'other'.
+ me->mo_spy_oo_object_functions->ms_interface_properties-changedon = '2017'.
+ me->mo_spy_oo_object_functions->ms_interface_properties-r3release = '1'.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ ls_expected_properties = me->mo_spy_oo_object_functions->ms_interface_properties.
+ CLEAR:
+ ls_expected_properties-uuid,
+ ls_expected_properties-author,
+ ls_expected_properties-createdon,
+ ls_expected_properties-changedby,
+ ls_expected_properties-changedon,
+ ls_expected_properties-r3release.
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'VSEOINTERF'
+ CHANGING
+ cg_data = ls_actual_properties ).
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_actual_properties
+ exp = ls_expected_properties ).
+ ENDMETHOD.
+ METHOD should_serialize_documentation.
+ DATA:
+ lt_lines TYPE tlinetab,
+ lt_actual_lines TYPE tlinetab,
+ ls_line LIKE LINE OF lt_lines.
+
+ ls_line-tdline = 'a_line'.
+ APPEND ls_line TO lt_lines.
+
+ me->mo_spy_oo_object_functions->mt_docu_lines = lt_lines.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'LINES'
+ CHANGING
+ cg_data = lt_actual_lines ).
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_actual_lines
+ exp = me->mo_spy_oo_object_functions->mt_docu_lines ).
+ ENDMETHOD.
+
+ METHOD should_serialize_descriptions.
+ DATA:
+ lt_descriptions TYPE ty_seocompotx_tt,
+ lt_actual_descriptions TYPE ty_seocompotx_tt,
+ ls_description TYPE LINE OF ty_seocompotx_tt.
+
+ ls_description-clsname = 'class'.
+ APPEND ls_description TO lt_descriptions.
+
+
+ me->mo_spy_oo_object_functions->mt_descriptions = lt_descriptions.
+
+ mo_oo_object->serialize( mo_xml_out ).
+
+ CREATE OBJECT mo_xml_input
+ EXPORTING
+ iv_xml = mo_xml_out->render( ).
+
+ mo_xml_input->read(
+ EXPORTING
+ iv_name = 'DESCRIPTIONS'
+ CHANGING
+ cg_data = lt_actual_descriptions ).
+ cl_abap_unit_assert=>assert_equals(
+ act = lt_actual_descriptions
+ exp = me->mo_spy_oo_object_functions->mt_descriptions ).
+ ENDMETHOD.
+ METHOD teardown.
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_spy_oo_object_functions->mv_exists_called
exp = abap_true ).
ENDMETHOD.
ENDCLASS.
From e47811c97de86a50ca4ccde7c4a039ce0a802a0a Mon Sep 17 00:00:00 2001
From: eduardocopat
Date: Tue, 31 Jan 2017 09:37:25 +0100
Subject: [PATCH 6/6] Fixes test_classes on ABAP 7.02
---
src/zabapgit_object_clas.prog.abap | 25 +++++++++++++---------
src/zabapgit_unit_test_clas_intf.prog.abap | 5 ++++-
2 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap
index 48b364c98..7fea9ca43 100644
--- a/src/zabapgit_object_clas.prog.abap
+++ b/src/zabapgit_object_clas.prog.abap
@@ -82,15 +82,16 @@ INTERFACE lif_object_oriented_object_fnc.
VALUE(rv_exists) TYPE abap_bool,
serialize_abap
IMPORTING
- is_class_key TYPE seoclskey
- iv_type TYPE seop_include_ext_app OPTIONAL
- CHANGING
- cv_test_classes_skipped TYPE abap_bool OPTIONAL
+ is_class_key TYPE seoclskey
+ iv_type TYPE seop_include_ext_app OPTIONAL
RETURNING
- VALUE(rt_source) TYPE ty_string_tt
+ VALUE(rt_source) TYPE ty_string_tt
RAISING
lcx_exception
cx_sy_dyn_call_error,
+ get_skip_test_classes
+ RETURNING
+ VALUE(rv_skip) TYPE abap_bool,
get_class_properties
IMPORTING
is_class_key TYPE seoclskey
@@ -391,6 +392,7 @@ CLASS lcl_object_oriented_base DEFINITION ABSTRACT.
PUBLIC SECTION.
INTERFACES: lif_object_oriented_object_fnc.
PRIVATE SECTION.
+ DATA mv_skip_test_classes TYPE abap_bool.
METHODS deserialize_abap_source_old
IMPORTING is_clskey TYPE seoclskey
it_source TYPE ty_string_tt
@@ -549,10 +551,14 @@ CLASS lcl_object_oriented_base IMPLEMENTATION.
rt_source = lo_oo_serializer->serialize_macros( is_class_key ).
WHEN seop_ext_class_testclasses.
rt_source = lo_oo_serializer->serialize_testclasses( is_class_key ).
+ mv_skip_test_classes = lo_oo_serializer->are_test_classes_skipped( ).
WHEN OTHERS.
rt_source = lo_oo_serializer->serialize_abap_clif_source( is_class_key ).
ENDCASE.
ENDMETHOD.
+ METHOD lif_object_oriented_object_fnc~get_skip_test_classes.
+ rv_skip = mv_skip_test_classes.
+ ENDMETHOD.
METHOD lif_object_oriented_object_fnc~get_class_properties.
ASSERT 0 = 1.
ENDMETHOD.
@@ -1158,11 +1164,10 @@ CLASS lcl_object_clas IMPLEMENTATION.
ENDIF.
lt_source = mo_object_oriented_object_fct->serialize_abap(
- EXPORTING
- is_class_key = ls_class_key
- iv_type = seop_ext_class_testclasses
- CHANGING
- cv_test_classes_skipped = mv_skip_testclass ).
+ is_class_key = ls_class_key
+ iv_type = seop_ext_class_testclasses ).
+
+ mv_skip_testclass = mo_object_oriented_object_fct->get_skip_test_classes( ).
IF NOT lt_source[] IS INITIAL AND mv_skip_testclass = abap_false.
mo_files->add_abap( iv_extra = 'testclasses'
it_abap = lt_source ). "#EC NOTEXT
diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap
index ec060d4d6..31f78d7cb 100644
--- a/src/zabapgit_unit_test_clas_intf.prog.abap
+++ b/src/zabapgit_unit_test_clas_intf.prog.abap
@@ -111,7 +111,6 @@ CLASS ltd_spy_oo_object IMPLEMENTATION.
rt_source = mt_local_macros.
WHEN seop_ext_class_testclasses.
rt_source = mt_local_test_classes.
- cv_test_classes_skipped = mv_skip_test_classes.
WHEN OTHERS.
rt_source = mt_source.
ENDCASE.
@@ -141,6 +140,10 @@ CLASS ltd_spy_oo_object IMPLEMENTATION.
rt_descriptions = mt_descriptions.
ENDMETHOD.
+ METHOD lif_object_oriented_object_fnc~get_skip_test_classes.
+ rv_skip = mv_skip_test_classes.
+ ENDMETHOD.
+
ENDCLASS.
CLASS ltd_fake_object_files DEFINITION FOR TESTING