mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
CLAS: Performance APACK (#4016)
- Replace `select count` with `select single` - Remove unnecessary loops - Keep SAP apack manifest during deserialize (if available) Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
1c8c216a5c
commit
5068e7553c
|
@ -77,6 +77,12 @@ CLASS zcl_abapgit_object_clas DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
|
||||||
is_class_locked
|
is_class_locked
|
||||||
RETURNING VALUE(rv_is_class_locked) TYPE abap_bool
|
RETURNING VALUE(rv_is_class_locked) TYPE abap_bool
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
METHODS interface_replacement
|
||||||
|
IMPORTING
|
||||||
|
!iv_from_interface TYPE seoclsname
|
||||||
|
!iv_to_interface TYPE seoclsname
|
||||||
|
CHANGING
|
||||||
|
!ct_source TYPE seop_source_string .
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
@ -244,6 +250,27 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD interface_replacement.
|
||||||
|
|
||||||
|
DATA lv_tabix TYPE sy-tabix.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <lv_source> LIKE LINE OF ct_source.
|
||||||
|
|
||||||
|
FIND REGEX '^\s*INTERFACES(:| )\s*' && iv_from_interface && '\s*.' IN TABLE ct_source MATCH LINE lv_tabix.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
READ TABLE ct_source ASSIGNING <lv_source> INDEX lv_tabix.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
|
||||||
|
REPLACE FIRST OCCURRENCE OF iv_from_interface IN <lv_source>
|
||||||
|
WITH iv_to_interface IGNORING CASE.
|
||||||
|
|
||||||
|
REPLACE ALL OCCURRENCES OF iv_from_interface && '~descriptor' IN TABLE ct_source
|
||||||
|
WITH iv_to_interface && '~descriptor' IGNORING CASE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD is_class_locked.
|
METHOD is_class_locked.
|
||||||
|
|
||||||
DATA: lv_argument TYPE seqg3-garg.
|
DATA: lv_argument TYPE seqg3-garg.
|
||||||
|
@ -260,26 +287,23 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD repo_apack_replacement.
|
METHOD repo_apack_replacement.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <lv_source> LIKE LINE OF ct_source.
|
DATA lv_apack TYPE seoclsname.
|
||||||
|
|
||||||
LOOP AT ct_source ASSIGNING <lv_source>.
|
" Check if SAP-version of APACK manifest exists
|
||||||
|
SELECT SINGLE clsname INTO lv_apack
|
||||||
FIND FIRST OCCURRENCE OF REGEX '^\s*INTERFACES(:| )\s*if_apack_manifest\s*.' IN <lv_source>.
|
FROM seoclass
|
||||||
|
WHERE clsname = 'IF_APACK_MANIFEST'.
|
||||||
IF sy-subrc = 0.
|
IF sy-subrc = 0.
|
||||||
REPLACE FIRST OCCURRENCE OF 'if_apack_manifest' IN <lv_source> WITH 'zif_apack_manifest' IGNORING CASE.
|
RETURN.
|
||||||
|
|
||||||
REPLACE ALL OCCURRENCES OF 'if_apack_manifest~descriptor' IN TABLE ct_source
|
|
||||||
WITH 'zif_apack_manifest~descriptor' IGNORING CASE.
|
|
||||||
|
|
||||||
EXIT.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
FIND FIRST OCCURRENCE OF REGEX '^\s*PROTECTED\s*SECTION\s*.' IN <lv_source>.
|
" If not, replace with abapGit version
|
||||||
IF sy-subrc = 0.
|
interface_replacement(
|
||||||
EXIT.
|
EXPORTING
|
||||||
ENDIF.
|
iv_from_interface = 'if_apack_manifest'
|
||||||
|
iv_to_interface = 'zif_apack_manifest'
|
||||||
ENDLOOP.
|
CHANGING
|
||||||
|
ct_source = ct_source ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -483,37 +507,25 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD source_apack_replacement.
|
METHOD source_apack_replacement.
|
||||||
|
|
||||||
DATA: lv_clsname TYPE seoclsname.
|
DATA lv_clsname TYPE seoclsname.
|
||||||
FIELD-SYMBOLS: <lv_source> LIKE LINE OF ct_source.
|
|
||||||
|
|
||||||
lv_clsname = ms_item-obj_name.
|
" Check if abapGit version of APACK manifest is used
|
||||||
SELECT COUNT(*)
|
SELECT SINGLE clsname INTO lv_clsname
|
||||||
FROM seometarel
|
FROM seometarel
|
||||||
WHERE clsname = lv_clsname
|
WHERE clsname = ms_item-obj_name
|
||||||
AND refclsname = 'ZIF_APACK_MANIFEST'
|
AND refclsname = 'ZIF_APACK_MANIFEST'
|
||||||
AND version = '1'.
|
AND version = '1'.
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc <> 0.
|
||||||
RETURN.
|
RETURN.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
LOOP AT ct_source ASSIGNING <lv_source>.
|
" If yes, replace with SAP-version
|
||||||
|
interface_replacement(
|
||||||
FIND FIRST OCCURRENCE OF REGEX '^\s*INTERFACES(:| )\s*zif_apack_manifest\s*.' IN <lv_source>.
|
EXPORTING
|
||||||
IF sy-subrc = 0.
|
iv_from_interface = 'zif_apack_manifest'
|
||||||
REPLACE FIRST OCCURRENCE OF 'zif_apack_manifest' IN <lv_source> WITH 'if_apack_manifest' IGNORING CASE.
|
iv_to_interface = 'if_apack_manifest'
|
||||||
|
CHANGING
|
||||||
REPLACE ALL OCCURRENCES OF 'zif_apack_manifest~descriptor' IN TABLE ct_source
|
ct_source = ct_source ).
|
||||||
WITH 'if_apack_manifest~descriptor' IGNORING CASE.
|
|
||||||
|
|
||||||
EXIT.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
FIND FIRST OCCURRENCE OF REGEX '^\s*PROTECTED\s*SECTION\s*.' IN <lv_source>.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
EXIT.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user