mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
Do a syntax check before accessing version constant (#6733)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
This commit is contained in:
parent
350d2eb7a7
commit
bf76fedf19
|
@ -355,4 +355,10 @@ CLASS zcl_abapgit_oo_base IMPLEMENTATION.
|
||||||
DELETE FROM seosubcotx WHERE clsname = is_key-clsname."#EC CI_SUBRC
|
DELETE FROM seosubcotx WHERE clsname = is_key-clsname."#EC CI_SUBRC
|
||||||
INSERT seosubcotx FROM TABLE lt_descriptions. "#EC CI_SUBRC
|
INSERT seosubcotx FROM TABLE lt_descriptions. "#EC CI_SUBRC
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_oo_object_fnc~syntax_check.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -27,6 +27,8 @@ CLASS zcl_abapgit_oo_class DEFINITION
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
METHODS zif_abapgit_oo_object_fnc~exists
|
METHODS zif_abapgit_oo_object_fnc~exists
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
|
METHODS zif_abapgit_oo_object_fnc~syntax_check
|
||||||
|
REDEFINITION .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
TYPES:
|
TYPES:
|
||||||
|
@ -968,4 +970,31 @@ CLASS zcl_abapgit_oo_class IMPLEMENTATION.
|
||||||
lv_cp = cl_oo_classname_service=>get_classpool_name( iv_class_name ).
|
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
|
READ TEXTPOOL lv_cp INTO rt_text_pool LANGUAGE iv_language. "#EC CI_READ_REP
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_oo_object_fnc~syntax_check.
|
||||||
|
DATA:
|
||||||
|
ls_clskey TYPE seoclskey,
|
||||||
|
lv_syntaxerror TYPE abap_bool.
|
||||||
|
|
||||||
|
ls_clskey-clsname = to_upper( iv_object_name ).
|
||||||
|
|
||||||
|
CALL FUNCTION 'SEO_CLASS_CHECK_CLASSPOOL'
|
||||||
|
EXPORTING
|
||||||
|
clskey = ls_clskey
|
||||||
|
suppress_error_popup = abap_true
|
||||||
|
IMPORTING
|
||||||
|
syntaxerror = lv_syntaxerror
|
||||||
|
EXCEPTIONS
|
||||||
|
_internal_class_not_existing = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
zcx_abapgit_exception=>raise_t100( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_syntaxerror = abap_true.
|
||||||
|
zcx_abapgit_exception=>raise( |Class { ls_clskey-clsname } has syntax errors | ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -6,10 +6,19 @@ CLASS zcl_abapgit_oo_factory DEFINITION PUBLIC.
|
||||||
IMPORTING
|
IMPORTING
|
||||||
iv_object_type TYPE tadir-object
|
iv_object_type TYPE tadir-object
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ri_object_oriented_object) TYPE REF TO zif_abapgit_oo_object_fnc.
|
VALUE(ri_object_oriented_object) TYPE REF TO zif_abapgit_oo_object_fnc,
|
||||||
PRIVATE SECTION.
|
|
||||||
|
|
||||||
|
make_by_name
|
||||||
|
IMPORTING
|
||||||
|
iv_object_name TYPE seoclsname
|
||||||
|
RETURNING
|
||||||
|
VALUE(ri_object_oriented_object) TYPE REF TO zif_abapgit_oo_object_fnc
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
CLASS-DATA gi_object_oriented_object TYPE REF TO zif_abapgit_oo_object_fnc .
|
CLASS-DATA gi_object_oriented_object TYPE REF TO zif_abapgit_oo_object_fnc .
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,4 +37,30 @@ CLASS zcl_abapgit_oo_factory IMPLEMENTATION.
|
||||||
CREATE OBJECT ri_object_oriented_object TYPE zcl_abapgit_oo_interface.
|
CREATE OBJECT ri_object_oriented_object TYPE zcl_abapgit_oo_interface.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD make_by_name.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
li_interface TYPE REF TO zif_abapgit_oo_object_fnc,
|
||||||
|
li_class TYPE REF TO zif_abapgit_oo_object_fnc,
|
||||||
|
ls_object_name TYPE seoclskey.
|
||||||
|
|
||||||
|
ls_object_name-clsname = to_upper( iv_object_name ).
|
||||||
|
|
||||||
|
CREATE OBJECT li_class TYPE zcl_abapgit_oo_class.
|
||||||
|
IF li_class->exists( ls_object_name ) = abap_true.
|
||||||
|
ri_object_oriented_object = li_class.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CREATE OBJECT li_interface TYPE zcl_abapgit_oo_interface.
|
||||||
|
IF li_interface->exists( ls_object_name ) = abap_true.
|
||||||
|
ri_object_oriented_object = li_interface.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
zcx_abapgit_exception=>raise( |{ iv_object_name } is neither a class nor an interface| ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -17,6 +17,8 @@ CLASS zcl_abapgit_oo_interface DEFINITION
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
METHODS zif_abapgit_oo_object_fnc~exists
|
METHODS zif_abapgit_oo_object_fnc~exists
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
|
METHODS zif_abapgit_oo_object_fnc~syntax_check
|
||||||
|
REDEFINITION .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
@ -339,4 +341,30 @@ CLASS zcl_abapgit_oo_interface IMPLEMENTATION.
|
||||||
rs_interface_properties-r3release,
|
rs_interface_properties-r3release,
|
||||||
rs_interface_properties-version.
|
rs_interface_properties-version.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_oo_object_fnc~syntax_check.
|
||||||
|
DATA:
|
||||||
|
ls_intkey TYPE seoclskey,
|
||||||
|
lv_syntaxerror TYPE abap_bool.
|
||||||
|
|
||||||
|
ls_intkey-clsname = to_upper( iv_object_name ).
|
||||||
|
|
||||||
|
CALL FUNCTION 'SEO_INTERFACE_CHECK_POOL'
|
||||||
|
EXPORTING
|
||||||
|
intkey = ls_intkey
|
||||||
|
suppress_error_popup = abap_true
|
||||||
|
IMPORTING
|
||||||
|
syntaxerror = lv_syntaxerror
|
||||||
|
EXCEPTIONS
|
||||||
|
OTHERS = 1.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
zcx_abapgit_exception=>raise_t100( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_syntaxerror = abap_true.
|
||||||
|
zcx_abapgit_exception=>raise( |Interface { ls_intkey-clsname } has syntax errors | ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -187,5 +187,10 @@ INTERFACE zif_abapgit_oo_object_fnc PUBLIC.
|
||||||
IMPORTING
|
IMPORTING
|
||||||
iv_object_name TYPE seoclsname
|
iv_object_name TYPE seoclsname
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rt_attributes) TYPE ty_obj_attribute_tt.
|
VALUE(rt_attributes) TYPE ty_obj_attribute_tt,
|
||||||
|
syntax_check
|
||||||
|
IMPORTING
|
||||||
|
iv_object_name TYPE seoclsname
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
ENDINTERFACE.
|
ENDINTERFACE.
|
||||||
|
|
|
@ -104,6 +104,9 @@ CLASS lth_oo_object_fnc IMPLEMENTATION.
|
||||||
METHOD zif_abapgit_oo_object_fnc~update_descriptions_sub.
|
METHOD zif_abapgit_oo_object_fnc~update_descriptions_sub.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_oo_object_fnc~syntax_check.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -251,7 +251,7 @@ CLASS zcl_abapgit_version IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD get_version_constant_value.
|
METHOD get_version_constant_value.
|
||||||
DATA: lv_version_class TYPE string,
|
DATA: lv_version_class TYPE seoclsname,
|
||||||
lv_version_component TYPE string.
|
lv_version_component TYPE string.
|
||||||
FIELD-SYMBOLS: <lv_version> TYPE string.
|
FIELD-SYMBOLS: <lv_version> TYPE string.
|
||||||
|
|
||||||
|
@ -264,6 +264,10 @@ CLASS zcl_abapgit_version IMPLEMENTATION.
|
||||||
zcx_abapgit_exception=>raise( 'Version constant cannot be parsed' ).
|
zcx_abapgit_exception=>raise( 'Version constant cannot be parsed' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
" You should remember that accessing a class or an interface with syntax errors
|
||||||
|
" gives us a shortdump. Therefore we do a syntax check here.
|
||||||
|
zcl_abapgit_oo_factory=>make_by_name( lv_version_class )->syntax_check( lv_version_class ).
|
||||||
|
|
||||||
ASSIGN (lv_version_class)=>(lv_version_component) TO <lv_version>.
|
ASSIGN (lv_version_class)=>(lv_version_component) TO <lv_version>.
|
||||||
IF sy-subrc = 0.
|
IF sy-subrc = 0.
|
||||||
rv_version = <lv_version>.
|
rv_version = <lv_version>.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user