mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Better separation into includes
This commit is contained in:
parent
de515f619b
commit
763a01a2f1
|
@ -404,243 +404,268 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
||||||
|
|
||||||
ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
|
ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
* CLASS lcl_object_intf DEFINITION
|
CLASS lcl_object_oriented_class DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
INHERITING FROM lcl_object_oriented_base.
|
||||||
*
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_object_intf DEFINITION FINAL INHERITING FROM lcl_objects_program.
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
INTERFACES lif_object.
|
METHODS:
|
||||||
ALIASES mo_files FOR lif_object~mo_files.
|
lif_object_oriented_object_fnc~create REDEFINITION,
|
||||||
METHODS constructor
|
lif_object_oriented_object_fnc~generate_locals REDEFINITION,
|
||||||
IMPORTING
|
lif_object_oriented_object_fnc~insert_text_pool REDEFINITION,
|
||||||
is_item TYPE ty_item
|
lif_object_oriented_object_fnc~create_sotr REDEFINITION,
|
||||||
iv_language TYPE spras.
|
lif_object_oriented_object_fnc~get_includes REDEFINITION,
|
||||||
PROTECTED SECTION.
|
lif_object_oriented_object_fnc~get_class_properties REDEFINITION,
|
||||||
METHODS deserialize_abap
|
lif_object_oriented_object_fnc~read_text_pool REDEFINITION,
|
||||||
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
lif_object_oriented_object_fnc~read_sotr REDEFINITION,
|
||||||
iv_package TYPE devclass
|
lif_object_oriented_object_fnc~delete REDEFINITION.
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS deserialize_docu
|
ENDCLASS.
|
||||||
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
CLASS lcl_object_oriented_class IMPLEMENTATION.
|
||||||
RAISING lcx_exception.
|
METHOD lif_object_oriented_object_fnc~create.
|
||||||
|
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
|
||||||
PRIVATE SECTION.
|
|
||||||
DATA mo_object_oriented_object_fct TYPE REF TO lif_object_oriented_object_fnc.
|
|
||||||
|
|
||||||
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 constructor.
|
|
||||||
super->constructor(
|
|
||||||
is_item = is_item
|
|
||||||
iv_language = iv_language ).
|
|
||||||
mo_object_oriented_object_fct = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ).
|
|
||||||
ENDMETHOD.
|
|
||||||
METHOD lif_object~deserialize.
|
|
||||||
deserialize_abap( io_xml = io_xml
|
|
||||||
iv_package = iv_package ).
|
|
||||||
|
|
||||||
deserialize_docu( io_xml ).
|
|
||||||
ENDMETHOD.
|
|
||||||
METHOD deserialize_abap.
|
|
||||||
DATA: ls_vseointerf TYPE vseointerf,
|
|
||||||
lt_source TYPE seop_source_string,
|
|
||||||
lt_descriptions TYPE ty_seocompotx_tt,
|
|
||||||
ls_clskey TYPE seoclskey.
|
|
||||||
ls_clskey-clsname = ms_item-obj_name.
|
|
||||||
|
|
||||||
lt_source = mo_files->read_abap( ).
|
|
||||||
|
|
||||||
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
|
|
||||||
CHANGING cg_data = ls_vseointerf ).
|
|
||||||
|
|
||||||
mo_object_oriented_object_fct->create(
|
|
||||||
EXPORTING
|
EXPORTING
|
||||||
iv_package = iv_package
|
devclass = iv_package
|
||||||
|
overwrite = iv_overwrite
|
||||||
CHANGING
|
CHANGING
|
||||||
is_properties = ls_vseointerf ).
|
class = is_properties
|
||||||
|
EXCEPTIONS
|
||||||
mo_object_oriented_object_fct->deserialize_source(
|
existing = 1
|
||||||
is_key = ls_clskey
|
is_interface = 2
|
||||||
it_source = lt_source ).
|
db_error = 3
|
||||||
|
component_error = 4
|
||||||
io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
|
no_access = 5
|
||||||
CHANGING cg_data = lt_descriptions ).
|
other = 6
|
||||||
|
OTHERS = 7.
|
||||||
mo_object_oriented_object_fct->update_descriptions(
|
|
||||||
is_key = ls_clskey
|
|
||||||
it_descriptions = lt_descriptions ).
|
|
||||||
|
|
||||||
mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ).
|
|
||||||
ENDMETHOD.
|
|
||||||
METHOD deserialize_docu.
|
|
||||||
|
|
||||||
DATA: lt_lines TYPE tlinetab,
|
|
||||||
lv_object TYPE dokhl-object.
|
|
||||||
|
|
||||||
io_xml->read( EXPORTING iv_name = 'LINES'
|
|
||||||
CHANGING cg_data = lt_lines ).
|
|
||||||
|
|
||||||
IF lt_lines[] IS INITIAL.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lv_object = ms_item-obj_name.
|
|
||||||
|
|
||||||
mo_object_oriented_object_fct->create_documentation(
|
|
||||||
it_lines = lt_lines
|
|
||||||
iv_object_name = lv_object
|
|
||||||
iv_language = mv_language ).
|
|
||||||
ENDMETHOD.
|
|
||||||
METHOD lif_object~has_changed_since.
|
|
||||||
DATA:
|
|
||||||
lv_program TYPE program,
|
|
||||||
lt_includes TYPE seoincl_t.
|
|
||||||
|
|
||||||
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(
|
|
||||||
iv_program = lv_program
|
|
||||||
iv_timestamp = iv_timestamp
|
|
||||||
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.
|
|
||||||
|
|
||||||
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.
|
IF sy-subrc <> 0.
|
||||||
rv_user = c_user_unknown.
|
lcx_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ).
|
||||||
ELSE.
|
ENDIF.
|
||||||
SORT lt_reposrc BY udat DESCENDING utime DESCENDING.
|
ENDMETHOD.
|
||||||
READ TABLE lt_reposrc INDEX 1 INTO ls_reposrc.
|
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.
|
||||||
|
|
||||||
|
lcl_objects_activation=>add( iv_type = 'REPT'
|
||||||
|
iv_name = lv_cp ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF lt_sotr.
|
||||||
|
|
||||||
|
LOOP AT it_sotr ASSIGNING <ls_sotr>.
|
||||||
|
CALL FUNCTION 'SOTR_OBJECT_GET_OBJECTS'
|
||||||
|
EXPORTING
|
||||||
|
object_vector = <ls_sotr>-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.
|
ASSERT sy-subrc = 0.
|
||||||
rv_user = ls_reposrc-unam.
|
|
||||||
|
ls_paket-paket = iv_package.
|
||||||
|
|
||||||
|
CALL FUNCTION 'SOTR_CREATE_CONCEPT'
|
||||||
|
EXPORTING
|
||||||
|
paket = ls_paket
|
||||||
|
crea_lan = <ls_sotr>-header-crea_lan
|
||||||
|
alias_name = <ls_sotr>-header-alias_name
|
||||||
|
object = lv_object
|
||||||
|
entries = <ls_sotr>-entries
|
||||||
|
concept_default = <ls_sotr>-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: <ls_method> 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 <ls_method>.
|
||||||
|
APPEND <ls_method>-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.
|
ENDIF.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD lif_object~compare_to_remote_version.
|
METHOD lif_object_oriented_object_fnc~read_text_pool.
|
||||||
CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
|
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.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD lif_object~delete.
|
METHOD lif_object_oriented_object_fnc~read_sotr.
|
||||||
DATA: ls_clskey TYPE seoclskey.
|
DATA: lv_concept TYPE sotr_head-concept,
|
||||||
ls_clskey-clsname = ms_item-obj_name.
|
lt_seocompodf TYPE STANDARD TABLE OF seocompodf WITH DEFAULT KEY,
|
||||||
|
ls_header TYPE sotr_head,
|
||||||
|
lt_entries TYPE sotr_text_tt.
|
||||||
|
|
||||||
mo_object_oriented_object_fct->delete( ls_clskey ).
|
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF rt_sotr,
|
||||||
ENDMETHOD.
|
<ls_seocompodf> LIKE LINE OF lt_seocompodf,
|
||||||
|
<ls_entry> LIKE LINE OF lt_entries.
|
||||||
|
|
||||||
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 ).
|
SELECT * FROM seocompodf
|
||||||
ENDMETHOD.
|
INTO TABLE lt_seocompodf
|
||||||
|
WHERE clsname = iv_object_name
|
||||||
|
AND version = '1'
|
||||||
|
AND exposure = '2'
|
||||||
|
AND attdecltyp = '2'
|
||||||
|
AND type = 'SOTR_CONC'
|
||||||
|
ORDER BY PRIMARY KEY.
|
||||||
|
|
||||||
METHOD lif_object~get_metadata.
|
LOOP AT lt_seocompodf ASSIGNING <ls_seocompodf>.
|
||||||
rs_metadata = get_metadata( ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD lif_object~jump.
|
lv_concept = translate( val = <ls_seocompodf>-attvalue from = '''' to = '' ).
|
||||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
|
||||||
|
CALL FUNCTION 'SOTR_GET_CONCEPT'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
operation = 'SHOW'
|
concept = lv_concept
|
||||||
object_name = ms_item-obj_name
|
IMPORTING
|
||||||
object_type = 'INTF'
|
header = ls_header
|
||||||
in_new_window = abap_true.
|
TABLES
|
||||||
|
entries = lt_entries
|
||||||
|
EXCEPTIONS
|
||||||
|
no_entry_found = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CLEAR: ls_header-paket,
|
||||||
|
ls_header-crea_name,
|
||||||
|
ls_header-crea_tstut,
|
||||||
|
ls_header-chan_name,
|
||||||
|
ls_header-chan_tstut.
|
||||||
|
|
||||||
|
LOOP AT lt_entries ASSIGNING <ls_entry>.
|
||||||
|
CLEAR: <ls_entry>-version,
|
||||||
|
<ls_entry>-crea_name,
|
||||||
|
<ls_entry>-crea_tstut,
|
||||||
|
<ls_entry>-chan_name,
|
||||||
|
<ls_entry>-chan_tstut.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO rt_sotr ASSIGNING <ls_sotr>.
|
||||||
|
<ls_sotr>-header = ls_header.
|
||||||
|
<ls_sotr>-entries = lt_entries.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~delete.
|
||||||
|
CALL FUNCTION 'SEO_CLASS_DELETE_COMPLETE'
|
||||||
|
EXPORTING
|
||||||
|
clskey = is_deletion_key
|
||||||
|
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.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
318
src/zabapgit_object_intf.prog.abap
Normal file
318
src/zabapgit_object_intf.prog.abap
Normal file
|
@ -0,0 +1,318 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_OBJECT_INTF
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_intf DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_intf DEFINITION FINAL 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.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA mo_object_oriented_object_fct TYPE REF TO lif_object_oriented_object_fnc.
|
||||||
|
|
||||||
|
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 constructor.
|
||||||
|
super->constructor(
|
||||||
|
is_item = is_item
|
||||||
|
iv_language = iv_language ).
|
||||||
|
mo_object_oriented_object_fct = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD lif_object~deserialize.
|
||||||
|
deserialize_abap( io_xml = io_xml
|
||||||
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
deserialize_docu( io_xml ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD deserialize_abap.
|
||||||
|
DATA: ls_vseointerf TYPE vseointerf,
|
||||||
|
lt_source TYPE seop_source_string,
|
||||||
|
lt_descriptions TYPE ty_seocompotx_tt,
|
||||||
|
ls_clskey TYPE seoclskey.
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
lt_source = mo_files->read_abap( ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
|
||||||
|
CHANGING cg_data = ls_vseointerf ).
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->create(
|
||||||
|
EXPORTING
|
||||||
|
iv_package = iv_package
|
||||||
|
CHANGING
|
||||||
|
is_properties = ls_vseointerf ).
|
||||||
|
|
||||||
|
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_fct->update_descriptions(
|
||||||
|
is_key = ls_clskey
|
||||||
|
it_descriptions = lt_descriptions ).
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD deserialize_docu.
|
||||||
|
|
||||||
|
DATA: lt_lines TYPE tlinetab,
|
||||||
|
lv_object TYPE dokhl-object.
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'LINES'
|
||||||
|
CHANGING cg_data = lt_lines ).
|
||||||
|
|
||||||
|
IF lt_lines[] IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lv_object = ms_item-obj_name.
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->create_documentation(
|
||||||
|
it_lines = lt_lines
|
||||||
|
iv_object_name = lv_object
|
||||||
|
iv_language = mv_language ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD lif_object~has_changed_since.
|
||||||
|
DATA:
|
||||||
|
lv_program TYPE program,
|
||||||
|
lt_includes TYPE seoincl_t.
|
||||||
|
|
||||||
|
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(
|
||||||
|
iv_program = lv_program
|
||||||
|
iv_timestamp = iv_timestamp
|
||||||
|
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.
|
||||||
|
|
||||||
|
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~compare_to_remote_version.
|
||||||
|
CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~delete.
|
||||||
|
DATA: ls_clskey TYPE seoclskey.
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->delete( ls_clskey ).
|
||||||
|
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.
|
||||||
|
|
||||||
|
METHOD lif_object~get_metadata.
|
||||||
|
rs_metadata = get_metadata( ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~jump.
|
||||||
|
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||||
|
EXPORTING
|
||||||
|
operation = 'SHOW'
|
||||||
|
object_name = ms_item-obj_name
|
||||||
|
object_type = 'INTF'
|
||||||
|
in_new_window = abap_true.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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,
|
||||||
|
lif_object_oriented_object_fnc~delete 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.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~get_interface_properties.
|
||||||
|
CALL FUNCTION 'SEO_CLIF_GET'
|
||||||
|
EXPORTING
|
||||||
|
cifkey = is_interface_key
|
||||||
|
version = seoc_version_active
|
||||||
|
IMPORTING
|
||||||
|
interface = rs_interface_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~delete.
|
||||||
|
CALL FUNCTION 'SEO_INTERFACE_DELETE_COMPLETE'
|
||||||
|
EXPORTING
|
||||||
|
intkey = is_deletion_key
|
||||||
|
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.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
22
src/zabapgit_object_intf.prog.xml
Normal file
22
src/zabapgit_object_intf.prog.xml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_INTF</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_INTF</ENTRY>
|
||||||
|
<LENGTH>28</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
29
src/zabapgit_object_oo_factory.prog.abap
Normal file
29
src/zabapgit_object_oo_factory.prog.abap
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include zabapgit_object_oo_factory
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
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.
|
25
src/zabapgit_object_oo_factory.prog.xml
Normal file
25
src/zabapgit_object_oo_factory.prog.xml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_OO_FACTORY</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL>S</DBAPL>
|
||||||
|
<DBNA>D$</DBNA>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<LDBNAME>D$S</LDBNAME>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_OO_FACTORY</ENTRY>
|
||||||
|
<LENGTH>34</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -1,991 +1 @@
|
||||||
"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,
|
|
||||||
ty_includes_tt TYPE STANDARD TABLE OF ty_includes WITH DEFAULT KEY.
|
|
||||||
|
|
||||||
METHODS:
|
|
||||||
create
|
|
||||||
IMPORTING
|
|
||||||
iv_package TYPE devclass
|
|
||||||
iv_overwrite TYPE seox_boolean DEFAULT seox_true
|
|
||||||
CHANGING
|
|
||||||
is_properties TYPE any
|
|
||||||
RAISING
|
|
||||||
lcx_exception,
|
|
||||||
generate_locals
|
|
||||||
IMPORTING
|
|
||||||
is_key TYPE seoclskey
|
|
||||||
iv_force TYPE seox_boolean DEFAULT seox_true
|
|
||||||
it_local_definitions TYPE seop_source_string OPTIONAL
|
|
||||||
it_local_implementations TYPE seop_source_string OPTIONAL
|
|
||||||
it_local_macros TYPE seop_source_string OPTIONAL
|
|
||||||
it_local_test_classes TYPE seop_source_string OPTIONAL
|
|
||||||
RAISING
|
|
||||||
lcx_exception,
|
|
||||||
deserialize_source
|
|
||||||
IMPORTING
|
|
||||||
is_key TYPE seoclskey
|
|
||||||
it_source TYPE ty_string_tt
|
|
||||||
RAISING
|
|
||||||
lcx_exception
|
|
||||||
cx_sy_dyn_call_error,
|
|
||||||
insert_text_pool
|
|
||||||
IMPORTING
|
|
||||||
iv_class_name TYPE seoclsname
|
|
||||||
it_text_pool TYPE textpool_table
|
|
||||||
iv_language TYPE spras
|
|
||||||
RAISING
|
|
||||||
lcx_exception,
|
|
||||||
update_descriptions
|
|
||||||
IMPORTING
|
|
||||||
is_key TYPE seoclskey
|
|
||||||
it_descriptions TYPE ty_seocompotx_tt,
|
|
||||||
add_to_activation_list
|
|
||||||
IMPORTING
|
|
||||||
is_item TYPE ty_item
|
|
||||||
RAISING
|
|
||||||
lcx_exception,
|
|
||||||
create_sotr
|
|
||||||
IMPORTING
|
|
||||||
iv_package TYPE devclass
|
|
||||||
it_sotr TYPE ty_sotr_tt
|
|
||||||
RAISING
|
|
||||||
lcx_exception,
|
|
||||||
create_documentation
|
|
||||||
IMPORTING
|
|
||||||
it_lines TYPE tlinetab
|
|
||||||
iv_object_name TYPE dokhl-object
|
|
||||||
iv_language TYPE spras
|
|
||||||
RAISING
|
|
||||||
lcx_exception,
|
|
||||||
get_includes
|
|
||||||
IMPORTING
|
|
||||||
iv_object_name TYPE sobj_name
|
|
||||||
RETURNING
|
|
||||||
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
|
|
||||||
RETURNING
|
|
||||||
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
|
|
||||||
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,
|
|
||||||
delete
|
|
||||||
IMPORTING
|
|
||||||
is_deletion_key TYPE seoclskey
|
|
||||||
RAISING
|
|
||||||
lcx_exception.
|
|
||||||
ENDINTERFACE.
|
|
||||||
|
|
||||||
CLASS lcl_oo_object_serializer DEFINITION.
|
|
||||||
PUBLIC SECTION.
|
|
||||||
|
|
||||||
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 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_oo_object_serializer IMPLEMENTATION.
|
|
||||||
METHOD serialize_abap_clif_source.
|
|
||||||
TRY.
|
|
||||||
rt_source = serialize_abap_new( is_class_key ).
|
|
||||||
CATCH cx_sy_dyn_call_error.
|
|
||||||
rt_source = serialize_abap_old( is_class_key ).
|
|
||||||
ENDTRY.
|
|
||||||
ENDMETHOD.
|
|
||||||
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
|
|
||||||
EXCEPTIONS
|
|
||||||
class_not_existing = 1
|
|
||||||
OTHERS = 2.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
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.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD remove_signatures.
|
|
||||||
|
|
||||||
* 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.
|
|
||||||
|
|
||||||
"@TODO: Put under test
|
|
||||||
CONCATENATE '* <SIGNATURE>------------------------------------'
|
|
||||||
'---------------------------------------------------+'
|
|
||||||
INTO lv_begin.
|
|
||||||
|
|
||||||
CONCATENATE '* +------------------------------------------------'
|
|
||||||
'--------------------------------------</SIGNATURE>'
|
|
||||||
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 reduce.
|
|
||||||
|
|
||||||
DATA: lv_source LIKE LINE OF ct_source,
|
|
||||||
lv_found TYPE sap_bool.
|
|
||||||
|
|
||||||
|
|
||||||
* skip files that only contain the standard comments
|
|
||||||
lv_found = abap_false.
|
|
||||||
LOOP AT ct_source INTO lv_source.
|
|
||||||
IF strlen( lv_source ) >= 3 AND lv_source(3) <> '*"*'.
|
|
||||||
lv_found = abap_true.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
IF lv_found = abap_false.
|
|
||||||
CLEAR ct_source[].
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "reduce
|
|
||||||
|
|
||||||
METHOD serialize_locals_imp.
|
|
||||||
|
|
||||||
rt_source = read_include( is_clskey = is_clskey
|
|
||||||
iv_type = seop_ext_class_locals_imp ).
|
|
||||||
|
|
||||||
reduce( CHANGING ct_source = rt_source ).
|
|
||||||
|
|
||||||
ENDMETHOD. "serialize_local
|
|
||||||
|
|
||||||
METHOD serialize_locals_def.
|
|
||||||
|
|
||||||
rt_source = read_include( is_clskey = is_clskey
|
|
||||||
iv_type = seop_ext_class_locals_def ).
|
|
||||||
|
|
||||||
reduce( CHANGING ct_source = rt_source ).
|
|
||||||
|
|
||||||
ENDMETHOD. "serialize_locals_def
|
|
||||||
|
|
||||||
METHOD read_include.
|
|
||||||
|
|
||||||
DATA: ls_include TYPE progstruc.
|
|
||||||
|
|
||||||
|
|
||||||
ASSERT iv_type = seop_ext_class_locals_def
|
|
||||||
OR iv_type = seop_ext_class_locals_imp
|
|
||||||
OR iv_type = seop_ext_class_macros
|
|
||||||
OR iv_type = seop_ext_class_testclasses.
|
|
||||||
|
|
||||||
ls_include-rootname = is_clskey-clsname.
|
|
||||||
TRANSLATE ls_include-rootname USING ' ='.
|
|
||||||
ls_include-categorya = iv_type(1).
|
|
||||||
ls_include-codea = iv_type+1(4).
|
|
||||||
|
|
||||||
* it looks like there is an issue in function module SEO_CLASS_GET_INCLUDE_SOURCE
|
|
||||||
* on 750 kernels, where the READ REPORT without STATE addition does not
|
|
||||||
* return the active version, this method is a workaround for this issue
|
|
||||||
READ REPORT ls_include INTO rt_source STATE 'A'.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD serialize_testclasses.
|
|
||||||
|
|
||||||
DATA: lv_line1 LIKE LINE OF rt_source,
|
|
||||||
lv_line2 LIKE LINE OF rt_source.
|
|
||||||
|
|
||||||
|
|
||||||
rt_source = read_include( is_clskey = is_clskey
|
|
||||||
iv_type = seop_ext_class_testclasses ).
|
|
||||||
|
|
||||||
* when creating classes in Eclipse it automatically generates the
|
|
||||||
* testclass include, but it is not needed, so skip to avoid
|
|
||||||
* 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.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
READ TABLE rt_source INDEX 2 INTO lv_line2.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
IF lv_line1(3) = '*"*' AND lv_line2 IS INITIAL.
|
|
||||||
mv_skip_testclass = abap_true.
|
|
||||||
ENDIF.
|
|
||||||
ELSEIF lines( rt_source ) = 1.
|
|
||||||
READ TABLE rt_source INDEX 1 INTO lv_line1.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
IF lv_line1 IS INITIAL
|
|
||||||
OR ( strlen( lv_line1 ) >= 3 AND lv_line1(3) = '*"*' )
|
|
||||||
OR ( strlen( lv_line1 ) = 1 AND lv_line1(1) = '*' ).
|
|
||||||
mv_skip_testclass = abap_true.
|
|
||||||
ENDIF.
|
|
||||||
ELSEIF lines( rt_source ) = 0.
|
|
||||||
mv_skip_testclass = abap_true.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "serialize_test
|
|
||||||
|
|
||||||
METHOD serialize_macros.
|
|
||||||
|
|
||||||
rt_source = read_include( is_clskey = is_clskey
|
|
||||||
iv_type = seop_ext_class_macros ).
|
|
||||||
|
|
||||||
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.
|
|
||||||
DATA mv_skip_test_classes TYPE abap_bool.
|
|
||||||
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.
|
|
||||||
ASSERT 0 = 1. "Subclass responsibility
|
|
||||||
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.
|
|
||||||
ASSERT 0 = 1. "Subclass responsibility
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD deserialize_abap_source_old.
|
|
||||||
"for backwards compatability down to 702
|
|
||||||
|
|
||||||
DATA: lo_source TYPE REF TO cl_oo_source.
|
|
||||||
|
|
||||||
CREATE OBJECT lo_source
|
|
||||||
EXPORTING
|
|
||||||
clskey = is_clskey
|
|
||||||
EXCEPTIONS
|
|
||||||
class_not_existing = 1
|
|
||||||
OTHERS = 2.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
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.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD deserialize_abap_source_new.
|
|
||||||
DATA: lo_factory TYPE REF TO object,
|
|
||||||
lo_source TYPE REF TO object.
|
|
||||||
|
|
||||||
CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
|
|
||||||
RECEIVING
|
|
||||||
result = lo_factory.
|
|
||||||
|
|
||||||
CALL METHOD lo_factory->('CREATE_CLIF_SOURCE')
|
|
||||||
EXPORTING
|
|
||||||
clif_name = is_clskey-clsname
|
|
||||||
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_fnc~add_to_activation_list.
|
|
||||||
lcl_objects_activation=>add_item( is_item ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
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.
|
|
||||||
ASSERT 0 = 1. "Subclass responsibility
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD lif_object_oriented_object_fnc~create_sotr.
|
|
||||||
ASSERT 0 = 1. "Subclass responsibility
|
|
||||||
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.
|
|
||||||
ASSERT 0 = 1. "Subclass responsibility
|
|
||||||
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 ).
|
|
||||||
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. "Subclass responsibility
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD lif_object_oriented_object_fnc~get_interface_properties.
|
|
||||||
ASSERT 0 = 1. "Subclass responsibility
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD lif_object_oriented_object_fnc~read_text_pool.
|
|
||||||
ASSERT 0 = 1. "Subclass responsibility
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD lif_object_oriented_object_fnc~read_sotr.
|
|
||||||
ASSERT 0 = 1. "Subclass responsibility
|
|
||||||
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.
|
|
||||||
|
|
||||||
METHOD lif_object_oriented_object_fnc~delete.
|
|
||||||
ASSERT 0 = 1. "Subclass responsibility
|
|
||||||
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,
|
|
||||||
lif_object_oriented_object_fnc~delete 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.
|
|
||||||
|
|
||||||
lcl_objects_activation=>add( iv_type = 'REPT'
|
|
||||||
iv_name = lv_cp ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF lt_sotr.
|
|
||||||
|
|
||||||
LOOP AT it_sotr ASSIGNING <ls_sotr>.
|
|
||||||
CALL FUNCTION 'SOTR_OBJECT_GET_OBJECTS'
|
|
||||||
EXPORTING
|
|
||||||
object_vector = <ls_sotr>-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 = <ls_sotr>-header-crea_lan
|
|
||||||
alias_name = <ls_sotr>-header-alias_name
|
|
||||||
object = lv_object
|
|
||||||
entries = <ls_sotr>-entries
|
|
||||||
concept_default = <ls_sotr>-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: <ls_method> 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 <ls_method>.
|
|
||||||
APPEND <ls_method>-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,
|
|
||||||
lt_entries TYPE sotr_text_tt.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF rt_sotr,
|
|
||||||
<ls_seocompodf> LIKE LINE OF lt_seocompodf,
|
|
||||||
<ls_entry> LIKE LINE OF lt_entries.
|
|
||||||
|
|
||||||
|
|
||||||
SELECT * FROM seocompodf
|
|
||||||
INTO TABLE lt_seocompodf
|
|
||||||
WHERE clsname = iv_object_name
|
|
||||||
AND version = '1'
|
|
||||||
AND exposure = '2'
|
|
||||||
AND attdecltyp = '2'
|
|
||||||
AND type = 'SOTR_CONC'
|
|
||||||
ORDER BY PRIMARY KEY.
|
|
||||||
|
|
||||||
LOOP AT lt_seocompodf ASSIGNING <ls_seocompodf>.
|
|
||||||
|
|
||||||
lv_concept = translate( val = <ls_seocompodf>-attvalue from = '''' to = '' ).
|
|
||||||
|
|
||||||
CALL FUNCTION 'SOTR_GET_CONCEPT'
|
|
||||||
EXPORTING
|
|
||||||
concept = lv_concept
|
|
||||||
IMPORTING
|
|
||||||
header = ls_header
|
|
||||||
TABLES
|
|
||||||
entries = lt_entries
|
|
||||||
EXCEPTIONS
|
|
||||||
no_entry_found = 1
|
|
||||||
OTHERS = 2.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
CONTINUE.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CLEAR: ls_header-paket,
|
|
||||||
ls_header-crea_name,
|
|
||||||
ls_header-crea_tstut,
|
|
||||||
ls_header-chan_name,
|
|
||||||
ls_header-chan_tstut.
|
|
||||||
|
|
||||||
LOOP AT lt_entries ASSIGNING <ls_entry>.
|
|
||||||
CLEAR: <ls_entry>-version,
|
|
||||||
<ls_entry>-crea_name,
|
|
||||||
<ls_entry>-crea_tstut,
|
|
||||||
<ls_entry>-chan_name,
|
|
||||||
<ls_entry>-chan_tstut.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
APPEND INITIAL LINE TO rt_sotr ASSIGNING <ls_sotr>.
|
|
||||||
<ls_sotr>-header = ls_header.
|
|
||||||
<ls_sotr>-entries = lt_entries.
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD lif_object_oriented_object_fnc~delete.
|
|
||||||
CALL FUNCTION 'SEO_CLASS_DELETE_COMPLETE'
|
|
||||||
EXPORTING
|
|
||||||
clskey = is_deletion_key
|
|
||||||
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.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
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,
|
|
||||||
lif_object_oriented_object_fnc~delete 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.
|
|
||||||
|
|
||||||
METHOD lif_object_oriented_object_fnc~get_interface_properties.
|
|
||||||
CALL FUNCTION 'SEO_CLIF_GET'
|
|
||||||
EXPORTING
|
|
||||||
cifkey = is_interface_key
|
|
||||||
version = seoc_version_active
|
|
||||||
IMPORTING
|
|
||||||
interface = rs_interface_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~delete.
|
|
||||||
CALL FUNCTION 'SEO_INTERFACE_DELETE_COMPLETE'
|
|
||||||
EXPORTING
|
|
||||||
intkey = is_deletion_key
|
|
||||||
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.
|
|
||||||
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.
|
|
||||||
|
|
626
src/zabapgit_object_oo_functions.prog.abap
Normal file
626
src/zabapgit_object_oo_functions.prog.abap
Normal file
|
@ -0,0 +1,626 @@
|
||||||
|
"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,
|
||||||
|
ty_includes_tt TYPE STANDARD TABLE OF ty_includes WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
create
|
||||||
|
IMPORTING
|
||||||
|
iv_package TYPE devclass
|
||||||
|
iv_overwrite TYPE seox_boolean DEFAULT seox_true
|
||||||
|
CHANGING
|
||||||
|
is_properties TYPE any
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
generate_locals
|
||||||
|
IMPORTING
|
||||||
|
is_key TYPE seoclskey
|
||||||
|
iv_force TYPE seox_boolean DEFAULT seox_true
|
||||||
|
it_local_definitions TYPE seop_source_string OPTIONAL
|
||||||
|
it_local_implementations TYPE seop_source_string OPTIONAL
|
||||||
|
it_local_macros TYPE seop_source_string OPTIONAL
|
||||||
|
it_local_test_classes TYPE seop_source_string OPTIONAL
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
deserialize_source
|
||||||
|
IMPORTING
|
||||||
|
is_key TYPE seoclskey
|
||||||
|
it_source TYPE ty_string_tt
|
||||||
|
RAISING
|
||||||
|
lcx_exception
|
||||||
|
cx_sy_dyn_call_error,
|
||||||
|
insert_text_pool
|
||||||
|
IMPORTING
|
||||||
|
iv_class_name TYPE seoclsname
|
||||||
|
it_text_pool TYPE textpool_table
|
||||||
|
iv_language TYPE spras
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
update_descriptions
|
||||||
|
IMPORTING
|
||||||
|
is_key TYPE seoclskey
|
||||||
|
it_descriptions TYPE ty_seocompotx_tt,
|
||||||
|
add_to_activation_list
|
||||||
|
IMPORTING
|
||||||
|
is_item TYPE ty_item
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
create_sotr
|
||||||
|
IMPORTING
|
||||||
|
iv_package TYPE devclass
|
||||||
|
it_sotr TYPE ty_sotr_tt
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
create_documentation
|
||||||
|
IMPORTING
|
||||||
|
it_lines TYPE tlinetab
|
||||||
|
iv_object_name TYPE dokhl-object
|
||||||
|
iv_language TYPE spras
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
get_includes
|
||||||
|
IMPORTING
|
||||||
|
iv_object_name TYPE sobj_name
|
||||||
|
RETURNING
|
||||||
|
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
|
||||||
|
RETURNING
|
||||||
|
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
|
||||||
|
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,
|
||||||
|
delete
|
||||||
|
IMPORTING
|
||||||
|
is_deletion_key TYPE seoclskey
|
||||||
|
RAISING
|
||||||
|
lcx_exception.
|
||||||
|
ENDINTERFACE.
|
||||||
|
|
||||||
|
CLASS lcl_oo_object_serializer DEFINITION.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
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 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_oo_object_serializer IMPLEMENTATION.
|
||||||
|
METHOD serialize_abap_clif_source.
|
||||||
|
TRY.
|
||||||
|
rt_source = serialize_abap_new( is_class_key ).
|
||||||
|
CATCH cx_sy_dyn_call_error.
|
||||||
|
rt_source = serialize_abap_old( is_class_key ).
|
||||||
|
ENDTRY.
|
||||||
|
ENDMETHOD.
|
||||||
|
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
|
||||||
|
EXCEPTIONS
|
||||||
|
class_not_existing = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
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.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD remove_signatures.
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
"@TODO: Put under test
|
||||||
|
CONCATENATE '* <SIGNATURE>------------------------------------'
|
||||||
|
'---------------------------------------------------+'
|
||||||
|
INTO lv_begin.
|
||||||
|
|
||||||
|
CONCATENATE '* +------------------------------------------------'
|
||||||
|
'--------------------------------------</SIGNATURE>'
|
||||||
|
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 reduce.
|
||||||
|
|
||||||
|
DATA: lv_source LIKE LINE OF ct_source,
|
||||||
|
lv_found TYPE sap_bool.
|
||||||
|
|
||||||
|
|
||||||
|
* skip files that only contain the standard comments
|
||||||
|
lv_found = abap_false.
|
||||||
|
LOOP AT ct_source INTO lv_source.
|
||||||
|
IF strlen( lv_source ) >= 3 AND lv_source(3) <> '*"*'.
|
||||||
|
lv_found = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
IF lv_found = abap_false.
|
||||||
|
CLEAR ct_source[].
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "reduce
|
||||||
|
|
||||||
|
METHOD serialize_locals_imp.
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_locals_imp ).
|
||||||
|
|
||||||
|
reduce( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_local
|
||||||
|
|
||||||
|
METHOD serialize_locals_def.
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_locals_def ).
|
||||||
|
|
||||||
|
reduce( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_locals_def
|
||||||
|
|
||||||
|
METHOD read_include.
|
||||||
|
|
||||||
|
DATA: ls_include TYPE progstruc.
|
||||||
|
|
||||||
|
|
||||||
|
ASSERT iv_type = seop_ext_class_locals_def
|
||||||
|
OR iv_type = seop_ext_class_locals_imp
|
||||||
|
OR iv_type = seop_ext_class_macros
|
||||||
|
OR iv_type = seop_ext_class_testclasses.
|
||||||
|
|
||||||
|
ls_include-rootname = is_clskey-clsname.
|
||||||
|
TRANSLATE ls_include-rootname USING ' ='.
|
||||||
|
ls_include-categorya = iv_type(1).
|
||||||
|
ls_include-codea = iv_type+1(4).
|
||||||
|
|
||||||
|
* it looks like there is an issue in function module SEO_CLASS_GET_INCLUDE_SOURCE
|
||||||
|
* on 750 kernels, where the READ REPORT without STATE addition does not
|
||||||
|
* return the active version, this method is a workaround for this issue
|
||||||
|
READ REPORT ls_include INTO rt_source STATE 'A'.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD serialize_testclasses.
|
||||||
|
|
||||||
|
DATA: lv_line1 LIKE LINE OF rt_source,
|
||||||
|
lv_line2 LIKE LINE OF rt_source.
|
||||||
|
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_testclasses ).
|
||||||
|
|
||||||
|
* when creating classes in Eclipse it automatically generates the
|
||||||
|
* testclass include, but it is not needed, so skip to avoid
|
||||||
|
* 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.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
READ TABLE rt_source INDEX 2 INTO lv_line2.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
IF lv_line1(3) = '*"*' AND lv_line2 IS INITIAL.
|
||||||
|
mv_skip_testclass = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ELSEIF lines( rt_source ) = 1.
|
||||||
|
READ TABLE rt_source INDEX 1 INTO lv_line1.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
IF lv_line1 IS INITIAL
|
||||||
|
OR ( strlen( lv_line1 ) >= 3 AND lv_line1(3) = '*"*' )
|
||||||
|
OR ( strlen( lv_line1 ) = 1 AND lv_line1(1) = '*' ).
|
||||||
|
mv_skip_testclass = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ELSEIF lines( rt_source ) = 0.
|
||||||
|
mv_skip_testclass = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_test
|
||||||
|
|
||||||
|
METHOD serialize_macros.
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_macros ).
|
||||||
|
|
||||||
|
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.
|
||||||
|
DATA mv_skip_test_classes TYPE abap_bool.
|
||||||
|
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.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
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.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD deserialize_abap_source_old.
|
||||||
|
"for backwards compatability down to 702
|
||||||
|
|
||||||
|
DATA: lo_source TYPE REF TO cl_oo_source.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_source
|
||||||
|
EXPORTING
|
||||||
|
clskey = is_clskey
|
||||||
|
EXCEPTIONS
|
||||||
|
class_not_existing = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
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.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD deserialize_abap_source_new.
|
||||||
|
DATA: lo_factory TYPE REF TO object,
|
||||||
|
lo_source TYPE REF TO object.
|
||||||
|
|
||||||
|
CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
|
||||||
|
RECEIVING
|
||||||
|
result = lo_factory.
|
||||||
|
|
||||||
|
CALL METHOD lo_factory->('CREATE_CLIF_SOURCE')
|
||||||
|
EXPORTING
|
||||||
|
clif_name = is_clskey-clsname
|
||||||
|
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_fnc~add_to_activation_list.
|
||||||
|
lcl_objects_activation=>add_item( is_item ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
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.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~create_sotr.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
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.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
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 ).
|
||||||
|
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. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~get_interface_properties.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~read_text_pool.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~read_sotr.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
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.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~delete.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
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.
|
25
src/zabapgit_object_oo_functions.prog.xml
Normal file
25
src/zabapgit_object_oo_functions.prog.xml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_OO_FUNCTIONS</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL>S</DBAPL>
|
||||||
|
<DBNA>D$</DBNA>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<LDBNAME>D$S</LDBNAME>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_OO_FUNCTIONS</ENTRY>
|
||||||
|
<LENGTH>36</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
INCLUDE zabapgit_object_acid.
|
INCLUDE zabapgit_object_acid.
|
||||||
INCLUDE zabapgit_object_auth.
|
INCLUDE zabapgit_object_auth.
|
||||||
INCLUDE zabapgit_object_oo_fct.
|
INCLUDE zabapgit_object_oo_functions.
|
||||||
INCLUDE zabapgit_object_clas.
|
INCLUDE zabapgit_object_clas.
|
||||||
INCLUDE zabapgit_object_doct.
|
INCLUDE zabapgit_object_doct.
|
||||||
INCLUDE zabapgit_object_docv.
|
INCLUDE zabapgit_object_docv.
|
||||||
|
@ -20,6 +20,7 @@ INCLUDE zabapgit_object_fugr.
|
||||||
INCLUDE zabapgit_object_iarp.
|
INCLUDE zabapgit_object_iarp.
|
||||||
INCLUDE zabapgit_object_iasp.
|
INCLUDE zabapgit_object_iasp.
|
||||||
INCLUDE zabapgit_object_iatu.
|
INCLUDE zabapgit_object_iatu.
|
||||||
|
INCLUDE zabapgit_object_intf.
|
||||||
INCLUDE zabapgit_object_msag.
|
INCLUDE zabapgit_object_msag.
|
||||||
INCLUDE zabapgit_object_nrob.
|
INCLUDE zabapgit_object_nrob.
|
||||||
INCLUDE zabapgit_object_para.
|
INCLUDE zabapgit_object_para.
|
||||||
|
@ -50,3 +51,4 @@ INCLUDE zabapgit_object_wdya.
|
||||||
INCLUDE zabapgit_object_wdyn.
|
INCLUDE zabapgit_object_wdyn.
|
||||||
INCLUDE zabapgit_object_webi.
|
INCLUDE zabapgit_object_webi.
|
||||||
INCLUDE zabapgit_object_xslt.
|
INCLUDE zabapgit_object_xslt.
|
||||||
|
INCLUDE zabapgit_object_oo_factory.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user