From 4bf6e072355eefe60ca3f01340a48df7905643c8 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Sat, 8 Jun 2024 21:01:38 +0200 Subject: [PATCH] Small performance improvement in folder logic (#6941) --- .../core/zcl_abapgit_folder_logic.clas.abap | 28 ++++ ..._abapgit_folder_logic.clas.locals_imp.abap | 138 ++++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 src/objects/core/zcl_abapgit_folder_logic.clas.locals_imp.abap diff --git a/src/objects/core/zcl_abapgit_folder_logic.clas.abap b/src/objects/core/zcl_abapgit_folder_logic.clas.abap index 25f5b3a23..1751e3b75 100644 --- a/src/objects/core/zcl_abapgit_folder_logic.clas.abap +++ b/src/objects/core/zcl_abapgit_folder_logic.clas.abap @@ -95,6 +95,14 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION. lv_parentcl TYPE tdevc-parentcl, lv_folder_logic TYPE string. + rv_path = lcl_package_to_path=>get( + iv_top = iv_top + io_dot = io_dot + iv_package = iv_package ). + IF rv_path IS NOT INITIAL. + RETURN. + ENDIF. + IF iv_top = iv_package. rv_path = io_dot->get_starting_folder( ). ELSE. @@ -163,6 +171,12 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION. ENDIF. ENDIF. + lcl_package_to_path=>add( + iv_top = iv_top + io_dot = io_dot + iv_package = iv_package + iv_path = rv_path ). + ENDMETHOD. @@ -183,6 +197,14 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION. RETURN. ENDIF. + rv_package = lcl_path_to_package=>get( + iv_top = iv_top + io_dot = io_dot + iv_path = iv_path ). + IF rv_package IS NOT INITIAL. + RETURN. + ENDIF. + lv_path = iv_path+lv_length. lv_parent = iv_top. rv_package = iv_top. @@ -245,5 +267,11 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION. lv_parent = rv_package. ENDWHILE. + lcl_path_to_package=>add( + iv_top = iv_top + io_dot = io_dot + iv_path = iv_path + iv_package = rv_package ). + ENDMETHOD. ENDCLASS. diff --git a/src/objects/core/zcl_abapgit_folder_logic.clas.locals_imp.abap b/src/objects/core/zcl_abapgit_folder_logic.clas.locals_imp.abap new file mode 100644 index 000000000..8badb840c --- /dev/null +++ b/src/objects/core/zcl_abapgit_folder_logic.clas.locals_imp.abap @@ -0,0 +1,138 @@ +CLASS lcl_package_to_path DEFINITION. + + PUBLIC SECTION. + + CLASS-METHODS get + IMPORTING + !iv_top TYPE devclass + !io_dot TYPE REF TO zcl_abapgit_dot_abapgit + !iv_package TYPE devclass + RETURNING + VALUE(rv_path) TYPE string. + + CLASS-METHODS add + IMPORTING + !iv_top TYPE devclass + !io_dot TYPE REF TO zcl_abapgit_dot_abapgit + !iv_package TYPE devclass + !iv_path TYPE string. + + PRIVATE SECTION. + + TYPES: + BEGIN OF ty_buffer, + top TYPE devclass, + starting_folder TYPE string, + folder_logic TYPE string, + package TYPE devclass, + path TYPE string, + END OF ty_buffer. + + CLASS-DATA gt_buffer + TYPE HASHED TABLE OF ty_buffer + WITH UNIQUE KEY top starting_folder folder_logic package. + +ENDCLASS. + +CLASS lcl_package_to_path IMPLEMENTATION. + + METHOD get. + + FIELD-SYMBOLS LIKE LINE OF gt_buffer. + + READ TABLE gt_buffer ASSIGNING WITH TABLE KEY + top = iv_top + starting_folder = io_dot->get_starting_folder( ) + folder_logic = io_dot->get_folder_logic( ) + package = iv_package. + IF sy-subrc = 0. + rv_path = -path. + ENDIF. + + ENDMETHOD. + + METHOD add. + + DATA ls_buffer LIKE LINE OF gt_buffer. + + CLEAR ls_buffer. + ls_buffer-top = iv_top. + ls_buffer-starting_folder = io_dot->get_starting_folder( ). + ls_buffer-folder_logic = io_dot->get_folder_logic( ). + ls_buffer-package = iv_package. + ls_buffer-path = iv_path. + INSERT ls_buffer INTO TABLE gt_buffer. + + ENDMETHOD. + +ENDCLASS. + +CLASS lcl_path_to_package DEFINITION. + + PUBLIC SECTION. + + CLASS-METHODS get + IMPORTING + !iv_top TYPE devclass + !io_dot TYPE REF TO zcl_abapgit_dot_abapgit + !iv_path TYPE string + RETURNING + VALUE(rv_package) TYPE devclass. + + CLASS-METHODS add + IMPORTING + !iv_top TYPE devclass + !io_dot TYPE REF TO zcl_abapgit_dot_abapgit + !iv_path TYPE string + !iv_package TYPE devclass. + + PRIVATE SECTION. + + TYPES: + BEGIN OF ty_buffer, + top TYPE devclass, + starting_folder TYPE string, + folder_logic TYPE string, + path TYPE string, + package TYPE devclass, + END OF ty_buffer. + + CLASS-DATA gt_buffer + TYPE HASHED TABLE OF ty_buffer + WITH UNIQUE KEY top starting_folder folder_logic path. + +ENDCLASS. + +CLASS lcl_path_to_package IMPLEMENTATION. + + METHOD get. + + FIELD-SYMBOLS LIKE LINE OF gt_buffer. + + READ TABLE gt_buffer ASSIGNING WITH TABLE KEY + top = iv_top + starting_folder = io_dot->get_starting_folder( ) + folder_logic = io_dot->get_folder_logic( ) + path = iv_path. + IF sy-subrc = 0. + rv_package = -package. + RETURN. + ENDIF. + + ENDMETHOD. + + METHOD add. + + DATA ls_buffer LIKE LINE OF gt_buffer. + + CLEAR ls_buffer. + ls_buffer-top = iv_top. + ls_buffer-starting_folder = io_dot->get_starting_folder( ). + ls_buffer-folder_logic = io_dot->get_folder_logic( ). + ls_buffer-path = iv_path. + ls_buffer-package = iv_package. + INSERT ls_buffer INTO TABLE gt_buffer. + + ENDMETHOD. + +ENDCLASS.