Enhance ABAP Language Version class (#6484)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2023-09-29 10:29:12 -04:00 committed by GitHub
parent 6f157c590f
commit 02dfc77129
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 537 additions and 20 deletions

View File

@ -677,7 +677,9 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
ii_log->add_info( |>>> Deserializing { lines( lt_items ) } objects| ).
ENDIF.
CREATE OBJECT lo_abap_language_vers.
CREATE OBJECT lo_abap_language_vers
EXPORTING
io_dot_abapgit = io_repo->get_dot_abapgit( ).
lo_folder_logic = zcl_abapgit_folder_logic=>get_instance( ).
LOOP AT lt_results ASSIGNING <ls_result>.

View File

@ -196,10 +196,12 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
DATA lo_abapgit_abap_language_vers TYPE REF TO zcl_abapgit_abap_language_vers.
DATA lv_text TYPE string.
CREATE OBJECT lo_abapgit_abap_language_vers.
IF lo_abapgit_abap_language_vers->is_import_allowed( io_repo = me
iv_package = ms_data-package ) = abap_false.
CREATE OBJECT lo_abapgit_abap_language_vers
EXPORTING
io_dot_abapgit = get_dot_abapgit( ).
IF lo_abapgit_abap_language_vers->is_import_allowed( ms_data-package ) = abap_false.
lv_text = |Repository cannot be imported. | &&
|ABAP Language Version of linked package is not compatible with repository settings.|.
zcx_abapgit_exception=>raise( iv_text = lv_text ).

View File

@ -5,8 +5,13 @@ CLASS zcl_abapgit_abap_language_vers DEFINITION
PUBLIC SECTION.
CONSTANTS c_any_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version VALUE '*'.
CONSTANTS c_feature_flag TYPE string VALUE 'ALAV'.
METHODS constructor
IMPORTING
!io_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit.
METHODS get_abap_language_vers_by_objt
IMPORTING
!iv_object_type TYPE trobjtype
@ -14,9 +19,12 @@ CLASS zcl_abapgit_abap_language_vers DEFINITION
RETURNING
VALUE(rv_allowed_abap_langu_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
METHODS get_repo_abap_language_version
RETURNING
VALUE(rv_abap_language_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
METHODS is_import_allowed
IMPORTING
!io_repo TYPE REF TO zif_abapgit_repo
!iv_package TYPE devclass
RETURNING
VALUE(rv_allowed) TYPE abap_bool.
@ -24,6 +32,17 @@ CLASS zcl_abapgit_abap_language_vers DEFINITION
PROTECTED SECTION.
PRIVATE SECTION.
DATA mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit.
" Depends on experimental feature flag and repo setting
DATA mv_has_abap_language_vers TYPE abap_bool.
METHODS get_default_abap_language_vers
IMPORTING
!iv_object_type TYPE trobjtype
RETURNING
VALUE(rv_abap_language_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
METHODS get_abap_language_vers_by_devc
IMPORTING
!iv_package TYPE devclass
@ -31,8 +50,6 @@ CLASS zcl_abapgit_abap_language_vers DEFINITION
VALUE(rv_abap_language_version) TYPE string.
METHODS get_abap_language_vers_by_repo
IMPORTING
!io_repo TYPE REF TO zif_abapgit_repo
RETURNING
VALUE(rv_abap_language_version) TYPE string.
@ -43,6 +60,25 @@ ENDCLASS.
CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
METHOD constructor.
DATA lo_settings TYPE REF TO zcl_abapgit_settings.
mo_dot_abapgit = io_dot_abapgit.
lo_settings = zcl_abapgit_persist_factory=>get_settings( )->read( ).
IF lo_settings->is_feature_enabled( c_feature_flag ) = abap_false.
mv_has_abap_language_vers = abap_false.
ELSEIF get_abap_language_vers_by_repo( ) = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
mv_has_abap_language_vers = abap_false.
ELSE.
mv_has_abap_language_vers = abap_true.
ENDIF.
ENDMETHOD.
METHOD get_abap_language_vers_by_devc.
DATA lv_class TYPE string.
@ -57,11 +93,17 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
RECEIVING
ro_instance = lo_abap_language_version_cfg.
CALL METHOD lo_abap_language_version_cfg->('IF_ABAP_LANGUAGE_VERSION_CFG~GET_PACKAGE_DEFAULT_VERSION')
EXPORTING
iv_package_name = iv_package
RECEIVING
rv_default_language_version = lv_abap_lang_version_devc.
" For non-existing packages, GET_PACKAGE_DEFAULT_VERSION returns "standard"
" but we want to return "undefined" in this case to allow any new packages
IF zcl_abapgit_factory=>get_sap_package( iv_package )->exists( ) = abap_true.
CALL METHOD lo_abap_language_version_cfg->('IF_ABAP_LANGUAGE_VERSION_CFG~GET_PACKAGE_DEFAULT_VERSION')
EXPORTING
iv_package_name = iv_package
RECEIVING
rv_default_language_version = lv_abap_lang_version_devc.
ELSE.
lv_abap_lang_version_devc = '-'.
ENDIF.
CASE lv_abap_lang_version_devc.
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-standard.
@ -85,6 +127,11 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
DATA lv_class TYPE string.
DATA lo_abap_language_version TYPE REF TO object.
IF mv_has_abap_language_vers = abap_false.
rv_allowed_abap_langu_version = c_any_abap_language_version.
RETURN. ">>>
ENDIF.
lv_class = 'CL_ABAP_LANGUAGE_VERSION'.
TRY.
@ -101,32 +148,75 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
rv_default_version = rv_allowed_abap_langu_version.
CATCH cx_root.
rv_allowed_abap_langu_version = zif_abapgit_aff_types_v1=>co_abap_language_version-standard.
"to do: here we need to differentiate between source code object and non-source code objects
rv_allowed_abap_langu_version = get_default_abap_language_vers( iv_object_type ).
ENDTRY.
ENDMETHOD.
METHOD get_abap_language_vers_by_repo.
rv_abap_language_version = io_repo->get_dot_abapgit( )->get_abap_language_version( ).
rv_abap_language_version = mo_dot_abapgit->get_abap_language_version( ).
IF rv_abap_language_version IS INITIAL.
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
ENDIF.
ENDMETHOD.
METHOD get_default_abap_language_vers.
IF zcl_abapgit_factory=>get_environment( )->is_sap_cloud_platform( ) = abap_true.
" On BTP, default to ABAP for Cloud Development
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_cloud-cloud_development.
ELSE.
" Differentiate between source code object and non-source code objects
CASE iv_object_type.
WHEN 'BDEF' OR 'CLAS' OR 'FUGR' OR 'FUGS' OR 'INTF' OR 'PROG' OR 'TYPE'.
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-standard.
WHEN OTHERS.
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version-standard.
ENDCASE.
ENDIF.
ENDMETHOD.
METHOD get_repo_abap_language_version.
DATA lv_abap_language_version TYPE string.
IF mv_has_abap_language_vers = abap_true.
lv_abap_language_version = mo_dot_abapgit->get_abap_language_version( ).
ENDIF.
CASE lv_abap_language_version.
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-standard.
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-standard.
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-key_user.
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-key_user.
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-cloud_development.
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-cloud_development.
WHEN OTHERS. " undefined or feature off
rv_abap_language_version = c_any_abap_language_version.
ENDCASE.
ENDMETHOD.
METHOD is_import_allowed.
CASE get_abap_language_vers_by_repo( io_repo ).
DATA lv_package_version TYPE string.
lv_package_version = get_abap_language_vers_by_devc( iv_package ).
CASE get_abap_language_vers_by_repo( ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
rv_allowed = abap_true.
WHEN OTHERS.
IF get_abap_language_vers_by_repo( io_repo ) = get_abap_language_vers_by_devc( iv_package ).
IF get_abap_language_vers_by_repo( ) = lv_package_version.
" allow packages that match repo setting
rv_allowed = abap_true.
ELSEIF
get_abap_language_vers_by_devc( iv_package ) = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined AND
get_abap_language_vers_by_repo( io_repo ) = zif_abapgit_dot_abapgit=>c_abap_language_version-standard.
ELSEIF lv_package_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
" always allow new packages
rv_allowed = abap_true.
ELSE.
rv_allowed = abap_false.

View File

@ -0,0 +1,416 @@
* Helper to toggle (cloud) enviroment
CLASS lcl_environment DEFINITION.
PUBLIC SECTION.
INTERFACES zif_abapgit_environment.
DATA mv_is_cloud TYPE abap_bool.
METHODS set_cloud
IMPORTING
iv_is_cloud TYPE abap_bool.
ENDCLASS.
CLASS lcl_environment IMPLEMENTATION.
METHOD set_cloud.
mv_is_cloud = iv_is_cloud.
ENDMETHOD.
METHOD zif_abapgit_environment~is_sap_cloud_platform.
rv_result = mv_is_cloud.
ENDMETHOD.
METHOD zif_abapgit_environment~compare_with_inactive.
ENDMETHOD.
METHOD zif_abapgit_environment~get_basis_release.
ENDMETHOD.
METHOD zif_abapgit_environment~get_system_language_filter.
ENDMETHOD.
METHOD zif_abapgit_environment~is_merged.
ENDMETHOD.
METHOD zif_abapgit_environment~is_repo_object_changes_allowed.
ENDMETHOD.
METHOD zif_abapgit_environment~is_restart_required.
ENDMETHOD.
METHOD zif_abapgit_environment~is_sap_object_allowed.
ENDMETHOD.
METHOD zif_abapgit_environment~is_variant_maintenance.
ENDMETHOD.
ENDCLASS.
* Helper to toggle experimental features
CLASS lcl_persist_settings DEFINITION.
PUBLIC SECTION.
INTERFACES zif_abapgit_persist_settings.
DATA mo_settings TYPE REF TO zcl_abapgit_settings.
METHODS constructor.
ENDCLASS.
CLASS lcl_persist_settings IMPLEMENTATION.
METHOD constructor.
CREATE OBJECT mo_settings.
ENDMETHOD.
METHOD zif_abapgit_persist_settings~modify.
ENDMETHOD.
METHOD zif_abapgit_persist_settings~read.
ro_settings = mo_settings.
ENDMETHOD.
ENDCLASS.
* Test cases
CLASS ltcl_abap_language_version DEFINITION FOR TESTING RISK LEVEL HARMLESS
DURATION SHORT FINAL.
PRIVATE SECTION.
" Cloud package hardcoded in cl_abap_language_version
CONSTANTS c_cloud_package TYPE devclass VALUE 'TEST_LANGUAGE_VERSION_SCP'.
DATA:
mt_versions TYPE string_table,
mo_environment TYPE REF TO lcl_environment,
mi_persistency TYPE REF TO zif_abapgit_persist_settings,
mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit,
mo_cut TYPE REF TO zcl_abapgit_abap_language_vers.
METHODS:
setup,
init
IMPORTING
iv_abap_language_version TYPE string,
set_environment
IMPORTING
iv_is_cloud TYPE abap_bool,
set_features
IMPORTING
iv_features TYPE string,
repo_setting_test
IMPORTING
iv_version TYPE string
iv_exp TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version,
object_type_test
IMPORTING
iv_version TYPE string
iv_standard TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version
iv_standard_src TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version
iv_cloud TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version
iv_cloud_src TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version,
is_import_allowed_test
IMPORTING
iv_version TYPE string
iv_standard TYPE abap_bool
iv_cloud TYPE abap_bool
iv_new TYPE abap_bool.
METHODS:
repo_setting_feature_off FOR TESTING,
repo_setting_feature_on FOR TESTING,
object_type_feature_off FOR TESTING,
object_type_feature_on FOR TESTING,
is_import_allowed FOR TESTING.
ENDCLASS.
CLASS ltcl_abap_language_version IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_environment.
zcl_abapgit_injector=>set_environment( mo_environment ).
CREATE OBJECT mi_persistency TYPE lcl_persist_settings.
zcl_abapgit_persist_injector=>set_settings( mi_persistency ).
APPEND zif_abapgit_dot_abapgit=>c_abap_language_version-undefined TO mt_versions.
APPEND zif_abapgit_dot_abapgit=>c_abap_language_version-standard TO mt_versions.
APPEND zif_abapgit_dot_abapgit=>c_abap_language_version-key_user TO mt_versions.
APPEND zif_abapgit_dot_abapgit=>c_abap_language_version-cloud_development TO mt_versions.
ENDMETHOD.
METHOD init.
mo_dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( ).
mo_dot_abapgit->set_abap_language_version( iv_abap_language_version ).
CREATE OBJECT mo_cut
EXPORTING
io_dot_abapgit = mo_dot_abapgit.
ENDMETHOD.
METHOD set_environment.
mo_environment->set_cloud( iv_is_cloud ).
ENDMETHOD.
METHOD set_features.
mi_persistency->read( )->set_experimental_features( iv_features ).
ENDMETHOD.
METHOD repo_setting_test.
init( iv_version ).
" Assume on-prem (no cloud)
set_environment( abap_false ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_repo_abap_language_version( )
exp = iv_exp
msg = |ABAP Language Version: { iv_version }, On-prem| ).
" Assume cloud platform
set_environment( abap_true ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_repo_abap_language_version( )
exp = iv_exp
msg = |ABAP Language Version: { iv_version }, Cloud| ).
ENDMETHOD.
METHOD repo_setting_feature_off.
DATA lv_version TYPE string.
" If experimental feature is off, repo setting is not taken into consideration
set_features( '' ).
LOOP AT mt_versions INTO lv_version.
repo_setting_test(
iv_version = lv_version
iv_exp = zcl_abapgit_abap_language_vers=>c_any_abap_language_version ).
ENDLOOP.
ENDMETHOD.
METHOD repo_setting_feature_on.
DATA lv_version TYPE string.
" If experimental feature is on, repo setting is returned
set_features( zcl_abapgit_abap_language_vers=>c_feature_flag ).
LOOP AT mt_versions INTO lv_version.
CASE lv_version.
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
repo_setting_test(
iv_version = lv_version
iv_exp = zcl_abapgit_abap_language_vers=>c_any_abap_language_version ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-standard.
repo_setting_test(
iv_version = lv_version
iv_exp = zif_abapgit_aff_types_v1=>co_abap_language_version_src-standard ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-key_user.
repo_setting_test(
iv_version = lv_version
iv_exp = zif_abapgit_aff_types_v1=>co_abap_language_version_src-key_user ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-cloud_development.
repo_setting_test(
iv_version = lv_version
iv_exp = zif_abapgit_aff_types_v1=>co_abap_language_version_src-cloud_development ).
ENDCASE.
ENDLOOP.
ENDMETHOD.
METHOD object_type_test.
init( iv_version ).
" Assume on-prem (no cloud)
set_environment( abap_false ).
" source code
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_abap_language_vers_by_objt(
iv_object_type = 'INTF'
iv_package = '$TMP' )
exp = iv_standard_src
msg = |ABAP Language Version: { iv_version }, On-prem| ).
" non-source code
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_abap_language_vers_by_objt(
iv_object_type = 'TABL'
iv_package = '$TMP' )
exp = iv_standard
msg = |ABAP Language Version: { iv_version }, On-prem| ).
" Assume cloud platform
set_environment( abap_true ).
" source code
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_abap_language_vers_by_objt(
iv_object_type = 'INTF'
iv_package = c_cloud_package )
exp = iv_cloud_src
msg = |ABAP Language Version: { iv_version }, Cloud| ).
" non-source code
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_abap_language_vers_by_objt(
iv_object_type = 'TABL'
iv_package = c_cloud_package )
exp = iv_cloud
msg = |ABAP Language Version: { iv_version }, Cloud| ).
ENDMETHOD.
METHOD object_type_feature_off.
DATA lv_version TYPE string.
" If experimental feature is off, repo setting is ignored
set_features( '' ).
LOOP AT mt_versions INTO lv_version.
object_type_test(
iv_version = lv_version
iv_standard = zcl_abapgit_abap_language_vers=>c_any_abap_language_version
iv_standard_src = zcl_abapgit_abap_language_vers=>c_any_abap_language_version
iv_cloud = zcl_abapgit_abap_language_vers=>c_any_abap_language_version
iv_cloud_src = zcl_abapgit_abap_language_vers=>c_any_abap_language_version ).
ENDLOOP.
ENDMETHOD.
METHOD object_type_feature_on.
DATA lv_version TYPE string.
" If experimental feature is on, repo setting is ignored but package setting is returned
set_features( zcl_abapgit_abap_language_vers=>c_feature_flag ).
LOOP AT mt_versions INTO lv_version.
CASE lv_version.
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
object_type_test(
iv_version = lv_version
iv_standard = zcl_abapgit_abap_language_vers=>c_any_abap_language_version
iv_standard_src = zcl_abapgit_abap_language_vers=>c_any_abap_language_version
iv_cloud = zcl_abapgit_abap_language_vers=>c_any_abap_language_version
iv_cloud_src = zcl_abapgit_abap_language_vers=>c_any_abap_language_version ).
WHEN OTHERS.
object_type_test(
iv_version = lv_version
iv_standard = zif_abapgit_aff_types_v1=>co_abap_language_version-standard
iv_standard_src = zif_abapgit_aff_types_v1=>co_abap_language_version_src-standard
iv_cloud = zif_abapgit_aff_types_v1=>co_abap_language_version-cloud_development
iv_cloud_src = zif_abapgit_aff_types_v1=>co_abap_language_version_src-cloud_development ).
ENDCASE.
ENDLOOP.
ENDMETHOD.
METHOD is_import_allowed_test.
init( iv_version ).
" Assume on-prem (no cloud)
set_environment( abap_false ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
exp = iv_standard ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( c_cloud_package ) " existing cloud package
exp = iv_cloud ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( 'Z_FOO_BAR' ) " non-existing package
exp = iv_new ).
" Assume cloud platform
set_environment( abap_true ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
exp = iv_standard ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( c_cloud_package ) " existing cloud package
exp = iv_cloud ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( 'Z_FOO_BAR' ) " non-existing package
exp = iv_new ).
ENDMETHOD.
METHOD is_import_allowed.
DATA lv_version TYPE string.
LOOP AT mt_versions INTO lv_version.
CASE lv_version.
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
is_import_allowed_test(
iv_version = lv_version
iv_standard = abap_true
iv_cloud = abap_true
iv_new = abap_true ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-standard.
is_import_allowed_test(
iv_version = lv_version
iv_standard = abap_true
iv_cloud = abap_false
iv_new = abap_true ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-key_user.
is_import_allowed_test(
iv_version = lv_version
iv_standard = abap_false
iv_cloud = abap_false
iv_new = abap_true ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-cloud_development.
is_import_allowed_test(
iv_version = lv_version
iv_standard = abap_false
iv_cloud = abap_true
iv_new = abap_true ).
ENDCASE.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>

View File

@ -188,6 +188,12 @@
{"object": "ZCL_ABAPGIT_OBJECTS", "class": "ltcl_check_objects_locked", "method": "throw_excp_if_object_is_locked", "note": "no such table: seometarel"},
{"object": "ZCL_ABAPGIT_OBJECTS", "class": "ltcl_check_objects_locked", "method": "no_excp_if_obj_is_not_locked", "note": "no such table: seometarel"},
{"object": "ZCL_ABAPGIT_ABAP_LANGUAGE_VERS", "class": "ltcl_abap_language_version", "method": "repo_setting_feature_off", "note": "CL_ABAP_LANGUAGE_VERSION/_CFG"},
{"object": "ZCL_ABAPGIT_ABAP_LANGUAGE_VERS", "class": "ltcl_abap_language_version", "method": "repo_setting_feature_on", "note": "CL_ABAP_LANGUAGE_VERSION/_CFG"},
{"object": "ZCL_ABAPGIT_ABAP_LANGUAGE_VERS", "class": "ltcl_abap_language_version", "method": "object_type_feature_off", "note": "CL_ABAP_LANGUAGE_VERSION/_CFG"},
{"object": "ZCL_ABAPGIT_ABAP_LANGUAGE_VERS", "class": "ltcl_abap_language_version", "method": "object_type_feature_on", "note": "CL_ABAP_LANGUAGE_VERSION/_CFG"},
{"object": "ZCL_ABAPGIT_ABAP_LANGUAGE_VERS", "class": "ltcl_abap_language_version", "method": "is_import_allowed", "note": "CL_ABAP_LANGUAGE_VERSION/_CFG"},
{"object": "ZCL_ABAPGIT_SERVICES_BASIS", "class": "ltcl_create_package", "method": "raise_error_if_package_exists", "note": "Void type: SCOMPKDTLN"},
{"object": "ZCL_ABAPGIT_SERVICES_BASIS", "class": "ltcl_create_package", "method": "package_given_in_popup", "note": "Void type: SCOMPKDTLN"},
{"object": "ZCL_ABAPGIT_SERVICES_BASIS", "class": "ltcl_create_package", "method": "package_not_created_when_canc", "note": "Void type: SCOMPKDTLN"},