├── src
├── parl
│ ├── zadcoset_parallel.fugr.lzadcoset_paralleltop.abap
│ ├── zif_adcoset_parl_result_recv.intf.abap
│ ├── package.devc.xml
│ ├── zadcoset_parallel.fugr.lzadcoset_paralleltop.xml
│ ├── zadcoset_parallel.fugr.saplzadcoset_parallel.xml
│ ├── zcl_adcoset_parl_task_runner.clas.xml
│ ├── zif_adcoset_parl_result_recv.intf.xml
│ ├── zif_adcoset_parl_task_runner.intf.abap
│ ├── zadcoset_parallel.fugr.saplzadcoset_parallel.abap
│ ├── zcl_adcoset_parl_proc_utils.clas.xml
│ ├── zif_adcoset_parl_task_runner.intf.xml
│ ├── zadcoset_parallel.fugr.zadcoset_new_task.abap
│ └── zadcoset_parallel.fugr.xml
├── zif_adcoset_version.intf.abap
├── package.devc.xml
├── adt
│ ├── package.devc.xml
│ ├── zadcoset_search_scope.xslt.xml
│ ├── zadcoset_search_result.xslt.xml
│ ├── zadcoset_adt_obj_ref.xslt.xml
│ ├── zadcoset_search_settings.xslt.xml
│ ├── zadcoset_adt_plugin_features.xslt.xml
│ ├── zadcoset_search_scope_params.xslt.xml
│ ├── zif_adcoset_ty_adt_types.intf.xml
│ ├── zcl_adcoset_adt_disc_app.clas.xml
│ ├── zcl_adcoset_adt_obj_factory.clas.xml
│ ├── zcl_adcoset_adt_res_search.clas.xml
│ ├── zcl_adcoset_adt_res_features.clas.xml
│ ├── zcl_adcoset_adt_res_trreq_vh.clas.xml
│ ├── zcl_adcoset_adt_res_cs_scope.clas.xml
│ ├── zcl_adcoset_res_server_grp_vh.clas.xml
│ ├── zcl_adcoset_adt_res_swcomp_vh.clas.xml
│ ├── zcl_adcoset_adt_res_trtype_vh.clas.xml
│ ├── zcl_adcoset_adt_res_applc_vh.clas.xml
│ ├── zcl_adcoset_adt_res_pattrnval.clas.xml
│ ├── zcl_adcoset_adt_res_cs_config.clas.xml
│ ├── zcl_adcoset_adt_res_search.clas.abap
│ ├── zcx_adcoset_adt_rest.clas.xml
│ ├── zadcoset_search_scope.xslt.source.xml
│ ├── zadcoset_search_scope_params.xslt.source.xml
│ ├── zcl_adcoset_adt_res_swcomp_vh.clas.abap
│ ├── zcl_adcoset_res_server_grp_vh.clas.abap
│ ├── zcl_adcoset_adt_res_trtype_vh.clas.abap
│ ├── zadcoset_search_settings.xslt.source.xml
│ ├── zif_adcoset_adt_obj_factory.intf.xml
│ ├── zcl_adcoset_adt_res_applc_vh.clas.abap
│ ├── zcl_adcoset_adt_request_util.clas.xml
│ ├── zcl_adcoset_adt_ch_factory.clas.xml
│ ├── zif_adcoset_adt_obj_factory.intf.abap
│ ├── zadcoset_adt_plugin_features.xslt.source.xml
│ ├── zcx_adcoset_adt_rest.clas.abap
│ ├── zcl_adcoset_adt_ch_factory.clas.abap
│ ├── zcl_adcoset_adt_res_cs_config.clas.abap
│ └── zadcoset_adt_obj_ref.xslt.source.xml
├── zcx_adcoset_no_matcher.clas.abap
├── zcx_adcoset_no_provider.clas.abap
├── zcx_adcoset_src_code_read.clas.abap
├── zcx_adcoset_pattern_sh_error.clas.abap
├── zcx_adcoset_no_src_code_reader.clas.abap
├── zif_adcoset_src_code_searcher.intf.abap
├── zif_adcoset_search_query.intf.abap
├── zadcoset_i_searchabletable.ddls.xml
├── zadcoset_i_sourcecodeobject.ddls.xml
├── zadcoset_i_transportsrccodobj.ddls.xml
├── zif_adcoset_src_code_reader.intf.abap
├── zif_adcoset_version.intf.xml
├── zcl_adcoset_pcre_matcher.clas.xml
├── zcl_adcoset_source_code.clas.xml
├── zif_adcoset_c_pattern_matching.intf.xml
├── zif_adcoset_source_code.intf.xml
├── zcl_adcoset_api_state_util.clas.xml
├── zcl_adcoset_scr_ddls.clas.xml
├── zcl_adcoset_scs_base.clas.xml
├── zcl_adcoset_scs_standard.clas.xml
├── zcl_adcoset_search_query.clas.xml
├── zcl_adcoset_search_scope.clas.xml
├── zcl_adcoset_csp_prog.clas.xml
├── zcl_adcoset_scr_dcls.clas.xml
├── zcl_adcoset_scr_ddlx.clas.xml
├── zcl_adcoset_scr_srvd.clas.xml
├── zcl_adcoset_scs_sequential.clas.xml
├── zcl_adcoset_csp_tabl.clas.xml
├── zcl_adcoset_scr_tabl.clas.xml
├── zcl_adcoset_search_scope_base.clas.xml
├── zcl_adcoset_scr_reposrc.clas.xml
├── zcl_adcoset_tr_obj_processor.clas.xml
├── zcl_adcoset_search_scope_final.clas.xml
├── zif_adcoset_code_search_prov.intf.abap
├── zcl_adcoset_parl_search_query.clas.xml
├── zcl_adcoset_posix_regex_matchr.clas.xml
├── zcx_adcoset_no_matcher.clas.xml
├── zcl_adcoset_substring_matcher.clas.xml
├── zcx_adcoset_no_provider.clas.xml
├── zcx_adcoset_src_code_read.clas.xml
├── zcx_adcoset_pattern_sh_error.clas.xml
├── zcx_adcoset_no_src_code_reader.clas.xml
├── zcl_adcoset_scs_sequ_extended.clas.xml
├── zif_adcoset_source_code.intf.abap
├── zif_adcoset_src_code_searcher.intf.xml
├── zif_adcoset_code_search_prov.intf.xml
├── zif_adcoset_src_code_reader.intf.xml
├── zcl_adcoset_csp_factory.clas.xml
├── zcl_adcoset_scs_factory.clas.xml
├── zcl_adcoset_csp_clas.clas.xml
├── zcl_adcoset_search_query_fac.clas.xml
├── zcl_adcoset_message_util.clas.xml
├── zcl_adcoset_scr_factory.clas.xml
├── zcl_adcoset_csp_fugr.clas.xml
├── zadcoset_scope_type.dtel.xml
├── zcl_adcoset_search_settings.clas.xml
├── zcx_adcoset_static_error.clas.xml
├── zcl_adcoset_csp_strsrc_default.clas.xml
├── zcl_adcoset_csp_repsrc_default.clas.xml
├── zcl_adcoset_pattern_util.clas.xml
├── zif_adcoset_search_query.intf.xml
├── zadcoset_scope_type.doma.xml
├── zcl_adcoset_matcher_factory.clas.xml
├── zadcoset_i_searchabletable.ddls.asddls
├── zcl_adcoset_search_scope_fac.clas.xml
├── zcl_adcoset_search_scope_final.clas.abap
├── zcl_adcoset_extensions_util.clas.xml
├── zcl_adcoset_pcre_util.clas.xml
├── zcl_adcoset_csp_strsrc_default.clas.abap
├── zcl_adcoset_search_scope_tr.clas.xml
├── zcl_adcoset_search_engine.clas.xml
├── zcl_adcoset_search_settings.clas.abap
├── zcl_adcoset_cds_name_mapper.clas.xml
├── zif_adcoset_pattern_matcher.intf.xml
├── zcl_adcoset_string_util.clas.xml
├── zcl_adcoset_message_util.clas.abap
├── zcl_adcoset_log.clas.xml
├── zif_adcoset_c_pattern_matching.intf.abap
├── zcl_adcoset_devc_reader.clas.xml
├── zcl_adcoset_source_code.clas.abap
├── zif_adcoset_pattern_matcher.intf.abap
├── zif_adcoset_search_scope.intf.abap
├── zcl_adcoset_pcre_util.clas.abap
├── zif_adcoset_search_scope.intf.xml
├── zcl_adcoset_search_scope_tr.clas.testclasses.abap
├── zadcoset_i_sourcecodeobject.ddls.asddls
├── zif_adcoset_c_global.intf.xml
├── zcx_adcoset_static_error.clas.abap
├── zcl_adcoset_search_scope_fac.clas.abap
├── zcl_adcoset_scs_factory.clas.abap
├── zadcoset_csscope.tabl.xml
├── zcl_adcoset_scr_reposrc.clas.abap
├── zcl_adcoset_scs_standard.clas.abap
├── zcl_adcoset_csp_repsrc_default.clas.abap
├── zcl_adcoset_search_protocol.clas.xml
├── zcl_adcoset_scr_dcls.clas.abap
├── zadcoset_csset.tabl.xml
├── zcl_adcoset_scr_srvd.clas.abap
├── zcl_adcoset_scr_ddlx.clas.abap
├── zcl_adcoset_log.clas.abap
├── zcl_adcoset_substring_matcher.clas.abap
├── zcl_adcoset_parl_search_query.clas.abap
├── zcl_adcoset_scr_ddls.clas.abap
├── zcl_adcoset_search_query_fac.clas.abap
├── zif_adcoset_ty_global.intf.xml
├── zcl_adcoset_matcher_factory.clas.abap
├── zcl_adcoset_string_util.clas.abap
├── zcl_adcoset_search_protocol.clas.abap
├── zadcoset_i_transportsrccodobj.ddls.asddls
├── zcl_adcoset_cds_name_mapper.clas.abap
├── zcl_adcoset_api_state_util.clas.abap
├── zcl_adcoset_devc_reader.clas.abap
└── zcl_adcoset_extensions_util.clas.abap
├── SECURITY.md
├── package.json
├── .abapgit.xml
├── LICENSE
├── changelog.txt
├── .github
└── workflows
│ └── stale.yml
└── README.md
/src/parl/zadcoset_parallel.fugr.lzadcoset_paralleltop.abap:
--------------------------------------------------------------------------------
1 | FUNCTION-POOL zadcoset_parallel. " MESSAGE-ID ..
2 |
3 | " INCLUDE LZADCOSET_PARALLELD... " Local class definition
4 |
--------------------------------------------------------------------------------
/src/zif_adcoset_version.intf.abap:
--------------------------------------------------------------------------------
1 | "!
Version info of ABAP Code Search Tools
2 | INTERFACE zif_adcoset_version
3 | PUBLIC.
4 | CONSTANTS version TYPE string VALUE '1.7.0'.
5 | ENDINTERFACE.
6 |
--------------------------------------------------------------------------------
/src/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Advanced code search
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/parl/zif_adcoset_parl_result_recv.intf.abap:
--------------------------------------------------------------------------------
1 | "! Receives results from parallel tasks
2 | INTERFACE zif_adcoset_parl_result_recv
3 | PUBLIC.
4 |
5 | "! Will be called when task is finished
6 | METHODS send_results
7 | IMPORTING
8 | !results TYPE any.
9 | ENDINTERFACE.
10 |
--------------------------------------------------------------------------------
/src/parl/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Parallel processing
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/adt/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ADT endpoints for code search
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_no_matcher.clas.abap:
--------------------------------------------------------------------------------
1 | "! No valid pattern matcher found
2 | CLASS zcx_adcoset_no_matcher DEFINITION
3 | PUBLIC
4 | INHERITING FROM zcx_adcoset_static_error FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 |
9 | PROTECTED SECTION.
10 |
11 | PRIVATE SECTION.
12 | ENDCLASS.
13 |
14 |
15 | CLASS zcx_adcoset_no_matcher IMPLEMENTATION.
16 | ENDCLASS.
17 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_no_provider.clas.abap:
--------------------------------------------------------------------------------
1 | "! No valid search provider found
2 | CLASS zcx_adcoset_no_provider DEFINITION
3 | PUBLIC
4 | INHERITING FROM zcx_adcoset_static_error FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 |
9 | PROTECTED SECTION.
10 |
11 | PRIVATE SECTION.
12 | ENDCLASS.
13 |
14 |
15 | CLASS zcx_adcoset_no_provider IMPLEMENTATION.
16 | ENDCLASS.
17 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_src_code_read.clas.abap:
--------------------------------------------------------------------------------
1 | "! Source code could not be read
2 | CLASS zcx_adcoset_src_code_read DEFINITION
3 | PUBLIC
4 | INHERITING FROM zcx_adcoset_static_error FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 |
9 | PROTECTED SECTION.
10 |
11 | PRIVATE SECTION.
12 | ENDCLASS.
13 |
14 |
15 | CLASS zcx_adcoset_src_code_read IMPLEMENTATION.
16 | ENDCLASS.
17 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_pattern_sh_error.clas.abap:
--------------------------------------------------------------------------------
1 | "! Error during pattern search
2 | CLASS zcx_adcoset_pattern_sh_error DEFINITION
3 | PUBLIC
4 | INHERITING FROM zcx_adcoset_static_error FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 |
9 | PROTECTED SECTION.
10 |
11 | PRIVATE SECTION.
12 | ENDCLASS.
13 |
14 |
15 | CLASS zcx_adcoset_pattern_sh_error IMPLEMENTATION.
16 | ENDCLASS.
17 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_no_src_code_reader.clas.abap:
--------------------------------------------------------------------------------
1 | "! No valid source code reader found
2 | CLASS zcx_adcoset_no_src_code_reader DEFINITION
3 | PUBLIC
4 | INHERITING FROM zcx_adcoset_static_error FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 |
9 | PROTECTED SECTION.
10 |
11 | PRIVATE SECTION.
12 | ENDCLASS.
13 |
14 |
15 | CLASS zcx_adcoset_no_src_code_reader IMPLEMENTATION.
16 | ENDCLASS.
17 |
--------------------------------------------------------------------------------
/src/zif_adcoset_src_code_searcher.intf.abap:
--------------------------------------------------------------------------------
1 | "! Searches source code
2 | INTERFACE zif_adcoset_src_code_searcher
3 | PUBLIC.
4 |
5 | "! Searches the given source code
6 | METHODS search
7 | IMPORTING
8 | source_code TYPE REF TO zif_adcoset_source_code
9 | RETURNING
10 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_search_matches.
11 | ENDINTERFACE.
12 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_search_scope.xslt.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_SEARCH_SCOPE
7 | E
8 | Search Scope
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/zif_adcoset_search_query.intf.abap:
--------------------------------------------------------------------------------
1 | "! Search query for code search
2 | INTERFACE zif_adcoset_search_query
3 | PUBLIC.
4 |
5 | "! Runs search query
6 | METHODS run.
7 |
8 | "! Retrieve search results
9 | METHODS get_results
10 | RETURNING
11 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_search_result_objects.
12 | ENDINTERFACE.
13 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_search_result.xslt.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_SEARCH_RESULT
7 | E
8 | Code search result
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_adt_obj_ref.xslt.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_ADT_OBJ_REF
7 | E
8 | Transformation for ADT Object Info
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_search_settings.xslt.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_SEARCH_SETTINGS
7 | E
8 | Settings for Code Search
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_adt_plugin_features.xslt.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_ADT_PLUGIN_FEATURES
7 | E
8 | Features of ADT plugins
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_search_scope_params.xslt.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_SEARCH_SCOPE_PARAMS
7 | E
8 | Search Scope Parameters
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/zadcoset_i_searchabletable.ddls.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_I_SEARCHABLETABLE
7 | E
8 | Searchable Table
9 | V
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/zadcoset_i_sourcecodeobject.ddls.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_I_SOURCECODEOBJECT
7 | E
8 | Repository object for code search
9 | V
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/parl/zadcoset_parallel.fugr.lzadcoset_paralleltop.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | LZADCOSET_PARALLELTOP
7 | S
8 | D$
9 | I
10 | S
11 | X
12 | D$S
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zadcoset_i_transportsrccodobj.ddls.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_I_TRANSPORTSRCCODOBJ
7 | E
8 | Rep. obj. of Tr. Request for Code Search
9 | V
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/parl/zadcoset_parallel.fugr.saplzadcoset_parallel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | SAPLZADCOSET_PARALLEL
7 | S
8 | D$
9 | F
10 | S
11 | E
12 | X
13 | D$S
14 | X
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/zif_adcoset_src_code_reader.intf.abap:
--------------------------------------------------------------------------------
1 | "! Reader for code sources
2 | INTERFACE zif_adcoset_src_code_reader
3 | PUBLIC.
4 |
5 | "! Retrieves source code instance of object via name
6 | METHODS get_source_code
7 | IMPORTING
8 | !name TYPE sobj_name
9 | !type TYPE trobjtype OPTIONAL
10 | RETURNING
11 | VALUE(result) TYPE REF TO zif_adcoset_source_code
12 | RAISING
13 | zcx_adcoset_src_code_read.
14 |
15 | ENDINTERFACE.
16 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | We release patches and security updates only for the latest version of abap-code-search-tools.
6 | Please make sure you are using the most recent release.
7 |
8 | | Version | Supported |
9 | |-----------|-----------|
10 | | Latest | ✅ |
11 | | Older | ❌ |
12 |
13 | ## Reporting a Vulnerability
14 |
15 | To report a security issue please use the GitHub Security Advisory [Report a vulnerability](https://github.com/DevEpos/abap-code-search-tools/security/advisories/new) tab
16 |
--------------------------------------------------------------------------------
/src/adt/zif_adcoset_ty_adt_types.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_TY_ADT_TYPES
7 | E
8 | Types for ADT resources
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/zif_adcoset_version.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_VERSION
7 | E
8 | Version info of ABAP Code Search Tools
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_pcre_matcher.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_PCRE_MATCHER
7 | E
8 | Matcher for PCRE
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_source_code.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SOURCE_CODE
7 | E
8 | Represents source code
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zif_adcoset_c_pattern_matching.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_C_PATTERN_MATCHING
7 | E
8 | Constants for pattern matching
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/zif_adcoset_source_code.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_SOURCE_CODE
7 | E
8 | Represents the source code of an object/include
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_api_state_util.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_API_STATE_UTIL
7 | E
8 | Util for API State
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_ddls.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCR_DDLS
7 | E
8 | Source code reader for CDS view
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scs_base.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCS_BASE
7 | E
8 | Base class for source code searcher
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scs_standard.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCS_STANDARD
7 | E
8 | Standard Source Code Searcher
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_query.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_QUERY
7 | E
8 | Search query for code search
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_scope.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_SCOPE
7 | E
8 | Search scope implementation
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_disc_app.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_DISC_APP
7 | E
8 | Router for ABAP Code Search
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_obj_factory.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_OBJ_FACTORY
7 | E
8 | Factory for ADT links
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_search.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_RES_SEARCH
7 | E
8 | Resource for code search
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_csp_prog.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_CSP_PROG
7 | E
8 | Code Search Provider for Programs/Includes
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_dcls.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCR_DCLS
7 | E
8 | Source code reader for CDS Access Controls
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_ddlx.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCR_DDLX
7 | E
8 | Source code reader for metadata extensions
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_srvd.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCR_SRVD
7 | E
8 | Source code reader for Service Definition
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scs_sequential.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCS_SEQUENTIAL
7 | E
8 | Sequential Source Code Searcher
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_features.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_RES_FEATURES
7 | E
8 | Provides available features
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_csp_tabl.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_CSP_TABL
7 | E
8 | Search Provider for DB Tables and Structures
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_tabl.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCR_TABL
7 | E
8 | Source code reader for table & structure
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_scope_base.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_SCOPE_BASE
7 | E
8 | Base class for search scope
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_trreq_vh.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_RES_TRREQ_VH
7 | E
8 | Resource for Transport Request VH
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_reposrc.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCR_REPOSRC
7 | E
8 | Source code reader for objects stored in TRDIR
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_tr_obj_processor.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_TR_OBJ_PROCESSOR
7 | E
8 | Transport Request Object Processor
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_cs_scope.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_RES_CS_SCOPE
7 | E
8 | Resource for Search Scope Definition
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_res_server_grp_vh.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_RES_SERVER_GRP_VH
7 | E
8 | Resource for Server Group Value Help
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_swcomp_vh.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_RES_SWCOMP_VH
7 | E
8 | Resource for VH of Software Component
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_trtype_vh.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_RES_TRTYPE_VH
7 | E
8 | Resource for Transport Request Type VH
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_scope_final.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_SCOPE_FINAL
7 | E
8 | Search scope which is already fully known
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zif_adcoset_code_search_prov.intf.abap:
--------------------------------------------------------------------------------
1 | "! Code search provider
2 | INTERFACE zif_adcoset_code_search_prov
3 | PUBLIC.
4 |
5 | "! Searches for matches in the given object
6 | METHODS search
7 | IMPORTING
8 | !object TYPE zif_adcoset_ty_global=>ty_tadir_object
9 | src_code_reader TYPE REF TO zif_adcoset_src_code_reader
10 | src_code_searcher TYPE REF TO zif_adcoset_src_code_searcher
11 | RETURNING
12 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_search_matches.
13 |
14 | ENDINTERFACE.
15 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_applc_vh.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_RES_APPLC_VH
7 | E
8 | Resource for Application Component value help
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_pattrnval.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_RES_PATTRNVAL
7 | E
8 | Resource for Code Search Pattern Validation
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_parl_search_query.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_PARL_SEARCH_QUERY
7 | E
8 | Query for code search (with parallel processing)
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_posix_regex_matchr.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_POSIX_REGEX_MATCHR
7 | E
8 | Matcher for POSIX standard regular expressions
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_no_matcher.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_ADCOSET_NO_MATCHER
7 | E
8 | No valid pattern matcher found
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_substring_matcher.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SUBSTRING_MATCHER
7 | E
8 | Finds matches in a string for a given (RegExp) pattern
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_no_provider.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_ADCOSET_NO_PROVIDER
7 | E
8 | No valid search provider found
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_src_code_read.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_ADCOSET_SRC_CODE_READ
7 | E
8 | Source code could not be read
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_cs_config.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_RES_CS_CONFIG
7 | E
8 | Resource to handle user specific settings of Code Search
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_pattern_sh_error.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_ADCOSET_PATTERN_SH_ERROR
7 | E
8 | Error during pattern search
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_no_src_code_reader.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_ADCOSET_NO_SRC_CODE_READER
7 | E
8 | No valid source code reader found
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scs_sequ_extended.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCS_SEQU_EXTENDED
7 | E
8 | Extended Sequential matching
9 | 1
10 | X
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_search.clas.abap:
--------------------------------------------------------------------------------
1 | "! Resource for code search
2 | CLASS zcl_adcoset_adt_res_search DEFINITION
3 | PUBLIC
4 | INHERITING FROM cl_adt_rest_resource
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 | METHODS get REDEFINITION.
9 |
10 | PROTECTED SECTION.
11 |
12 | PRIVATE SECTION.
13 | ENDCLASS.
14 |
15 |
16 | CLASS zcl_adcoset_adt_res_search IMPLEMENTATION.
17 | METHOD get.
18 | DATA(result) = NEW lcl_search_query( request )->run( ).
19 | response->set_body_data( content_handler = zcl_adcoset_adt_ch_factory=>create_search_result_ch( )
20 | data = result ).
21 | ENDMETHOD.
22 | ENDCLASS.
23 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "abap-code-search-tools",
3 | "version": "1.7.0",
4 | "description": "ABAP Code Search",
5 | "scripts": {
6 | "format": "abap-cleanerc.exe --sourcedir src --filepattern *.abap;*.asddls --recursive --overwrite --release 740 --crlf --profile abapcleaner.cfj"
7 | },
8 | "repository": {
9 | "type": "git",
10 | "url": "git+https://github.com/DevEpos/abap-code-search-tools.git"
11 | },
12 | "keywords": [
13 | "ABAP",
14 | "ADT"
15 | ],
16 | "author": "Ludwig Stockbauer-Muhr",
17 | "license": "MIT",
18 | "bugs": {
19 | "url": "https://github.com/DevEpos/abap-code-search-tools/issues"
20 | },
21 | "homepage": "https://github.com/DevEpos/abap-code-search-tools#readme"
22 | }
23 |
--------------------------------------------------------------------------------
/.abapgit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | E
6 | /src/
7 | PREFIX
8 |
9 | - /LICENSE
10 | - /README.md
11 | - /abaplint.json
12 | - /src/*.ddls.baseinfo
13 |
14 |
15 | -
16 |
SAP_BASIS
17 | 751
18 |
19 |
20 | zif_adcoset_version=>version
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zif_adcoset_source_code.intf.abap:
--------------------------------------------------------------------------------
1 | "! Represents the source code of an object/include
2 | INTERFACE zif_adcoset_source_code
3 | PUBLIC.
4 |
5 | TYPES:
6 | BEGIN OF ty_line_index,
7 | number TYPE i,
8 | offset TYPE i,
9 | length TYPE i,
10 | END OF ty_line_index,
11 | ty_line_indexes TYPE TABLE OF ty_line_index WITH KEY number
12 | WITH UNIQUE HASHED KEY offset COMPONENTS offset.
13 |
14 | DATA content TYPE string_table READ-ONLY.
15 | DATA line_indexes TYPE ty_line_indexes READ-ONLY.
16 | DATA is_single_line_content TYPE abap_bool READ-ONLY.
17 | DATA line_count TYPE i READ-ONLY.
18 | DATA comment_regex TYPE string READ-ONLY.
19 |
20 | ENDINTERFACE.
21 |
--------------------------------------------------------------------------------
/src/zif_adcoset_src_code_searcher.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_SRC_CODE_SEARCHER
7 | E
8 | Searches source code
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | SEARCH
16 | E
17 | Searches the given source code
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/zif_adcoset_code_search_prov.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_CODE_SEARCH_PROV
7 | E
8 | Code search provider
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | SEARCH
16 | E
17 | Searches for matches in the given object
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/adt/zcx_adcoset_adt_rest.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_ADCOSET_ADT_REST
7 | E
8 | General ADT error
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 | CONSTRUCTOR
18 | E
19 | CONSTRUCTOR
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/parl/zcl_adcoset_parl_task_runner.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_PARL_TASK_RUNNER
7 | E
8 | Runs parallel tasks
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | NEW
17 | E
18 | Creates new task runner instance
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zif_adcoset_src_code_reader.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_SRC_CODE_READER
7 | E
8 | Reader for code sources
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | GET_SOURCE_CODE
16 | E
17 | Retrieves source code instance of object via name
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/parl/zif_adcoset_parl_result_recv.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_PARL_RESULT_RECV
7 | E
8 | Receives results from parallel tasks
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | SEND_RESULTS
16 | E
17 | Will be called when task is finished
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_csp_factory.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_CSP_FACTORY
7 | E
8 | Factory for retrieving code search providers
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | GET_SEARCH_PROVIDER
17 | E
18 | Retrieves
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scs_factory.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCS_FACTORY
7 | E
8 | Factory for creating source code searcher
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CREATE
17 | E
18 | Creates source code searcher
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_csp_clas.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_CSP_CLAS
7 | E
8 | Search Provider for Classes
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CONSTRUCTOR
17 | E
18 | Creates new instance of a class search provider
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_query_fac.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_QUERY_FAC
7 | E
8 | Factory for creating search queries
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CREATE_QUERY
17 | E
18 | Creates query instance
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_message_util.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_MESSAGE_UTIL
7 | E
8 | Utility for message handling
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | SPLIT_STRING_TO_SYMSG
17 | E
18 | Splits text into sy-msg variables
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_factory.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SCR_FACTORY
7 | E
8 | Factory for creating source code readers
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | GET_READER
17 | E
18 | Retrieves source code reader for type
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_csp_fugr.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_CSP_FUGR
7 | E
8 | Search provider for Function Groups
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CONSTRUCTOR
17 | E
18 | Creates new instance of a function group search provider
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zadcoset_scope_type.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_SCOPE_TYPE
7 | E
8 | ZADCOSET_SCOPE_TYPE
9 | 55
10 | 10
11 | 20
12 | 40
13 | Scope Type
14 | Scope Type
15 | Scope Type
16 | Scope Type
17 | Scope Type
18 | E
19 | D
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_settings.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_SETTINGS
7 | E
8 | Access to search settings stored on the server
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | GET_SETTINGS
17 | E
18 | Retrieves server side code search settings
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_static_error.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_ADCOSET_STATIC_ERROR
7 | E
8 | General static exception in code search tools library
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 | CONSTRUCTOR
18 | E
19 | CONSTRUCTOR
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_csp_strsrc_default.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_CSP_STRSRC_DEFAULT
7 | E
8 | Default search provider for string sources
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CONSTRUCTOR
17 | E
18 | Creates new instance of a default search provider
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/parl/zif_adcoset_parl_task_runner.intf.abap:
--------------------------------------------------------------------------------
1 | "! Represents task to be run in parallel
2 | INTERFACE zif_adcoset_parl_task_runner
3 | PUBLIC.
4 |
5 | "! Starts a new task
6 | METHODS run
7 | IMPORTING
8 | !input TYPE any.
9 |
10 | "! Waits until all tasks are finished
11 | METHODS wait_until_finished.
12 |
13 | "! Sets a new result receiver in the task runner
14 | METHODS set_result_receiver
15 | IMPORTING
16 | !receiver TYPE REF TO zif_adcoset_parl_result_recv.
17 |
18 | "! Returns the number of the maximum available tasks
19 | METHODS get_max_tasks
20 | RETURNING
21 | VALUE(result) TYPE i.
22 |
23 | ENDINTERFACE.
24 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_csp_repsrc_default.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_CSP_REPSRC_DEFAULT
7 | E
8 | Default search provider for repository source code search
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CONSTRUCTOR
17 | E
18 | Creates new instance of a default search provider
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_search_scope.xslt.source.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_pattern_util.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_PATTERN_UTIL
7 | E
8 | Utility for handling patterns
9 | 1
10 | X
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 | PARSE_PATTERN_SEQUENCE
18 | E
19 | Checks control flags in pattern sequence
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_search_scope_params.xslt.source.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/zif_adcoset_search_query.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_SEARCH_QUERY
7 | E
8 | Search query for code search
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | GET_RESULTS
16 | E
17 | Retrieve search results
18 |
19 |
20 | RUN
21 | E
22 | Runs search query
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_swcomp_vh.clas.abap:
--------------------------------------------------------------------------------
1 | "! Resource for VH of Software Component
2 | CLASS zcl_adcoset_adt_res_swcomp_vh DEFINITION
3 | PUBLIC
4 | INHERITING FROM cl_adt_res_named_items FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 |
9 | PROTECTED SECTION.
10 | METHODS get_named_items REDEFINITION.
11 |
12 | PRIVATE SECTION.
13 | ENDCLASS.
14 |
15 |
16 | CLASS zcl_adcoset_adt_res_swcomp_vh IMPLEMENTATION.
17 | METHOD get_named_items.
18 | DATA lt_sw_comps TYPE trdlvunits.
19 |
20 | CALL FUNCTION 'TR_GET_DLVUNITS'
21 | EXPORTING iv_with_description = abap_true
22 | IMPORTING et_dlvunits = lt_sw_comps.
23 |
24 | p_filter_already_applied = abap_false.
25 | p_named_item_list-items = VALUE #( FOR sw_comp IN lt_sw_comps
26 | ( name = sw_comp-dlvunit description = sw_comp-desc_text ) ).
27 | p_named_item_list-total_item_count = lines( lt_sw_comps ).
28 | ENDMETHOD.
29 | ENDCLASS.
30 |
--------------------------------------------------------------------------------
/src/zadcoset_scope_type.doma.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_SCOPE_TYPE
7 | E
8 | CHAR
9 | 000002
10 | 000002
11 | X
12 | Scope Type
13 | E
14 |
15 |
16 |
17 | 0001
18 | E
19 | US
20 | Universal Scope
21 |
22 |
23 | 0002
24 | E
25 | TR
26 | Transport Request
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_matcher_factory.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_MATCHER_FACTORY
7 | E
8 | Factory to create matchers
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CREATE_MATCHER
17 | E
18 | Creates matcher for the given type and pattern
19 |
20 |
21 | CREATE_MATCHERS
22 | E
23 | Creates matchers from pattern range
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/src/zadcoset_i_searchabletable.ddls.asddls:
--------------------------------------------------------------------------------
1 | @AbapCatalog.compiler.compareFilter: true
2 | @AbapCatalog.preserveKey: true
3 | @AbapCatalog.sqlViewName: 'ZADCOSETSCTABLE'
4 |
5 | @AccessControl.authorizationCheck: #NOT_REQUIRED
6 |
7 | @EndUserText.label: 'Tables with Source Code'
8 |
9 | define view ZADCOSET_I_SearchableTable
10 | as select from dd02l as Object
11 |
12 | inner join cvers as Release on Release.component = 'SAP_BASIS'
13 |
14 | {
15 | key case
16 | when Object.tabclass = 'INTTAB'
17 | or Object.tabclass = 'APPEND' then 'STRU'
18 | when Object.tabclass = 'TRANSP' then 'DTAB'
19 | end as ObjectType,
20 |
21 | key Object.tabname as ObjectName
22 | }
23 |
24 | where ( ( Object.tabclass = 'INTTAB'
25 | or Object.tabclass = 'APPEND')
26 | and Release.release > '740')
27 | or ( Object.tabclass = 'TRANSP'
28 | and Release.release > '751')
29 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_scope_fac.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_SCOPE_FAC
7 | E
8 | Factory for creating search scopes
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CREATE_FINAL_SCOPE
17 | E
18 | Creates scope with a given list of objects
19 |
20 |
21 | CREATE_SCOPE
22 | E
23 | Creates scope whoose size is not known yet
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/src/parl/zadcoset_parallel.fugr.saplzadcoset_parallel.abap:
--------------------------------------------------------------------------------
1 | " ------------------------------------------------------------------
2 | " System-defined Include-files. -
3 | " ------------------------------------------------------------------
4 | INCLUDE lzadcoset_paralleltop. " Global Declarations
5 | INCLUDE lzadcoset_paralleluxx. " Function Modules
6 |
7 | " ------------------------------------------------------------------
8 | " User-defined Include-files (if necessary). -
9 | " ------------------------------------------------------------------
10 | " INCLUDE LZADCOSET_PARALLELF... " Subroutines
11 | " INCLUDE LZADCOSET_PARALLELO... " PBO-Modules
12 | " INCLUDE LZADCOSET_PARALLELI... " PAI-Modules
13 | " INCLUDE LZADCOSET_PARALLELE... " Events
14 | " INCLUDE LZADCOSET_PARALLELP... " Local class implement.
15 | " INCLUDE LZADCOSET_PARALLELT99. " ABAP Unit tests
16 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_scope_final.clas.abap:
--------------------------------------------------------------------------------
1 | "! Search scope which is already fully known
2 | CLASS zcl_adcoset_search_scope_final DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_search_scope.
8 |
9 | METHODS constructor
10 | IMPORTING
11 | !package TYPE zif_adcoset_ty_global=>ty_scope_package.
12 |
13 | PRIVATE SECTION.
14 | DATA package TYPE zif_adcoset_ty_global=>ty_scope_package.
15 | ENDCLASS.
16 |
17 |
18 | CLASS zcl_adcoset_search_scope_final IMPLEMENTATION.
19 | METHOD constructor.
20 | me->package = package.
21 | ENDMETHOD.
22 |
23 | METHOD zif_adcoset_search_scope~count.
24 | result = package-count.
25 | ENDMETHOD.
26 |
27 | METHOD zif_adcoset_search_scope~has_next_package.
28 | result = xsdbool( package IS NOT INITIAL ).
29 | ENDMETHOD.
30 |
31 | METHOD zif_adcoset_search_scope~next_package.
32 | result = package.
33 | CLEAR package.
34 | ENDMETHOD.
35 | ENDCLASS.
36 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_extensions_util.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_EXTENSIONS_UTIL
7 | E
8 | Utility to test extension availability
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | GET_CURRENT_TGOBJ_TABLE
17 | E
18 | Retrieves current table with stored tagged objects
19 |
20 |
21 | IS_ABAP_TAGS_AVAILABLE
22 | E
23 | Checks if ABAP Tags feature is installed
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_pcre_util.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_PCRE_UTIL
7 | E
8 | Utility to check PCRE support
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | IS_DOT_ALL_PARAM_EXISTING
17 | E
18 | Returns 'X' if the parameter 'DOT_ALL' exists at CREATE_PCRE
19 |
20 |
21 | IS_PCRE_SUPPORTED
22 | E
23 | Checks if PCRE is supported in the system
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_csp_strsrc_default.clas.abap:
--------------------------------------------------------------------------------
1 | "! Default search provider for string sources
2 | CLASS zcl_adcoset_csp_strsrc_default DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_code_search_prov.
8 |
9 | "! Creates new instance of a default search provider
10 | METHODS constructor.
11 |
12 | PRIVATE SECTION.
13 | DATA search_settings TYPE zif_adcoset_ty_global=>ty_search_settings.
14 | ENDCLASS.
15 |
16 |
17 | CLASS zcl_adcoset_csp_strsrc_default IMPLEMENTATION.
18 | METHOD constructor.
19 | ENDMETHOD.
20 |
21 | METHOD zif_adcoset_code_search_prov~search.
22 | TRY.
23 | DATA(source) = src_code_reader->get_source_code( name = object-name type = object-type ).
24 | result = src_code_searcher->search( source ).
25 | CATCH zcx_adcoset_src_code_read.
26 | " handle exception
27 | ENDTRY.
28 |
29 | zcl_adcoset_search_protocol=>increment_searched_srcs_count( ).
30 | ENDMETHOD.
31 | ENDCLASS.
32 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_scope_tr.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_SCOPE_TR
7 | E
8 | Search scope for transport request
9 | 1
10 | X
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 | ADD_SUBOBJ_TYPE_TO_FILTER
18 | E
19 | Enhance the type filter with corresponding LIMU types
20 |
21 |
22 | GET_TR_OBJECTS
23 | E
24 | Read Source Code Objects from Transport Requests
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_engine.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_ENGINE
7 | E
8 | Code Search Engine
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | GET_INSTANCE
17 | E
18 | Retrieves instance of search engine
19 |
20 |
21 | RUN_CODE_SEARCH_ARFC
22 | E
23 | Runs code search (for ARFC call)
24 |
25 |
26 | SEARCH_CODE
27 | E
28 | Search source code
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2021 Ludwig Stockbauer-Muhr
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_settings.clas.abap:
--------------------------------------------------------------------------------
1 | "! Access to search settings stored on the server
2 | CLASS zcl_adcoset_search_settings DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | "! Retrieves server side code search settings
8 | CLASS-METHODS get_settings
9 | RETURNING
10 | VALUE(result) TYPE zif_adcoset_ty_adt_types=>ty_code_search_settings.
11 | ENDCLASS.
12 |
13 |
14 | CLASS zcl_adcoset_search_settings IMPLEMENTATION.
15 | METHOD get_settings.
16 | " as the default settings correspond to an empty entry sy-subrc <> 0 does
17 | " have to be handled
18 | SELECT SINGLE * FROM zadcoset_csset
19 | WHERE uname = @sy-uname
20 | INTO CORRESPONDING FIELDS OF @result.
21 |
22 | IF sy-subrc <> 0.
23 | result = VALUE #( parallel_proc_pack_size = zif_adcoset_c_global=>c_parl_proc_min_pack_size ).
24 | ELSEIF result-parallel_proc_pack_size < zif_adcoset_c_global=>c_parl_proc_min_pack_size.
25 | result-parallel_proc_pack_size = zif_adcoset_c_global=>c_parl_proc_min_pack_size.
26 | ENDIF.
27 | ENDMETHOD.
28 | ENDCLASS.
29 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_cds_name_mapper.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_CDS_NAME_MAPPER
7 | E
8 | Maps technical to display name of Core Data Services
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | COLLECT_ENTRY
17 | E
18 | Collects entry for mapping
19 |
20 |
21 | GET_DISPLAY_NAME
22 | E
23 | Retrieves display name of a given entry
24 |
25 |
26 | MAP_ENTRIES
27 | E
28 | Tries to map all collected entries
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_res_server_grp_vh.clas.abap:
--------------------------------------------------------------------------------
1 | "! Resource for Server Group Value Help
2 | CLASS zcl_adcoset_res_server_grp_vh DEFINITION
3 | PUBLIC
4 | INHERITING FROM cl_adt_res_named_items FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 |
9 | PROTECTED SECTION.
10 | METHODS get_named_items REDEFINITION.
11 |
12 | PRIVATE SECTION.
13 | ENDCLASS.
14 |
15 |
16 | CLASS zcl_adcoset_res_server_grp_vh IMPLEMENTATION.
17 | METHOD get_named_items.
18 | DATA server_group_range TYPE RANGE OF zif_adcoset_ty_global=>ty_server_group.
19 |
20 | IF p_filter_name IS NOT INITIAL.
21 | server_group_range = VALUE #( ( sign = 'I' option = 'CP' low = p_filter_name ) ).
22 | ENDIF.
23 |
24 | SELECT classname AS name FROM rzllitab
25 | WHERE classname IN @server_group_range
26 | AND grouptype = @zif_adcoset_c_global=>c_group_type_server_group
27 | INTO CORRESPONDING FIELDS OF TABLE @p_named_item_list-items
28 | UP TO @p_filter_max_item_count ROWS.
29 |
30 | p_filter_already_applied = abap_true.
31 | p_named_item_list-total_item_count = lines( p_named_item_list-items ).
32 | ENDMETHOD.
33 | ENDCLASS.
34 |
--------------------------------------------------------------------------------
/src/parl/zcl_adcoset_parl_proc_utils.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_PARL_PROC_UTILS
7 | E
8 | Utilities for parallel processing
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | ASSERT_ASYNC_RFC_CALL
17 | E
18 | Asserts if aRFC call is active
19 |
20 |
21 | DETERMINE_MAX_TASKS
22 | E
23 | Determines the maximum number of threads for group
24 |
25 |
26 | GET_PARALLEL_HANDLER
27 | E
28 | Retrieves parallel handler definition
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/zif_adcoset_pattern_matcher.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_PATTERN_MATCHER
7 | E
8 | Finds matches in a string for a given (RegExp) pattern
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | FIND_MATCHES
16 | E
17 | Retrieves the matches in the given source
18 |
19 |
20 | FIND_MATCHES_IN_RANGE
21 | E
22 | Retrieves matches in the given source and range
23 |
24 |
25 | FIND_NEXT_MATCH
26 | E
27 | Retrieves the next match in the given source and offset
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_string_util.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_STRING_UTIL
7 | E
8 | Utility for string processing
9 | 1
10 | X
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 | ADJUST_LINE_ENDINGS
18 | E
19 | Adjusts the line endings in the given source
20 |
21 |
22 | DETERMINE_LINE_INDEXES
23 | E
24 | Determines the line indexes in the source
25 |
26 |
27 | TRANSFORM_TO_STRING
28 | E
29 | Transforms tabular source into single string
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_message_util.clas.abap:
--------------------------------------------------------------------------------
1 | "! Utility for message handling
2 | CLASS zcl_adcoset_message_util DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | "! Splits text into sy-msg variables
8 | CLASS-METHODS split_string_to_symsg
9 | IMPORTING
10 | !text TYPE string.
11 | ENDCLASS.
12 |
13 |
14 | CLASS zcl_adcoset_message_util IMPLEMENTATION.
15 | METHOD split_string_to_symsg.
16 | DATA offset TYPE i.
17 |
18 | DATA(rest_text) = text.
19 |
20 | DATA(msgv1) = rest_text.
21 | SHIFT rest_text LEFT BY 50 PLACES.
22 | DATA(msgv2) = rest_text.
23 | SHIFT rest_text LEFT BY 50 PLACES.
24 | DATA(msgv3) = rest_text.
25 | SHIFT rest_text LEFT BY 50 PLACES.
26 | DATA(msgv4) = rest_text.
27 |
28 | IF strlen( rest_text ) > 50.
29 | FIND ALL OCCURRENCES OF REGEX '.\s.' IN SECTION LENGTH 47 OF msgv4 MATCH OFFSET offset.
30 | IF sy-subrc = 0.
31 | offset = offset + 1.
32 | msgv4 = msgv4(offset).
33 |
34 | msgv4 = |{ msgv4 }...|.
35 | ENDIF.
36 | ENDIF.
37 |
38 | MESSAGE e001(00) WITH msgv1 msgv2 msgv3 msgv4 INTO DATA(msg) ##NEEDED.
39 | ENDMETHOD.
40 | ENDCLASS.
41 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_log.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_LOG
7 | E
8 | Messages that occur during processing
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | ADD_ALL_MESSAGES
17 | E
18 | Adds a list of messages
19 |
20 |
21 | ADD_MESSAGE
22 | E
23 | Adds message
24 |
25 |
26 | CLEAR
27 | E
28 | Clears current list of messages
29 |
30 |
31 | GET_MESSAGES
32 | E
33 | Returns current list of messages
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/zif_adcoset_c_pattern_matching.intf.abap:
--------------------------------------------------------------------------------
1 | "! Constants for pattern matching
2 | INTERFACE zif_adcoset_c_pattern_matching
3 | PUBLIC.
4 |
5 | CONSTANTS:
6 | "! Control sequences
7 | BEGIN OF c_pattern_ctrl_sequence,
8 | boundary_start TYPE string VALUE '(#b-start)',
9 | boundary_end TYPE string VALUE '(#b-end)',
10 | match TYPE string VALUE '(#match)',
11 | match_start TYPE string VALUE '(#m-start)',
12 | match_end TYPE string VALUE '(#m-end)',
13 | exclude TYPE string VALUE '(#exclude)',
14 | END OF c_pattern_ctrl_sequence.
15 |
16 | CONSTANTS:
17 | "! Control sequence flags
18 | BEGIN OF c_pattern_ctrl_flag,
19 | boundary_start TYPE zif_adcoset_ty_global=>ty_control_flags VALUE '00000001',
20 | boundary_end TYPE zif_adcoset_ty_global=>ty_control_flags VALUE '00000002',
21 | match_start TYPE zif_adcoset_ty_global=>ty_control_flags VALUE '00000004',
22 | match_end TYPE zif_adcoset_ty_global=>ty_control_flags VALUE '00000008',
23 | match TYPE zif_adcoset_ty_global=>ty_control_flags VALUE '00000010',
24 | exclude TYPE zif_adcoset_ty_global=>ty_control_flags VALUE '00000020',
25 | END OF c_pattern_ctrl_flag.
26 | ENDINTERFACE.
27 |
--------------------------------------------------------------------------------
/src/parl/zif_adcoset_parl_task_runner.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_PARL_TASK_RUNNER
7 | E
8 | Represents task to be run in parallel
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | GET_MAX_TASKS
16 | E
17 | Returns the number of the maximum available tasks
18 |
19 |
20 | RUN
21 | E
22 | Starts a new task
23 |
24 |
25 | SET_RESULT_RECEIVER
26 | E
27 | Sets a new result receiver in the task runner
28 |
29 |
30 | WAIT_UNTIL_FINISHED
31 | E
32 | Waits until all tasks are finished
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_devc_reader.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_DEVC_READER
7 | E
8 | Access to Packages (DEVC)
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | GET_SUBPACKAGES
17 | E
18 | Retrieves sub packages for top package
19 |
20 |
21 | GET_SUBPACKAGES_BY_RANGE
22 | E
23 | Retrieves sub packages by range
24 |
25 |
26 | GET_SUBPACKAGES_BY_TAB
27 | E
28 | Retrieves sub packages by tab
29 |
30 |
31 | RESOLVE_PACKAGES
32 | E
33 | Resolves full package names from Range Table
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_trtype_vh.clas.abap:
--------------------------------------------------------------------------------
1 | "! Resource for Transport Request Type VH
2 | CLASS zcl_adcoset_adt_res_trtype_vh DEFINITION
3 | PUBLIC
4 | INHERITING FROM cl_adt_res_named_items FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 |
9 | PROTECTED SECTION.
10 | METHODS get_named_items REDEFINITION.
11 |
12 | PRIVATE SECTION.
13 | ENDCLASS.
14 |
15 |
16 | CLASS zcl_adcoset_adt_res_trtype_vh IMPLEMENTATION.
17 | METHOD get_named_items.
18 | p_named_item_list-items = VALUE #(
19 | ( name = zif_adcoset_c_global=>c_trkorr_type_vh-workbench_request description = 'Workbench Request' )
20 | ( name = zif_adcoset_c_global=>c_trkorr_type_vh-dev_corr_task description = 'Development/Correction Task' )
21 | ( name = zif_adcoset_c_global=>c_trkorr_type_vh-repair_task description = 'Repair Task' )
22 | ( name = zif_adcoset_c_global=>c_trkorr_type_vh-transport_of_copies description = 'Transport of Copies' )
23 | ( name = zif_adcoset_c_global=>c_trkorr_type_vh-piece_list description = 'Piece List' )
24 | ( name = zif_adcoset_c_global=>c_trkorr_type_vh-relocation_request description = 'Relocation Request' ) ).
25 | p_named_item_list-total_item_count = lines( p_named_item_list-items ).
26 |
27 | p_filter_already_applied = abap_true.
28 | ENDMETHOD.
29 | ENDCLASS.
30 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_search_settings.xslt.source.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/adt/zif_adcoset_adt_obj_factory.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_ADT_OBJ_FACTORY
7 | E
8 | Factory for ADT links
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | ADD_POSITION_FRAGMENT
16 | E
17 | Add positional fragment to uri
18 |
19 |
20 | GET_OBJECT_REF_FOR_INCLUDE
21 | E
22 | Retrieves ADT object reference for a given include
23 |
24 |
25 | GET_OBJECT_REF_FOR_SUB_OBJECT
26 | E
27 | Retrieves ADT object reference for workbench object
28 |
29 |
30 | GET_OBJECT_REF_FOR_TROBJ
31 | E
32 | Retrieves ADT object reference for tadir object
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/changelog.txt:
--------------------------------------------------------------------------------
1 |
2 | ABAP Code Search Tools changelog
3 | =================
4 |
5 | Legend
6 | ------
7 | * : fixed
8 | ! : changed
9 | + : added
10 | - : removed
11 |
12 | 2025-08-15 v1.7.0
13 | -------------------
14 |
15 | + New source code object type SRVD
16 | + New search filter 'comp' (Software Component)
17 | + New search filter 'api' (API State)
18 |
19 |
20 | 2024-05-30 v1.6.0
21 | -------------------
22 |
23 | + New source code object types: STRU, DTAB (#23,#24)
24 |
25 |
26 | 2024-02-16 v1.5.0
27 | -------------------
28 |
29 | + Search in objects assigned to a chosen Transport Request/Task (#19)
30 |
31 |
32 | 2023-09-19 v1.3.1
33 | -------------------
34 |
35 | * Fixes error in sequential search
36 |
37 |
38 | 2023-05-24 v1.3.0
39 | -------------------
40 |
41 | + DDLS: raw name of entity (STOB) is returned to ADT
42 | + BDEF: raw name of DDLS (STOB) is returned to ADT
43 |
44 |
45 | 2023-04-05 v1.2.1
46 | -------------------
47 |
48 | ! Adjusted ABAP Tags extension usage due to DDIC changes
49 |
50 |
51 | 2023-02-20 v1.2.0
52 | -------------------
53 |
54 | + PROG: add option to expand includes in programs and search them as well
55 |
56 |
57 | 2022-10-21 v1.1.0
58 | -------------------
59 |
60 | + The complete snippet of a match is returned if multi-line mode is active
61 | + The result contains the lines of codes that were searched
62 |
63 |
64 | 2021-03-09 v1.0.0
65 | -------------------
66 |
67 | + Initial release
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_applc_vh.clas.abap:
--------------------------------------------------------------------------------
1 | "! Resource for Application Component value help
2 | CLASS zcl_adcoset_adt_res_applc_vh DEFINITION
3 | PUBLIC
4 | INHERITING FROM cl_adt_res_named_items FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 |
9 | PROTECTED SECTION.
10 | METHODS get_named_items REDEFINITION.
11 |
12 | PRIVATE SECTION.
13 | ENDCLASS.
14 |
15 |
16 | CLASS zcl_adcoset_adt_res_applc_vh IMPLEMENTATION.
17 | METHOD get_named_items.
18 | DATA lt_appl_comp_name_range TYPE RANGE OF df14l-ps_posid.
19 |
20 | IF p_filter_name IS NOT INITIAL.
21 | lt_appl_comp_name_range = VALUE #( ( sign = 'I' option = 'CP' low = to_upper( p_filter_name ) ) ).
22 | ENDIF.
23 |
24 | SELECT ps_posid AS name,
25 | text~name AS description
26 | FROM df14l AS comp
27 | LEFT OUTER JOIN df14t AS text
28 | ON comp~fctr_id = text~fctr_id
29 | AND comp~as4local = text~as4local
30 | AND text~langu = @sy-langu
31 | WHERE comp~as4local = 'A'
32 | AND comp~ps_posid IN @lt_appl_comp_name_range
33 | ORDER BY comp~ps_posid
34 | INTO CORRESPONDING FIELDS OF TABLE @p_named_item_list-items
35 | UP TO @p_filter_max_item_count ROWS.
36 |
37 | p_filter_already_applied = abap_true.
38 | p_named_item_list-total_item_count = lines( p_named_item_list-items ).
39 | ENDMETHOD.
40 | ENDCLASS.
41 |
--------------------------------------------------------------------------------
/.github/workflows/stale.yml:
--------------------------------------------------------------------------------
1 | # This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
2 | #
3 | # You can adjust the behavior by modifying this file.
4 | # For more information, see:
5 | # https://github.com/actions/stale
6 | name: Mark stale issues and pull requests
7 |
8 | on:
9 | schedule:
10 | - cron: '36 18 * * *'
11 |
12 | concurrency:
13 | group: ${{ github.workflow }}
14 | cancel-in-progress: true
15 |
16 | jobs:
17 | stale:
18 | runs-on: ubuntu-latest
19 | permissions:
20 | issues: write
21 | pull-requests: write
22 |
23 | steps:
24 | - uses: actions/stale@v9
25 | with:
26 | repo-token: ${{ secrets.GITHUB_TOKEN }}
27 | days-before-issue-stale: 30
28 | stale-issue-message: 'This issue has not been updated in a while. If it is still relevant, please comment on it to keep it open. The issue will be closed soon if it remains inactive.'
29 | close-issue-message: 'This issue has been closed automatically due to inactivity.'
30 | stale-pr-message: 'This PR has not been updated in a while. If it is still relevant, please comment on it to keep it open. The PR will be closed soon if it remains inactive.'
31 | close-pr-message: 'This PR has been closed automatically due to inactivity.'
32 | stale-issue-label: 'stale'
33 | stale-pr-label: 'stale'
34 | exempt-issue-labels: 'keepalive,feature request'
35 | exempt-pr-labels: 'keepalive,feature request'
36 | exempt-all-milestones: true
37 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_source_code.clas.abap:
--------------------------------------------------------------------------------
1 | "! Represents source code
2 | CLASS zcl_adcoset_source_code DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_source_code.
8 |
9 | METHODS constructor
10 | IMPORTING
11 | !source TYPE string_table
12 | line_indexes TYPE zif_adcoset_source_code=>ty_line_indexes OPTIONAL
13 | comment_regex TYPE string OPTIONAL.
14 |
15 | PRIVATE SECTION.
16 | ALIASES content FOR zif_adcoset_source_code~content.
17 | ALIASES line_count FOR zif_adcoset_source_code~line_count.
18 | ALIASES line_indexes FOR zif_adcoset_source_code~line_indexes.
19 | ALIASES comment_regex FOR zif_adcoset_source_code~comment_regex.
20 | ALIASES is_single_line_content FOR zif_adcoset_source_code~is_single_line_content.
21 | ENDCLASS.
22 |
23 |
24 | CLASS zcl_adcoset_source_code IMPLEMENTATION.
25 | METHOD constructor.
26 | ASSERT source IS NOT INITIAL.
27 |
28 | content = source.
29 | me->line_indexes = line_indexes.
30 | me->comment_regex = comment_regex.
31 | line_count = lines( line_indexes ).
32 | is_single_line_content = xsdbool( line_count IS NOT INITIAL ).
33 |
34 | IF is_single_line_content = abap_true.
35 | zcl_adcoset_search_protocol=>add_loc( lines( line_indexes ) ).
36 | ELSE.
37 | zcl_adcoset_search_protocol=>add_loc( lines( source ) ).
38 | ENDIF.
39 | ENDMETHOD.
40 | ENDCLASS.
41 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_request_util.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_REQUEST_UTIL
7 | E
8 | ADT Util
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | GET_BOOLEAN_QUERY_PARAMETER
17 | E
18 | Retrieve boolean parameter value from request
19 |
20 |
21 | GET_INTEGER_QUERY_PARAMETER
22 | E
23 | Retrieve value of integer request parameter
24 |
25 |
26 | GET_QUERY_PARAMETER
27 | E
28 | Retrieve value of request parameter
29 |
30 |
31 | GET_QUERY_PARAMETER_VALUES
32 | E
33 | Retrieve values of request parameter
34 |
35 |
36 | GET_UUID_URI_QUERY_PARAMETER
37 | E
38 | Retrieves UUID request parameter
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/zif_adcoset_pattern_matcher.intf.abap:
--------------------------------------------------------------------------------
1 | "! Finds matches in a string for a given (RegExp) pattern
2 | INTERFACE zif_adcoset_pattern_matcher
3 | PUBLIC.
4 |
5 | TYPES ty_ref_tab TYPE STANDARD TABLE OF REF TO zif_adcoset_pattern_matcher WITH EMPTY KEY.
6 |
7 | DATA control_flags TYPE zif_adcoset_ty_global=>ty_control_flags READ-ONLY.
8 |
9 | "! Retrieves the matches in the given source
10 | METHODS find_matches
11 | IMPORTING
12 | !source TYPE string_table
13 | RETURNING
14 | VALUE(result) TYPE match_result_tab
15 | RAISING
16 | zcx_adcoset_pattern_sh_error.
17 |
18 | "! Retrieves matches in the given source and range
19 | METHODS find_matches_in_range
20 | IMPORTING
21 | !source TYPE string_table
22 | start_line TYPE i
23 | !offset TYPE i
24 | end_line TYPE i
25 | end_offset TYPE i
26 | RETURNING
27 | VALUE(result) TYPE match_result_tab
28 | RAISING
29 | zcx_adcoset_pattern_sh_error.
30 |
31 | "! Retrieves the next match in the given source and offset
32 | METHODS find_next_match
33 | IMPORTING
34 | !source TYPE string_table
35 | start_line TYPE i OPTIONAL
36 | !offset TYPE i OPTIONAL
37 | end_line TYPE i OPTIONAL
38 | end_offset TYPE i OPTIONAL
39 | RETURNING
40 | VALUE(result) TYPE match_result
41 | RAISING
42 | zcx_adcoset_pattern_sh_error.
43 | ENDINTERFACE.
44 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_ch_factory.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_ADT_CH_FACTORY
7 | E
8 | ADT content handler factory
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CREATE_CS_SETTINGS_CH
17 | E
18 | Creates content handler for code search settings
19 |
20 |
21 | CREATE_FEATURE_LIST_CH
22 | E
23 | Creates content handler for feature list
24 |
25 |
26 | CREATE_SEARCH_RESULT_CH
27 | E
28 | Creates content handler for code search result
29 |
30 |
31 | CREATE_SEARCH_SCOPE_CH
32 | E
33 | Creates content handler for Code Search Scope
34 |
35 |
36 | CREATE_SEARCH_SCOPE_PARAMS_CH
37 | E
38 | Creates content handler for Code Search Scope Parameters
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/zif_adcoset_search_scope.intf.abap:
--------------------------------------------------------------------------------
1 | "! Defines the scope of a code search
2 | INTERFACE zif_adcoset_search_scope
3 | PUBLIC.
4 |
5 | CONSTANTS c_min_parl_package_size TYPE i VALUE 10.
6 | CONSTANTS c_max_parl_package_size TYPE i VALUE 2500.
7 | CONSTANTS c_serial_package_size TYPE i VALUE 10000.
8 |
9 | "! Retrieves number of objects in scope
10 | METHODS count
11 | RETURNING
12 | VALUE(result) TYPE i.
13 |
14 | "! Retrieves the next package of objects in scope
15 | METHODS next_package
16 | RETURNING
17 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_scope_package.
18 |
19 | "! Returns 'X' if another package exists
20 | METHODS has_next_package
21 | RETURNING
22 | VALUE(result) TYPE abap_bool.
23 |
24 | "! Returns 'X' if more results would have been in scope
25 | METHODS more_objects_in_scope DEFAULT IGNORE
26 | RETURNING
27 | VALUE(result) TYPE abap_bool.
28 |
29 | "! Configures the package size of the processor
30 | "! The driving factor will be the available number of parallel tasks
31 | METHODS configure_package_size DEFAULT IGNORE
32 | IMPORTING
33 | max_objects TYPE i OPTIONAL
34 | max_task_count TYPE i.
35 |
36 | "! Retrieves the ranges of this scope
37 | METHODS get_scope_ranges DEFAULT IGNORE
38 | RETURNING
39 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_search_scope_ranges.
40 | ENDINTERFACE.
41 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_pcre_util.clas.abap:
--------------------------------------------------------------------------------
1 | "! Utility to check PCRE support
2 | CLASS zcl_adcoset_pcre_util DEFINITION
3 | PUBLIC FINAL
4 | CREATE PRIVATE.
5 |
6 | PUBLIC SECTION.
7 | CLASS-METHODS class_constructor.
8 |
9 | "! Checks if PCRE is supported in the system
10 | CLASS-METHODS is_pcre_supported
11 | RETURNING
12 | VALUE(result) TYPE abap_bool.
13 |
14 | "! Returns 'X' if the parameter 'DOT_ALL' exists at CREATE_PCRE
15 | CLASS-METHODS is_dot_all_param_existing
16 | RETURNING
17 | VALUE(result) TYPE abap_bool.
18 |
19 | PRIVATE SECTION.
20 | CLASS-DATA pcre_supported TYPE abap_bool VALUE abap_undefined.
21 | CLASS-DATA dot_all_param_exists TYPE abap_bool VALUE abap_undefined.
22 | ENDCLASS.
23 |
24 |
25 | CLASS zcl_adcoset_pcre_util IMPLEMENTATION.
26 | METHOD class_constructor.
27 | DATA(abap_regex_descr) = CAST cl_abap_classdescr( cl_abap_typedescr=>describe_by_name( 'CL_ABAP_REGEX' ) ).
28 |
29 | ASSIGN abap_regex_descr->methods[ name = 'CREATE_PCRE' ] TO FIELD-SYMBOL().
30 | pcre_supported = xsdbool( sy-subrc = 0 ).
31 |
32 | IF pcre_supported = abap_true.
33 | dot_all_param_exists = xsdbool( line_exists( -parameters[ name = 'DOT_ALL' ] ) ).
34 | ELSE.
35 | dot_all_param_exists = abap_false.
36 | ENDIF.
37 | ENDMETHOD.
38 |
39 | METHOD is_pcre_supported.
40 | result = pcre_supported.
41 | ENDMETHOD.
42 |
43 | METHOD is_dot_all_param_existing.
44 | result = dot_all_param_exists.
45 | ENDMETHOD.
46 | ENDCLASS.
47 |
--------------------------------------------------------------------------------
/src/zif_adcoset_search_scope.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_SEARCH_SCOPE
7 | E
8 | Defines the scope of a code search
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | CONFIGURE_PACKAGE_SIZE
16 | E
17 | Configures the package size of the processor
18 |
19 |
20 | COUNT
21 | E
22 | Retrieves number of objects in scope
23 |
24 |
25 | GET_SCOPE_RANGES
26 | E
27 | Retrieves the ranges of this scope
28 |
29 |
30 | HAS_NEXT_PACKAGE
31 | E
32 | Returns 'X' if another package exists
33 |
34 |
35 | MORE_OBJECTS_IN_SCOPE
36 | E
37 | Returns 'X' if more results would have been in scope
38 |
39 |
40 | NEXT_PACKAGE
41 | E
42 | Retrieves the next package of objects in scope
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_scope_tr.clas.testclasses.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for your ABAP unit test classes
2 |
3 | CLASS ltcl_unit DEFINITION FINAL
4 | FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
5 |
6 | PRIVATE SECTION.
7 | METHODS test_native_sql_builder FOR TESTING RAISING cx_static_check.
8 | ENDCLASS.
9 |
10 |
11 | CLASS ltcl_unit IMPLEMENTATION.
12 | METHOD test_native_sql_builder.
13 | DATA(cut) = NEW zcl_adcoset_search_scope_tr(
14 | search_scope = VALUE #( object_name_range = VALUE #( ( sign = 'I' option = 'CP' low = 'CL_*' ) )
15 | object_type_range = VALUE #( option = 'EQ'
16 | ( sign = 'I' low = 'CLAS' )
17 | ( sign = 'E' low = 'INTF' ) )
18 | package_range = VALUE #( ( sign = 'I' option = 'CP' low = 'AB*' ) )
19 | current_offset = 0
20 | max_objects = 50 ) ).
21 |
22 | cl_abap_unit_assert=>assert_true( cut->zif_adcoset_search_scope~has_next_package( ) ).
23 | DATA(obj_count) = cut->zif_adcoset_search_scope~count( ).
24 |
25 | DATA(results) = cut->zif_adcoset_search_scope~next_package( ).
26 |
27 | cl_abap_unit_assert=>assert_equals( exp = COND #( WHEN obj_count >= 50 THEN 50
28 | WHEN obj_count < 50 THEN obj_count
29 | ELSE 0 )
30 | act = lines( results-objects ) ).
31 | ENDMETHOD.
32 | ENDCLASS.
33 |
--------------------------------------------------------------------------------
/src/zadcoset_i_sourcecodeobject.ddls.asddls:
--------------------------------------------------------------------------------
1 | @AbapCatalog.preserveKey: true
2 | @AbapCatalog.sqlViewName: 'ZADCOSET_ISRCOBJ'
3 |
4 | @AccessControl.authorizationCheck: #NOT_REQUIRED
5 |
6 | @EndUserText.label: 'Repository object for code search'
7 |
8 | define view ZADCOSET_I_SourceCodeObject
9 | as select from tadir as Object
10 |
11 | {
12 | key Object.pgmid as ProgramId,
13 | key Object.object as ObjectType,
14 | key Object.object as OriginalObjectType,
15 | key Object.obj_name as ObjectName,
16 |
17 | Object.devclass as DevelopmentPackage,
18 | Object.created_on as CreatedDate,
19 | Object.author as Owner
20 | }
21 |
22 | where Object.pgmid = 'R3TR'
23 | and Object.delflag = ''
24 | and ( Object.object = 'CLAS'
25 | or Object.object = 'INTF'
26 | or Object.object = 'PROG'
27 | or Object.object = 'FUGR'
28 | or Object.object = 'TYPE'
29 | or Object.object = 'DDLS'
30 | or Object.object = 'DCLS'
31 | or Object.object = 'DDLX'
32 | or Object.object = 'BDEF'
33 | or Object.object = 'SRVD'
34 | or Object.object = 'XSLT')
35 |
36 | union
37 |
38 | select from tadir as Object
39 |
40 | inner join ZADCOSET_I_SearchableTable as Tabl on Object.obj_name = Tabl.ObjectName
41 |
42 | {
43 | key Object.pgmid as ProgramId,
44 | key Tabl.ObjectType,
45 | key Object.object as OriginalObjectType,
46 | key Object.obj_name as ObjectName,
47 |
48 | Object.devclass as DevelopmentPackage,
49 | Object.created_on as CreatedDate,
50 | Object.author as Owner
51 | }
52 |
53 | where Object.pgmid = 'R3TR'
54 | and Object.delflag = ''
55 | and Object.object = 'TABL'
56 |
--------------------------------------------------------------------------------
/src/parl/zadcoset_parallel.fugr.zadcoset_new_task.abap:
--------------------------------------------------------------------------------
1 | FUNCTION zadcoset_new_task.
2 | *"----------------------------------------------------------------------
3 | *"*"Local Interface:
4 | *" IMPORTING
5 | *" VALUE(INPUT) TYPE XSTRING
6 | *" VALUE(HANDLER_CLASS) TYPE STRING
7 | *" VALUE(HANDLER_METHOD) TYPE SEOCPDNAME
8 | *" EXPORTING
9 | *" VALUE(OUTPUT) TYPE XSTRING
10 | *" EXCEPTIONS
11 | *" INVALID_HANDLER
12 | *" ERROR
13 | *"----------------------------------------------------------------------
14 | TRY.
15 | DATA(handler_def) = zcl_adcoset_parl_proc_utils=>get_parallel_handler( handler_class = handler_class
16 | handler_method = handler_method ).
17 | CATCH zcx_adcoset_static_error.
18 | MESSAGE |{ handler_class }=>{ handler_method } is no valid handler method| TYPE 'E'
19 | RAISING invalid_handler.
20 | ENDTRY.
21 |
22 | DATA typed_input TYPE REF TO data.
23 | DATA typed_output TYPE REF TO data.
24 |
25 | CREATE DATA typed_input TYPE HANDLE handler_def-input_param-type_handle.
26 | CREATE DATA typed_output TYPE HANDLE handler_def-output_param-type_handle.
27 |
28 | ASSIGN typed_input->* TO FIELD-SYMBOL( ).
29 | ASSIGN typed_output->* TO FIELD-SYMBOL().
30 |
31 | IMPORT data = FROM DATA BUFFER input.
32 |
33 | TRY.
34 | CALL METHOD (handler_class)=>(handler_method)
35 | EXPORTING input =
36 | IMPORTING output = .
37 |
38 | EXPORT data = TO DATA BUFFER output.
39 |
40 | CATCH cx_sy_dyn_call_error
41 | zcx_adcoset_static_error INTO DATA(call_error).
42 | MESSAGE call_error->get_text( ) TYPE 'E'
43 | RAISING error.
44 | ENDTRY.
45 | ENDFUNCTION.
46 |
--------------------------------------------------------------------------------
/src/zif_adcoset_c_global.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_C_GLOBAL
7 | E
8 | Global constants for code search tools
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | C_CDS_COMMENT_REGEX
16 | E
17 | Regex pattern to detect comment lines in CDS sources
18 |
19 |
20 | C_CLASS_INCLUDE_ID
21 | E
22 | Include id's for class
23 |
24 |
25 | C_FUGR_INCLUDE_ID
26 | E
27 | Include id's for function group
28 |
29 |
30 | C_MATCHER_TYPE
31 | E
32 | Matcher types
33 |
34 |
35 | C_SEARCH_PARAMS
36 | E
37 | Names of code search parameters
38 |
39 |
40 | C_SOURCE_CODE_TYPE
41 | E
42 | Technical identifier for source code types
43 |
44 |
45 | C_TADIR_TYPE
46 | E
47 | Constants for needed TADIR types
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/src/zcx_adcoset_static_error.clas.abap:
--------------------------------------------------------------------------------
1 | "! General static exception in code search tools library
2 | CLASS zcx_adcoset_static_error DEFINITION
3 | PUBLIC
4 | INHERITING FROM cx_static_check
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 | INTERFACES if_t100_message.
9 |
10 | DATA msgv1 TYPE sy-msgv1.
11 | DATA msgv2 TYPE sy-msgv2.
12 | DATA msgv3 TYPE sy-msgv3.
13 | DATA msgv4 TYPE sy-msgv4.
14 |
15 | METHODS constructor
16 | IMPORTING
17 | !previous LIKE previous OPTIONAL
18 | !text TYPE string OPTIONAL
19 | from_sy TYPE abap_bool OPTIONAL.
20 |
21 | PROTECTED SECTION.
22 |
23 | PRIVATE SECTION.
24 | ENDCLASS.
25 |
26 |
27 | CLASS zcx_adcoset_static_error IMPLEMENTATION.
28 | METHOD constructor ##ADT_SUPPRESS_GENERATION.
29 | DATA fill_t100key TYPE abap_bool.
30 |
31 | super->constructor( previous = previous ).
32 |
33 | CLEAR textid.
34 |
35 | IF text IS NOT INITIAL.
36 | fill_t100key = abap_true.
37 | zcl_adcoset_message_util=>split_string_to_symsg( text ).
38 | ELSEIF from_sy = abap_true AND sy-msgid IS NOT INITIAL.
39 | fill_t100key = abap_true.
40 | ENDIF.
41 |
42 | IF fill_t100key = abap_true.
43 | msgv1 = sy-msgv1.
44 | msgv2 = sy-msgv2.
45 | msgv3 = sy-msgv3.
46 | msgv4 = sy-msgv4.
47 | if_t100_message~t100key = VALUE #( msgid = sy-msgid
48 | msgno = sy-msgno
49 | attr1 = 'MSGV1'
50 | attr2 = 'MSGV2'
51 | attr3 = 'MSGV3'
52 | attr4 = 'MSGV4' ).
53 | ELSE.
54 | if_t100_message~t100key = if_t100_message=>default_textid.
55 | ENDIF.
56 |
57 | me->previous = previous.
58 | ENDMETHOD.
59 | ENDCLASS.
60 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_scope_fac.clas.abap:
--------------------------------------------------------------------------------
1 | "! Factory for creating search scopes
2 | CLASS zcl_adcoset_search_scope_fac DEFINITION
3 | PUBLIC FINAL
4 | CREATE PRIVATE.
5 |
6 | PUBLIC SECTION.
7 | "! Creates scope whoose size is not known yet
8 | CLASS-METHODS create_scope
9 | IMPORTING
10 | search_scope TYPE zif_adcoset_ty_global=>ty_search_scope
11 | RETURNING
12 | VALUE(result) TYPE REF TO zif_adcoset_search_scope.
13 |
14 | "! Creates scope with a given list of objects
15 | CLASS-METHODS create_final_scope
16 | IMPORTING
17 | !package TYPE zif_adcoset_ty_global=>ty_scope_package
18 | RETURNING
19 | VALUE(result) TYPE REF TO zif_adcoset_search_scope.
20 |
21 | PRIVATE SECTION.
22 | CLASS-METHODS read_scope_type
23 | IMPORTING
24 | scope_id TYPE sysuuid_x16
25 | RETURNING
26 | VALUE(result) TYPE zadcoset_scope_type.
27 | ENDCLASS.
28 |
29 |
30 | CLASS zcl_adcoset_search_scope_fac IMPLEMENTATION.
31 | METHOD create_final_scope.
32 | result = NEW zcl_adcoset_search_scope_final( package = package ).
33 | ENDMETHOD.
34 |
35 | METHOD create_scope.
36 | IF search_scope-scope_id IS NOT INITIAL.
37 | DATA(scope_type) = read_scope_type( search_scope-scope_id ).
38 | ENDIF.
39 |
40 | result = COND #( WHEN search_scope-tr_request_range IS NOT INITIAL
41 | OR scope_type = zif_adcoset_c_global=>c_scope_type-transport_request
42 | THEN NEW zcl_adcoset_search_scope_tr( search_scope = search_scope )
43 | ELSE NEW zcl_adcoset_search_scope( search_scope = search_scope ) ).
44 | ENDMETHOD.
45 |
46 | METHOD read_scope_type.
47 | SELECT SINGLE scope_type FROM zadcoset_csscope
48 | WHERE id = @scope_id
49 | INTO @result.
50 | ENDMETHOD.
51 | ENDCLASS.
52 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scs_factory.clas.abap:
--------------------------------------------------------------------------------
1 | "! Factory for creating source code searcher
2 | CLASS zcl_adcoset_scs_factory DEFINITION
3 | PUBLIC FINAL
4 | CREATE PRIVATE.
5 |
6 | PUBLIC SECTION.
7 | "! Creates source code searcher
8 | CLASS-METHODS create
9 | IMPORTING
10 | matchers TYPE zif_adcoset_pattern_matcher=>ty_ref_tab
11 | settings TYPE zif_adcoset_ty_global=>ty_search_settings
12 | RETURNING
13 | VALUE(result) TYPE REF TO zif_adcoset_src_code_searcher.
14 | ENDCLASS.
15 |
16 |
17 | CLASS zcl_adcoset_scs_factory IMPLEMENTATION.
18 | METHOD create.
19 | IF settings-sequential_matching = abap_true AND lines( matchers ) > 1.
20 |
21 | DATA(is_ctrl_flags_found) = abap_false.
22 | LOOP AT matchers INTO DATA(matcher).
23 | IF matcher->control_flags IS NOT INITIAL.
24 | is_ctrl_flags_found = abap_true.
25 | EXIT.
26 | ENDIF.
27 | ENDLOOP.
28 |
29 | IF is_ctrl_flags_found = abap_true.
30 | result = NEW zcl_adcoset_scs_sequ_extended( ignore_comment_lines = settings-ignore_comment_lines
31 | line_feed = settings-line_feed
32 | matchers = matchers ).
33 | ELSE.
34 | result = NEW zcl_adcoset_scs_sequential( ignore_comment_lines = settings-ignore_comment_lines
35 | line_feed = settings-line_feed
36 | matchers = matchers ).
37 | ENDIF.
38 |
39 | ELSE.
40 | result = NEW zcl_adcoset_scs_standard( match_all = settings-match_all_patterns
41 | ignore_comment_lines = settings-ignore_comment_lines
42 | matchers = matchers ).
43 | ENDIF.
44 | ENDMETHOD.
45 | ENDCLASS.
46 |
--------------------------------------------------------------------------------
/src/adt/zif_adcoset_adt_obj_factory.intf.abap:
--------------------------------------------------------------------------------
1 | "! Factory for ADT links
2 | INTERFACE zif_adcoset_adt_obj_factory
3 | PUBLIC.
4 |
5 | "! Retrieves ADT object reference for tadir object
6 | METHODS get_object_ref_for_trobj
7 | IMPORTING
8 | !type TYPE trobjtype
9 | !name TYPE sobj_name
10 | append_source_uri_path TYPE abap_bool OPTIONAL
11 | RETURNING
12 | VALUE(result) TYPE sadt_object_reference
13 | RAISING
14 | zcx_adcoset_static_error.
15 |
16 | "! Retrieves ADT object reference for workbench object
17 | METHODS get_object_ref_for_sub_object
18 | IMPORTING
19 | wbobjtype TYPE wbobjtype
20 | enclosing_object TYPE sobj_name
21 | sub_object TYPE eu_lname
22 | RETURNING
23 | VALUE(result) TYPE sadt_object_reference
24 | RAISING
25 | zcx_adcoset_static_error.
26 |
27 | "! Retrieves ADT object reference for a given include
28 | METHODS get_object_ref_for_include
29 | IMPORTING
30 | main_program TYPE progname
31 | !include TYPE progname
32 | start_line TYPE i DEFAULT if_adt_uri_mapper=>co_position_not_set
33 | start_line_offset TYPE i DEFAULT if_adt_uri_mapper=>co_position_not_set
34 | end_line TYPE i DEFAULT if_adt_uri_mapper=>co_position_not_set
35 | end_line_offset TYPE i DEFAULT if_adt_uri_mapper=>co_position_not_set
36 | RETURNING
37 | VALUE(result) TYPE sadt_object_reference
38 | RAISING
39 | zcx_adcoset_static_error.
40 |
41 | "! Add positional fragment to uri
42 | METHODS add_position_fragment
43 | IMPORTING
44 | start_line TYPE i
45 | start_column TYPE i OPTIONAL
46 | end_line TYPE i OPTIONAL
47 | end_column TYPE i OPTIONAL
48 | CHANGING
49 | !link TYPE string.
50 |
51 | ENDINTERFACE.
52 |
--------------------------------------------------------------------------------
/src/zadcoset_csscope.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_CSSCOPE
7 | E
8 | TRANSP
9 | Scope for Code Search
10 | E
11 | X
12 | L
13 | 1
14 |
15 |
16 | ZADCOSET_CSSCOPE
17 | A
18 | 0
19 | APPL0
20 | N
21 |
22 |
23 |
24 | ID
25 | X
26 | SYSUUID_X16
27 | 0
28 | X
29 | E
30 |
31 |
32 | SCOPE_TYPE
33 | ZADCOSET_SCOPE_TYPE
34 | 0
35 | X
36 | F
37 | E
38 |
39 |
40 | EXPIRATION_DATETIME
41 | TIMESTAMPL
42 | 0
43 | E
44 |
45 |
46 | CREATED_BY
47 | RESPONSIBL
48 | 0
49 | D
50 | E
51 |
52 |
53 | RANGES_DATA
54 | 0
55 | y
56 | 000008
57 | RSTR
58 | RSTR
59 | Serialized ranges for the object scope
60 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_reposrc.clas.abap:
--------------------------------------------------------------------------------
1 | "! Source code reader for objects stored in TRDIR
2 | CLASS zcl_adcoset_scr_reposrc DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_src_code_reader.
8 |
9 | METHODS constructor
10 | IMPORTING
11 | is_multiline TYPE abap_bool
12 | line_feed TYPE string.
13 |
14 | PRIVATE SECTION.
15 | CONSTANTS c_default_comment_regex TYPE string VALUE '^(\*|\s*")'.
16 | CONSTANTS c_bdef_comment_regex TYPE string VALUE '^\s*(//|/\*)'.
17 |
18 | DATA line_feed TYPE string.
19 | DATA is_multiline TYPE abap_bool.
20 | ENDCLASS.
21 |
22 |
23 | CLASS zcl_adcoset_scr_reposrc IMPLEMENTATION.
24 | METHOD constructor.
25 | me->line_feed = line_feed.
26 | me->is_multiline = is_multiline.
27 | ENDMETHOD.
28 |
29 | METHOD zif_adcoset_src_code_reader~get_source_code.
30 | DATA source TYPE string_table.
31 |
32 | READ REPORT name INTO source.
33 | IF sy-subrc <> 0 OR source IS INITIAL.
34 | RAISE EXCEPTION TYPE zcx_adcoset_src_code_read.
35 | ENDIF.
36 |
37 | IF is_multiline = abap_true.
38 | zcl_adcoset_string_util=>transform_to_string( EXPORTING source_table = source
39 | line_feed = line_feed
40 | IMPORTING source_text = DATA(source_text)
41 | indexes = DATA(indexes) ).
42 |
43 | source = VALUE #( ( source_text ) ).
44 | ENDIF.
45 |
46 | result = NEW zcl_adcoset_source_code( source = source
47 | line_indexes = indexes
48 | comment_regex = COND #(
49 | WHEN type = zif_adcoset_c_global=>c_source_code_type-behavior_definition
50 | THEN c_bdef_comment_regex
51 | ELSE c_default_comment_regex ) ).
52 | ENDMETHOD.
53 | ENDCLASS.
54 |
--------------------------------------------------------------------------------
/src/parl/zadcoset_parallel.fugr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Parallel functions for code search
6 |
7 | LZADCOSET_PARALLELTOP
8 | SAPLZADCOSET_PARALLEL
9 |
10 |
11 | -
12 |
ZADCOSET_NEW_TASK
13 | R
14 | Starts new parallel task
15 |
16 |
17 | INPUT
18 | XSTRING
19 |
20 |
21 | HANDLER_CLASS
22 | STRING
23 |
24 |
25 | HANDLER_METHOD
26 | SEOCPDNAME
27 |
28 |
29 |
30 |
31 | OUTPUT
32 | XSTRING
33 |
34 |
35 |
36 |
37 | INVALID_HANDLER
38 |
39 |
40 | ERROR
41 |
42 |
43 |
44 |
45 | INPUT
46 | P
47 |
48 |
49 | HANDLER_CLASS
50 | P
51 |
52 |
53 | HANDLER_METHOD
54 | P
55 |
56 |
57 | OUTPUT
58 | P
59 |
60 |
61 | INVALID_HANDLER
62 | X
63 |
64 |
65 | ERROR
66 | X
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scs_standard.clas.abap:
--------------------------------------------------------------------------------
1 | "! Standard Source Code Searcher
2 | CLASS zcl_adcoset_scs_standard DEFINITION
3 | PUBLIC
4 | INHERITING FROM zcl_adcoset_scs_base FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 | INTERFACES zif_adcoset_src_code_searcher.
9 |
10 | METHODS constructor
11 | IMPORTING
12 | match_all TYPE abap_bool
13 | ignore_comment_lines TYPE abap_bool
14 | matchers TYPE zif_adcoset_pattern_matcher=>ty_ref_tab.
15 |
16 | PROTECTED SECTION.
17 |
18 | PRIVATE SECTION.
19 | DATA match_all TYPE abap_bool.
20 | ENDCLASS.
21 |
22 |
23 | CLASS zcl_adcoset_scs_standard IMPLEMENTATION.
24 | METHOD constructor.
25 | super->constructor( ignore_comment_lines = ignore_comment_lines
26 | matchers = matchers ).
27 | me->match_all = match_all.
28 | ENDMETHOD.
29 |
30 | METHOD zif_adcoset_src_code_searcher~search.
31 | " set the source code attribute for this search call
32 | me->source_code = source_code.
33 |
34 | LOOP AT matchers INTO DATA(matcher).
35 | TRY.
36 | DATA(raw_matches) = matcher->find_matches( source_code->content ).
37 | CATCH zcx_adcoset_pattern_sh_error INTO DATA(error).
38 | zcl_adcoset_log=>add_exception( error ).
39 | IF match_all = abap_true.
40 | CLEAR result.
41 | RETURN.
42 | ENDIF.
43 | ENDTRY.
44 | IF raw_matches IS NOT INITIAL.
45 | DATA(enhanced_matches) = enhance_matches( raw_matches = raw_matches
46 | ignore_comment_lines = ignore_comment_lines ).
47 | ENDIF.
48 |
49 | " not all matchers found a match so quit further searching
50 | IF enhanced_matches IS NOT INITIAL.
51 | result = VALUE #( BASE result ( LINES OF enhanced_matches ) ).
52 | ELSEIF match_all = abap_true.
53 | CLEAR result.
54 | RETURN.
55 | ENDIF.
56 |
57 | CLEAR:
58 | raw_matches,
59 | enhanced_matches.
60 | ENDLOOP.
61 | ENDMETHOD.
62 | ENDCLASS.
63 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_adt_plugin_features.xslt.source.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_csp_repsrc_default.clas.abap:
--------------------------------------------------------------------------------
1 | "! Default search provider for repository source code search
2 | CLASS zcl_adcoset_csp_repsrc_default DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_code_search_prov.
8 |
9 | "! Creates new instance of a default search provider
10 | METHODS constructor.
11 |
12 | PRIVATE SECTION.
13 | METHODS get_include
14 | IMPORTING
15 | object_info TYPE zif_adcoset_ty_global=>ty_tadir_object_info
16 | RETURNING
17 | VALUE(result) TYPE progname.
18 | ENDCLASS.
19 |
20 |
21 | CLASS zcl_adcoset_csp_repsrc_default IMPLEMENTATION.
22 | METHOD constructor.
23 | ENDMETHOD.
24 |
25 | METHOD zif_adcoset_code_search_prov~search.
26 | DATA(include_name) = get_include( object-info ).
27 |
28 | IF include_name IS INITIAL.
29 | RETURN.
30 | ENDIF.
31 |
32 | TRY.
33 | DATA(source) = src_code_reader->get_source_code( name = include_name
34 | type = object-type ).
35 |
36 | LOOP AT src_code_searcher->search( source ) ASSIGNING FIELD-SYMBOL().
37 | -object_name = include_name.
38 | result = VALUE #( BASE result ( ) ).
39 | ENDLOOP.
40 |
41 | CATCH zcx_adcoset_src_code_read.
42 | ENDTRY.
43 |
44 | zcl_adcoset_search_protocol=>increment_searched_srcs_count( ).
45 | ENDMETHOD.
46 |
47 | METHOD get_include.
48 | DATA include_suffix TYPE string.
49 |
50 | CASE object_info-type.
51 |
52 | WHEN zif_adcoset_c_global=>c_source_code_type-interface.
53 | include_suffix = 'IU'.
54 |
55 | WHEN zif_adcoset_c_global=>c_source_code_type-behavior_definition.
56 | include_suffix = 'BD'.
57 |
58 | WHEN zif_adcoset_c_global=>c_source_code_type-simple_transformation.
59 | include_suffix = 'XT'.
60 |
61 | WHEN zif_adcoset_c_global=>c_source_code_type-type_group.
62 | result = |%_C{ object_info-name }|.
63 |
64 | ENDCASE.
65 |
66 | IF result IS INITIAL AND include_suffix IS NOT INITIAL.
67 | result = object_info-name.
68 | TRANSLATE result(30) USING ' ='.
69 | result+30 = include_suffix.
70 | ENDIF.
71 | ENDMETHOD.
72 | ENDCLASS.
73 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_protocol.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ADCOSET_SEARCH_PROTOCOL
7 | E
8 | Protocol that collects information during code search
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | ADD_LOC
17 | E
18 | Adds Lines of Code to total searched LoC
19 |
20 |
21 | GET_LOC
22 | E
23 | Retrieves searched Lines of Code
24 |
25 |
26 | GET_SEARCHED_OBJECT_COUNT
27 | E
28 | Returns count of searched objects
29 |
30 |
31 | GET_SEARCHED_SOURCES_COUNT
32 | E
33 | Returns count of searched sources
34 |
35 |
36 | INCREASE_SEARCHD_OBJECTS_COUNT
37 | E
38 | Increases count of searched objects with the given value
39 |
40 |
41 | INCREASE_SEARCHD_SOURCES_COUNT
42 | E
43 | Increases count of searched sources with the given value
44 |
45 |
46 | INCREMENT_SEARCHED_OBJS_COUNT
47 | E
48 | Increments the count of searched objects
49 |
50 |
51 | INCREMENT_SEARCHED_SRCS_COUNT
52 | E
53 | Increments the count of searched sources
54 |
55 |
56 | RESET
57 | E
58 | Resets the protocol values
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_dcls.clas.abap:
--------------------------------------------------------------------------------
1 | "! Source code reader for CDS Access Controls
2 | CLASS zcl_adcoset_scr_dcls DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_src_code_reader.
8 |
9 | METHODS constructor
10 | IMPORTING
11 | is_multiline TYPE abap_bool
12 | line_feed TYPE string.
13 |
14 | PRIVATE SECTION.
15 | DATA line_feed TYPE string.
16 | DATA is_multiline TYPE abap_bool.
17 |
18 | METHODS read_dcls
19 | IMPORTING
20 | !name TYPE acmdclsrc-dclname
21 | RETURNING
22 | VALUE(result) TYPE string
23 | RAISING
24 | zcx_adcoset_src_code_read.
25 | ENDCLASS.
26 |
27 |
28 | CLASS zcl_adcoset_scr_dcls IMPLEMENTATION.
29 | METHOD constructor.
30 | me->line_feed = line_feed.
31 | me->is_multiline = is_multiline.
32 | ENDMETHOD.
33 |
34 | METHOD zif_adcoset_src_code_reader~get_source_code.
35 | DATA source TYPE TABLE OF string.
36 | DATA indexes TYPE zif_adcoset_source_code=>ty_line_indexes.
37 |
38 | DATA(source_text) = read_dcls( name ).
39 |
40 | IF is_multiline = abap_true.
41 | indexes = zcl_adcoset_string_util=>determine_line_indexes( source_text = source_text
42 | line_feed = line_feed ).
43 | source = VALUE #( ( source_text ) ).
44 | ELSE.
45 | SPLIT source_text AT line_feed INTO TABLE source.
46 | ENDIF.
47 |
48 | result = NEW zcl_adcoset_source_code( source = source
49 | line_indexes = indexes
50 | comment_regex = zif_adcoset_c_global=>c_cds_comment_regex ).
51 | ENDMETHOD.
52 |
53 | METHOD read_dcls.
54 | DATA(ddlname) = to_upper( name ).
55 |
56 | SELECT SINGLE source FROM acmdclsrc
57 | WHERE dclname = @ddlname
58 | AND as4local = 'A' " only active source
59 | INTO @result.
60 |
61 | IF sy-subrc <> 0 OR result IS INITIAL.
62 | RAISE EXCEPTION TYPE zcx_adcoset_src_code_read.
63 | ENDIF.
64 |
65 | " handle line feed
66 | result = zcl_adcoset_string_util=>adjust_line_endings( text = result
67 | line_feed = line_feed ).
68 | ENDMETHOD.
69 | ENDCLASS.
70 |
--------------------------------------------------------------------------------
/src/zadcoset_csset.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZADCOSET_CSSET
7 | E
8 | TRANSP
9 | Code Search Settings
10 | E
11 | A
12 | 1
13 |
14 |
15 | ZADCOSET_CSSET
16 | A
17 | 0
18 | APPL0
19 | N
20 |
21 |
22 |
23 | UNAME
24 | X
25 | UNAME
26 | 0
27 | X
28 | E
29 |
30 |
31 | PCRE_EXT_MODE_DISABLED
32 | XFELD
33 | 0
34 | X
35 | F
36 | E
37 |
38 |
39 | PCRE_SINGLE_LINE_ENABLED
40 | XFELD
41 | 0
42 | X
43 | F
44 | E
45 |
46 |
47 | PARALLEL_ENABLED
48 | XFELD
49 | 0
50 | X
51 | F
52 | E
53 |
54 |
55 | PARALLEL_SERVER_GROUP
56 | RZLLI_APCL
57 | 0
58 | E
59 |
60 |
61 | PARALLEL_PROC_PACK_SIZE
62 | 0
63 | X
64 | 000004
65 | INT4
66 | 000010
67 | INT4
68 | Number of objects to process in a single parallel API call
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_srvd.clas.abap:
--------------------------------------------------------------------------------
1 | "! Source code reader for Service Definition
2 | CLASS zcl_adcoset_scr_srvd DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_src_code_reader.
8 |
9 | METHODS constructor
10 | IMPORTING
11 | is_multiline TYPE abap_bool
12 | line_feed TYPE string.
13 |
14 | PRIVATE SECTION.
15 | CONSTANTS c_srvd_tabname TYPE tabname VALUE 'SRVDSRC_SRC'.
16 |
17 | DATA is_multiline TYPE abap_bool.
18 | DATA line_feed TYPE string.
19 | DATA is_baseinfo_supported TYPE abap_bool.
20 |
21 | METHODS read_srvd
22 | IMPORTING
23 | !name TYPE zif_adcoset_ty_global=>ty_srvdname
24 | RETURNING
25 | VALUE(result) TYPE string
26 | RAISING
27 | zcx_adcoset_src_code_read..
28 | ENDCLASS.
29 |
30 |
31 | CLASS zcl_adcoset_scr_srvd IMPLEMENTATION.
32 | METHOD constructor.
33 | me->line_feed = line_feed.
34 | me->is_multiline = is_multiline.
35 | ENDMETHOD.
36 |
37 | METHOD zif_adcoset_src_code_reader~get_source_code.
38 | DATA source TYPE TABLE OF string.
39 | DATA indexes TYPE zif_adcoset_source_code=>ty_line_indexes.
40 |
41 | DATA(source_text) = read_srvd( name ).
42 |
43 | IF is_multiline = abap_true.
44 | indexes = zcl_adcoset_string_util=>determine_line_indexes( source_text = source_text
45 | line_feed = line_feed ).
46 | source = VALUE #( ( source_text ) ).
47 | ELSE.
48 | SPLIT source_text AT line_feed INTO TABLE source.
49 | ENDIF.
50 |
51 | result = NEW zcl_adcoset_source_code( source = source
52 | line_indexes = indexes ).
53 | ENDMETHOD.
54 |
55 | METHOD read_srvd.
56 | DATA(srvd_name) = to_upper( name ).
57 |
58 | SELECT SINGLE source
59 | FROM (c_srvd_tabname)
60 | WHERE srvdname = @srvd_name
61 | AND version = 'A' " only active source
62 | INTO @result.
63 |
64 | IF sy-subrc <> 0 OR result IS INITIAL.
65 | RAISE EXCEPTION TYPE zcx_adcoset_src_code_read.
66 | ENDIF.
67 |
68 | " handle line feed
69 | result = zcl_adcoset_string_util=>adjust_line_endings( text = result
70 | line_feed = line_feed ).
71 | ENDMETHOD.
72 | ENDCLASS.
73 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_ddlx.clas.abap:
--------------------------------------------------------------------------------
1 | "! Source code reader for metadata extensions
2 | CLASS zcl_adcoset_scr_ddlx DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_src_code_reader.
8 |
9 | METHODS constructor
10 | IMPORTING
11 | is_multiline TYPE abap_bool
12 | line_feed TYPE string.
13 |
14 | PRIVATE SECTION.
15 | CONSTANTS c_ddlx_tabname TYPE tabname VALUE 'DDLXSRC_SRC'.
16 |
17 | DATA line_feed TYPE string.
18 | DATA is_multiline TYPE abap_bool.
19 |
20 | METHODS read_ddlx
21 | IMPORTING
22 | !name TYPE zif_adcoset_ty_global=>ty_ddlxname
23 | RETURNING
24 | VALUE(result) TYPE string
25 | RAISING
26 | zcx_adcoset_src_code_read.
27 | ENDCLASS.
28 |
29 |
30 | CLASS zcl_adcoset_scr_ddlx IMPLEMENTATION.
31 | METHOD constructor.
32 | me->line_feed = line_feed.
33 | me->is_multiline = is_multiline.
34 | ENDMETHOD.
35 |
36 | METHOD zif_adcoset_src_code_reader~get_source_code.
37 | DATA source TYPE TABLE OF string.
38 | DATA indexes TYPE zif_adcoset_source_code=>ty_line_indexes.
39 |
40 | DATA(source_text) = read_ddlx( name ).
41 |
42 | IF is_multiline = abap_true.
43 | indexes = zcl_adcoset_string_util=>determine_line_indexes( source_text = source_text
44 | line_feed = line_feed ).
45 | source = VALUE #( ( source_text ) ).
46 | ELSE.
47 | SPLIT source_text AT line_feed INTO TABLE source.
48 | ENDIF.
49 |
50 | result = NEW zcl_adcoset_source_code( source = source
51 | line_indexes = indexes
52 | comment_regex = zif_adcoset_c_global=>c_cds_comment_regex ).
53 | ENDMETHOD.
54 |
55 | METHOD read_ddlx.
56 | DATA(ddlx_name) = to_upper( name ).
57 |
58 | SELECT SINGLE source
59 | FROM (c_ddlx_tabname)
60 | WHERE ddlxname = @ddlx_name
61 | AND version = 'A' " only active source
62 | INTO @result.
63 |
64 | IF sy-subrc <> 0 OR result IS INITIAL.
65 | RAISE EXCEPTION TYPE zcx_adcoset_src_code_read.
66 | ENDIF.
67 |
68 | " handle line feed
69 | result = zcl_adcoset_string_util=>adjust_line_endings( text = result
70 | line_feed = line_feed ).
71 | ENDMETHOD.
72 | ENDCLASS.
73 |
--------------------------------------------------------------------------------
/src/adt/zcx_adcoset_adt_rest.clas.abap:
--------------------------------------------------------------------------------
1 | "! General ADT error
2 | CLASS zcx_adcoset_adt_rest DEFINITION
3 | PUBLIC
4 | INHERITING FROM cx_adt_rest FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 | "! CONSTRUCTOR
9 | METHODS constructor
10 | IMPORTING
11 | textid LIKE if_t100_message=>t100key OPTIONAL
12 | !text TYPE string OPTIONAL
13 | !previous LIKE previous OPTIONAL
14 | subtype TYPE sadt_exc_type OPTIONAL
15 | !properties TYPE REF TO if_adt_exception_properties OPTIONAL.
16 |
17 | METHODS get_http_status REDEFINITION.
18 | METHODS get_namespace REDEFINITION.
19 | METHODS get_type REDEFINITION.
20 |
21 | PROTECTED SECTION.
22 |
23 | PRIVATE SECTION.
24 | ENDCLASS.
25 |
26 |
27 | CLASS zcx_adcoset_adt_rest IMPLEMENTATION.
28 | METHOD constructor ##ADT_SUPPRESS_GENERATION.
29 | " TODO: parameter TEXTID is never used (ABAP cleaner)
30 |
31 | DATA fill_t100key TYPE abap_bool.
32 |
33 | super->constructor( previous = previous
34 | subtype = subtype
35 | msgv1 = msgv1
36 | msgv2 = msgv2
37 | msgv3 = msgv3
38 | msgv4 = msgv4
39 | properties = properties ).
40 |
41 | IF text IS NOT INITIAL.
42 | fill_t100key = abap_true.
43 | zcl_adcoset_message_util=>split_string_to_symsg( text ).
44 | ELSEIF sy-msgid IS NOT INITIAL.
45 | fill_t100key = abap_true.
46 | ENDIF.
47 |
48 | IF fill_t100key = abap_true.
49 | msgv1 = sy-msgv1.
50 | msgv2 = sy-msgv2.
51 | msgv3 = sy-msgv3.
52 | msgv4 = sy-msgv4.
53 | if_t100_message~t100key = VALUE #( msgid = sy-msgid
54 | msgno = sy-msgno
55 | attr1 = 'MSGV1'
56 | attr2 = 'MSGV2'
57 | attr3 = 'MSGV3'
58 | attr4 = 'MSGV4' ).
59 | ELSE.
60 | if_t100_message~t100key = if_t100_message=>default_textid.
61 | ENDIF.
62 | ENDMETHOD.
63 |
64 | METHOD get_http_status.
65 | result = cl_rest_status_code=>gc_server_error_internal.
66 | ENDMETHOD.
67 |
68 | METHOD get_namespace.
69 | result = 'com.devepos.adt.cst'.
70 | ENDMETHOD.
71 |
72 | METHOD get_type.
73 | result = 'General'.
74 | ENDMETHOD.
75 | ENDCLASS.
76 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_ch_factory.clas.abap:
--------------------------------------------------------------------------------
1 | "! ADT content handler factory
2 | CLASS zcl_adcoset_adt_ch_factory DEFINITION
3 | PUBLIC FINAL
4 | CREATE PRIVATE.
5 |
6 | PUBLIC SECTION.
7 | "! Creates content handler for feature list
8 | CLASS-METHODS create_feature_list_ch
9 | RETURNING
10 | VALUE(result) TYPE REF TO if_adt_rest_content_handler.
11 |
12 | "! Creates content handler for code search settings
13 | CLASS-METHODS create_cs_settings_ch
14 | RETURNING
15 | VALUE(result) TYPE REF TO if_adt_rest_content_handler.
16 |
17 | "! Creates content handler for code search result
18 | CLASS-METHODS create_search_result_ch
19 | RETURNING
20 | VALUE(result) TYPE REF TO if_adt_rest_content_handler.
21 |
22 | "! Creates content handler for Code Search Scope
23 | CLASS-METHODS create_search_scope_ch
24 | RETURNING
25 | VALUE(result) TYPE REF TO if_adt_rest_content_handler.
26 |
27 | "! Creates content handler for Code Search Scope Parameters
28 | CLASS-METHODS create_search_scope_params_ch
29 | RETURNING
30 | VALUE(result) TYPE REF TO if_adt_rest_content_handler.
31 | ENDCLASS.
32 |
33 |
34 | CLASS zcl_adcoset_adt_ch_factory IMPLEMENTATION.
35 | METHOD create_feature_list_ch.
36 | result = cl_adt_rest_st_handler=>create_instance( st_name = 'ZADCOSET_ADT_PLUGIN_FEATURES'
37 | root_name = 'PLUGIN_FEATURES' ).
38 | ENDMETHOD.
39 |
40 | METHOD create_cs_settings_ch.
41 | result = cl_adt_rest_st_handler=>create_instance( st_name = 'ZADCOSET_SEARCH_SETTINGS'
42 | root_name = 'SETTINGS' ).
43 | ENDMETHOD.
44 |
45 | METHOD create_search_result_ch.
46 | result = cl_adt_rest_st_handler=>create_instance( st_name = 'ZADCOSET_SEARCH_RESULT'
47 | root_name = 'ROOT' ).
48 | ENDMETHOD.
49 |
50 | METHOD create_search_scope_ch.
51 | result = cl_adt_rest_st_handler=>create_instance( st_name = 'ZADCOSET_SEARCH_SCOPE'
52 | root_name = 'SCOPE' ).
53 | ENDMETHOD.
54 |
55 | METHOD create_search_scope_params_ch.
56 | result = cl_adt_rest_st_handler=>create_instance( st_name = 'ZADCOSET_SEARCH_SCOPE_PARAMS'
57 | root_name = 'SCOPE_PARAMS' ).
58 | ENDMETHOD.
59 | ENDCLASS.
60 |
--------------------------------------------------------------------------------
/src/adt/zcl_adcoset_adt_res_cs_config.clas.abap:
--------------------------------------------------------------------------------
1 | "! Resource to handle user specific settings of Code Search
2 | CLASS zcl_adcoset_adt_res_cs_config DEFINITION
3 | PUBLIC
4 | INHERITING FROM cl_adt_rest_resource FINAL
5 | CREATE PUBLIC.
6 |
7 | PUBLIC SECTION.
8 | METHODS get REDEFINITION.
9 | METHODS put REDEFINITION.
10 |
11 | PROTECTED SECTION.
12 |
13 | PRIVATE SECTION.
14 | METHODS validate_settings
15 | IMPORTING
16 | settings TYPE zif_adcoset_ty_adt_types=>ty_code_search_settings
17 | RAISING
18 | cx_adt_rest.
19 |
20 | METHODS complete_settings
21 | CHANGING
22 | settings TYPE zif_adcoset_ty_adt_types=>ty_code_search_settings.
23 | ENDCLASS.
24 |
25 |
26 | CLASS zcl_adcoset_adt_res_cs_config IMPLEMENTATION.
27 | METHOD get.
28 | response->set_body_data( content_handler = zcl_adcoset_adt_ch_factory=>create_cs_settings_ch( )
29 | data = zcl_adcoset_search_settings=>get_settings( ) ).
30 | ENDMETHOD.
31 |
32 | METHOD put.
33 | DATA settings TYPE zif_adcoset_ty_adt_types=>ty_code_search_settings.
34 |
35 | request->get_body_data( EXPORTING content_handler = zcl_adcoset_adt_ch_factory=>create_cs_settings_ch( )
36 | IMPORTING data = settings ).
37 |
38 | validate_settings( settings ).
39 | complete_settings( CHANGING settings = settings ).
40 |
41 | MODIFY zadcoset_csset FROM settings.
42 | ENDMETHOD.
43 |
44 | METHOD validate_settings.
45 | IF settings-parallel_enabled = abap_false.
46 | RETURN.
47 | ENDIF.
48 |
49 | IF settings-parallel_server_group IS NOT INITIAL.
50 | SELECT SINGLE @abap_true FROM rzllitab
51 | WHERE classname = @settings-parallel_server_group
52 | AND grouptype = @zif_adcoset_c_global=>c_group_type_server_group
53 | INTO @DATA(group_exists).
54 |
55 | IF group_exists = abap_false.
56 | RAISE EXCEPTION TYPE zcx_adcoset_adt_rest
57 | EXPORTING text = |The server group '{ settings-parallel_server_group }' does not exist|.
58 | ENDIF.
59 | ENDIF.
60 |
61 | IF settings-parallel_proc_pack_size < zif_adcoset_c_global=>c_parl_proc_min_pack_size
62 | OR settings-parallel_proc_pack_size > zif_adcoset_c_global=>c_parl_proc_max_pack_size.
63 | RAISE EXCEPTION TYPE zcx_adcoset_adt_rest
64 | EXPORTING text = |Package size must be between {
65 | zif_adcoset_c_global=>c_parl_proc_min_pack_size NUMBER = USER } | &&
66 | |and { zif_adcoset_c_global=>c_parl_proc_max_pack_size NUMBER = USER }|.
67 | ENDIF.
68 | ENDMETHOD.
69 |
70 | METHOD complete_settings.
71 | settings-uname = sy-uname.
72 | IF settings-parallel_proc_pack_size IS INITIAL.
73 | settings-parallel_proc_pack_size = zif_adcoset_c_global=>c_parl_proc_min_pack_size.
74 | ENDIF.
75 | ENDMETHOD.
76 | ENDCLASS.
77 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_log.clas.abap:
--------------------------------------------------------------------------------
1 | "! Messages that occur during processing
2 | CLASS zcl_adcoset_log DEFINITION
3 | PUBLIC FINAL
4 | CREATE PRIVATE.
5 |
6 | PUBLIC SECTION.
7 | CLASS-METHODS add_exception
8 | IMPORTING
9 | !exception TYPE REF TO cx_root.
10 |
11 | "! Adds message
12 | CLASS-METHODS add_message
13 | IMPORTING
14 | !type TYPE string
15 | content TYPE string.
16 |
17 | "! Adds a list of messages
18 | CLASS-METHODS add_all_messages
19 | IMPORTING
20 | !messages TYPE zif_adcoset_ty_global=>ty_messages.
21 |
22 | "! Clears current list of messages
23 | CLASS-METHODS clear.
24 |
25 | "! Returns current list of messages
26 | CLASS-METHODS get_messages
27 | RETURNING
28 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_messages.
29 |
30 | PRIVATE SECTION.
31 | CLASS-DATA messages TYPE HASHED TABLE OF zif_adcoset_ty_global=>ty_message WITH UNIQUE KEY content.
32 | ENDCLASS.
33 |
34 |
35 | CLASS zcl_adcoset_log IMPLEMENTATION.
36 | METHOD add_exception.
37 | DATA error_message TYPE string.
38 |
39 | DATA(parent_exc) = exception.
40 |
41 | WHILE parent_exc IS BOUND OR error_message IS INITIAL.
42 | TRY.
43 | DATA(t100_message) = CAST if_t100_message( parent_exc ).
44 | IF t100_message->t100key-msgid = 'SY' AND t100_message->t100key-msgno = 530.
45 | parent_exc = parent_exc->previous.
46 | CONTINUE.
47 | ENDIF.
48 |
49 | CATCH cx_sy_move_cast_error.
50 | ENDTRY.
51 |
52 | " add all messages to the log??
53 | error_message = parent_exc->get_text( ).
54 | parent_exc = parent_exc->previous.
55 |
56 | ENDWHILE.
57 |
58 | IF error_message IS INITIAL AND exception IS BOUND.
59 | error_message = exception->get_text( ).
60 | ENDIF.
61 |
62 | add_message( type = zif_adcoset_c_global=>c_message_type-error
63 | content = error_message ).
64 | ENDMETHOD.
65 |
66 | METHOD add_message.
67 | CHECK content IS NOT INITIAL.
68 |
69 | ASSIGN messages[ content = content ] TO FIELD-SYMBOL().
70 | IF sy-subrc <> 0.
71 | INSERT VALUE #( type = type
72 | content = content
73 | occurrences = 1 ) INTO TABLE messages.
74 | ELSE.
75 | -occurrences = -occurrences + 1.
76 | ENDIF.
77 | ENDMETHOD.
78 |
79 | METHOD clear.
80 | CLEAR messages.
81 | ENDMETHOD.
82 |
83 | METHOD get_messages.
84 | result = messages.
85 | ENDMETHOD.
86 |
87 | METHOD add_all_messages.
88 | LOOP AT messages ASSIGNING FIELD-SYMBOL().
89 | INSERT INTO TABLE zcl_adcoset_log=>messages.
90 | ENDLOOP.
91 | ENDMETHOD.
92 | ENDCLASS.
93 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_substring_matcher.clas.abap:
--------------------------------------------------------------------------------
1 | "! Finds matches in a string for a given (RegExp) pattern
2 | CLASS zcl_adcoset_substring_matcher DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_pattern_matcher.
8 |
9 | METHODS constructor
10 | IMPORTING
11 | !pattern TYPE zif_adcoset_ty_global=>ty_pattern OPTIONAL
12 | ignore_case TYPE abap_bool.
13 |
14 | PRIVATE SECTION.
15 | ALIASES control_flags FOR zif_adcoset_pattern_matcher~control_flags.
16 |
17 | DATA pattern TYPE string.
18 | DATA ignore_case TYPE abap_bool.
19 | ENDCLASS.
20 |
21 |
22 | CLASS zcl_adcoset_substring_matcher IMPLEMENTATION.
23 | METHOD constructor.
24 | me->pattern = pattern-content.
25 | control_flags = pattern-flags.
26 | me->ignore_case = ignore_case.
27 | ENDMETHOD.
28 |
29 | METHOD zif_adcoset_pattern_matcher~find_matches.
30 | IF ignore_case = abap_true.
31 | FIND ALL OCCURRENCES OF pattern IN TABLE source IGNORING CASE RESULTS result.
32 | ELSE.
33 | FIND ALL OCCURRENCES OF pattern IN TABLE source RESPECTING CASE RESULTS result.
34 | ENDIF.
35 | ENDMETHOD.
36 |
37 | METHOD zif_adcoset_pattern_matcher~find_matches_in_range.
38 | IF ignore_case = abap_true.
39 | FIND ALL OCCURRENCES OF pattern IN TABLE source
40 | FROM start_line OFFSET offset
41 | TO end_line OFFSET end_offset
42 | IGNORING CASE RESULTS result.
43 | ELSE.
44 | FIND ALL OCCURRENCES OF pattern IN TABLE source
45 | FROM start_line OFFSET offset
46 | TO end_line OFFSET end_offset
47 | RESPECTING CASE RESULTS result.
48 | ENDIF.
49 | ENDMETHOD.
50 |
51 | METHOD zif_adcoset_pattern_matcher~find_next_match.
52 | DATA(l_start_line) = COND #( WHEN start_line IS INITIAL THEN 1 ELSE start_line ).
53 |
54 | IF ignore_case = abap_true.
55 | IF end_line IS NOT INITIAL AND end_offset IS NOT INITIAL.
56 | FIND FIRST OCCURRENCE OF pattern IN TABLE source
57 | FROM l_start_line OFFSET offset
58 | TO end_line OFFSET end_offset
59 | IGNORING CASE
60 | RESULTS result.
61 | ELSE.
62 | FIND FIRST OCCURRENCE OF pattern IN TABLE source
63 | FROM l_start_line OFFSET offset
64 | IGNORING CASE
65 | RESULTS result.
66 | ENDIF.
67 | ELSE.
68 | IF end_line IS NOT INITIAL AND end_offset IS NOT INITIAL.
69 | FIND FIRST OCCURRENCE OF pattern IN TABLE source
70 | FROM l_start_line OFFSET offset
71 | TO end_line OFFSET end_offset
72 | RESPECTING CASE
73 | RESULTS result.
74 | ELSE.
75 | FIND FIRST OCCURRENCE OF pattern IN TABLE source
76 | FROM l_start_line OFFSET offset
77 | RESPECTING CASE
78 | RESULTS result.
79 | ENDIF.
80 | ENDIF.
81 | ENDMETHOD.
82 | ENDCLASS.
83 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_parl_search_query.clas.abap:
--------------------------------------------------------------------------------
1 | "! Query for code search (with parallel processing)
2 | CLASS zcl_adcoset_parl_search_query DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_search_query.
8 | INTERFACES zif_adcoset_parl_result_recv.
9 |
10 | METHODS constructor
11 | IMPORTING
12 | !scope TYPE REF TO zif_adcoset_search_scope
13 | task_runner TYPE REF TO zif_adcoset_parl_task_runner
14 | settings TYPE zif_adcoset_ty_global=>ty_search_settings_int.
15 |
16 | PRIVATE SECTION.
17 | DATA scope TYPE REF TO zif_adcoset_search_scope.
18 | DATA task_runner TYPE REF TO zif_adcoset_parl_task_runner.
19 | DATA settings TYPE zif_adcoset_ty_global=>ty_search_settings_int.
20 | DATA search_results TYPE zif_adcoset_ty_global=>ty_search_result_objects.
21 | ENDCLASS.
22 |
23 |
24 | CLASS zcl_adcoset_parl_search_query IMPLEMENTATION.
25 | METHOD constructor.
26 | ASSERT:
27 | scope IS BOUND,
28 | task_runner IS BOUND.
29 |
30 | me->scope = scope.
31 | me->task_runner = task_runner.
32 | me->settings = settings.
33 |
34 | " registers this instance as result receiver
35 | me->task_runner->set_result_receiver( me ).
36 | ENDMETHOD.
37 |
38 | METHOD zif_adcoset_parl_result_recv~send_results.
39 | FIELD-SYMBOLS TYPE zif_adcoset_ty_global=>ty_search_package_result.
40 |
41 | ASSIGN results TO .
42 | IF sy-subrc <> 0.
43 | RETURN.
44 | ENDIF.
45 |
46 | LOOP AT -result_objects REFERENCE INTO DATA(result_object).
47 | INSERT result_object->* INTO TABLE search_results.
48 | IF sy-subrc <> 0.
49 | DATA(existing_object) = REF #( search_results[ object_info-name = result_object->object_info-name
50 | object_info-type = result_object->object_info-type ] ).
51 | INSERT LINES OF result_object->text_matches INTO TABLE existing_object->text_matches.
52 | ENDIF.
53 | ENDLOOP.
54 | zcl_adcoset_log=>add_all_messages( -messages ).
55 | zcl_adcoset_search_protocol=>increase_searchd_objects_count( -searched_objects_count ).
56 | zcl_adcoset_search_protocol=>increase_searchd_sources_count( -searched_sources_count ).
57 | zcl_adcoset_search_protocol=>add_loc( -loc ).
58 | ENDMETHOD.
59 |
60 | METHOD zif_adcoset_search_query~run.
61 | WHILE scope->has_next_package( ).
62 | DATA(package) = scope->next_package( ).
63 |
64 | " process new package asynchronously
65 | task_runner->run( input = VALUE zif_adcoset_ty_global=>ty_search_package( settings = settings
66 | scope_package = package ) ).
67 | ENDWHILE.
68 |
69 | task_runner->wait_until_finished( ).
70 | ENDMETHOD.
71 |
72 | METHOD zif_adcoset_search_query~get_results.
73 | result = search_results.
74 | ENDMETHOD.
75 | ENDCLASS.
76 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_scr_ddls.clas.abap:
--------------------------------------------------------------------------------
1 | "! Source code reader for CDS view
2 | CLASS zcl_adcoset_scr_ddls DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | INTERFACES zif_adcoset_src_code_reader.
8 |
9 | METHODS constructor
10 | IMPORTING
11 | is_multiline TYPE abap_bool
12 | line_feed TYPE string.
13 |
14 | PRIVATE SECTION.
15 | DATA is_multiline TYPE abap_bool.
16 | DATA line_feed TYPE string.
17 | DATA is_baseinfo_supported TYPE abap_bool.
18 |
19 | METHODS read_ddls
20 | IMPORTING
21 | !name TYPE ddlname
22 | RETURNING
23 | VALUE(result) TYPE string
24 | RAISING
25 | zcx_adcoset_src_code_read.
26 |
27 | METHODS check_base_info_support.
28 | ENDCLASS.
29 |
30 |
31 | CLASS zcl_adcoset_scr_ddls IMPLEMENTATION.
32 | METHOD constructor.
33 | me->line_feed = line_feed.
34 | me->is_multiline = is_multiline.
35 | check_base_info_support( ).
36 | ENDMETHOD.
37 |
38 | METHOD zif_adcoset_src_code_reader~get_source_code.
39 | DATA source TYPE TABLE OF string.
40 | DATA indexes TYPE zif_adcoset_source_code=>ty_line_indexes.
41 |
42 | DATA(source_text) = read_ddls( name ).
43 |
44 | IF is_multiline = abap_true.
45 | indexes = zcl_adcoset_string_util=>determine_line_indexes( source_text = source_text
46 | line_feed = line_feed ).
47 | source = VALUE #( ( source_text ) ).
48 | ELSE.
49 | SPLIT source_text AT line_feed INTO TABLE source.
50 | ENDIF.
51 |
52 | result = NEW zcl_adcoset_source_code( source = source
53 | line_indexes = indexes
54 | comment_regex = zif_adcoset_c_global=>c_cds_comment_regex ).
55 | ENDMETHOD.
56 |
57 | METHOD read_ddls.
58 | DATA(ddlname) = to_upper( name ).
59 |
60 | SELECT SINGLE source FROM ddddlsrc
61 | WHERE ddlname = @ddlname
62 | AND as4local = 'A' " only active source
63 | INTO @result.
64 |
65 | IF sy-subrc <> 0 OR result IS INITIAL.
66 | RAISE EXCEPTION TYPE zcx_adcoset_src_code_read.
67 | ELSEIF is_baseinfo_supported = abap_false.
68 | RETURN.
69 | ENDIF.
70 |
71 | " handle line feed
72 | result = zcl_adcoset_string_util=>adjust_line_endings( text = result
73 | line_feed = line_feed ).
74 |
75 | " remove base info string which is not externally visible anyway
76 | DATA(base_info_offset) = find( val = result regex = '\s*[\r\n|\n]\s*/\*\+\[internal\]' ).
77 |
78 | IF base_info_offset > 0.
79 | result = substring( val = result len = base_info_offset ).
80 | ENDIF.
81 | ENDMETHOD.
82 |
83 | METHOD check_base_info_support.
84 | " TODO: variable is assigned but never used (ABAP cleaner)
85 | ASSIGN 'IF_DD_DDL_TYPES=>TY_S_BASEINFO_STRING_SAVE' TO FIELD-SYMBOL().
86 | is_baseinfo_supported = xsdbool( sy-subrc = 0 ).
87 | ENDMETHOD.
88 | ENDCLASS.
89 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_query_fac.clas.abap:
--------------------------------------------------------------------------------
1 | "! Factory for creating search queries
2 | CLASS zcl_adcoset_search_query_fac DEFINITION
3 | PUBLIC FINAL
4 | CREATE PRIVATE.
5 |
6 | PUBLIC SECTION.
7 | "! Creates query instance
8 | CLASS-METHODS create_query
9 | IMPORTING
10 | parallel_processing TYPE zif_adcoset_ty_global=>ty_parl_processing OPTIONAL
11 | !scope TYPE REF TO zif_adcoset_search_scope
12 | settings TYPE zif_adcoset_ty_global=>ty_search_settings_int
13 | RETURNING
14 | VALUE(result) TYPE REF TO zif_adcoset_search_query
15 | RAISING
16 | zcx_adcoset_static_error.
17 | ENDCLASS.
18 |
19 |
20 | CLASS zcl_adcoset_search_query_fac IMPLEMENTATION.
21 | METHOD create_query.
22 | DATA task_runner TYPE REF TO zif_adcoset_parl_task_runner.
23 |
24 | DATA(run_parallel) = parallel_processing-enabled.
25 |
26 | IF scope->count( ) < zif_adcoset_c_global=>c_parl_proc_min_objects.
27 | run_parallel = abap_false.
28 | ENDIF.
29 |
30 | IF run_parallel = abap_true.
31 | TRY.
32 | task_runner = zcl_adcoset_parl_task_runner=>new( server_group = parallel_processing-server_group
33 | * task_prefix =
34 | * max_tasks = 10
35 | " TODO: move handler_class/handler_method to parallel settings???
36 | handler_class = 'ZCL_ADCOSET_SEARCH_ENGINE'
37 | handler_method = 'RUN_CODE_SEARCH_ARFC' ).
38 |
39 | IF settings-is_adt = abap_true.
40 | DATA(max_objs_for_parl_proc) = zcl_adcoset_search_settings=>get_settings( )-parallel_proc_pack_size.
41 | ENDIF.
42 |
43 | " update the package size
44 | scope->configure_package_size( max_task_count = task_runner->get_max_tasks( )
45 | max_objects = max_objs_for_parl_proc ).
46 | CATCH zcx_adcoset_static_error INTO DATA(error) ##NEEDED.
47 | zcl_adcoset_log=>add_exception( error ).
48 | ENDTRY.
49 | ENDIF.
50 |
51 | result = COND #(
52 | WHEN task_runner IS BOUND
53 | THEN NEW zcl_adcoset_parl_search_query( task_runner = task_runner
54 | scope = scope
55 | settings = settings )
56 | ELSE NEW zcl_adcoset_search_query( scope = scope
57 | settings = settings-basic_settings
58 | custom_settings = settings-custom_settings
59 | matchers = zcl_adcoset_matcher_factory=>create_matchers(
60 | pattern_config = settings-pattern_config ) ) ).
61 | ENDMETHOD.
62 | ENDCLASS.
63 |
--------------------------------------------------------------------------------
/src/zif_adcoset_ty_global.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_ADCOSET_TY_GLOBAL
7 | E
8 | Global types for advanced code search
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 | TY_MATCH_IDENTIFIER
16 | E
17 | Uniquely identifies a match
18 |
19 |
20 | TY_PARALLEL_HANDLER
21 | E
22 | Param definitions for parallel processing handler
23 |
24 |
25 | TY_SEARCH_OPTION
26 | E
27 | Represents search option with its values
28 |
29 |
30 | TY_SEARCH_OPTIONS
31 | E
32 | Table of search options
33 |
34 |
35 | TY_SEARCH_OPTION_RANGE
36 | E
37 | Value range for search option
38 |
39 |
40 | TY_SEARCH_OPTION_RANGES
41 | E
42 | Table of option value ranges
43 |
44 |
45 | TY_SEARCH_PACKAGE
46 | E
47 | Defines search package for parallel search
48 |
49 |
50 | TY_SEARCH_SCOPE
51 | E
52 | Ranges / data to define an object scope
53 |
54 |
55 | TY_SEARCH_SCOPE_RANGES
56 | E
57 | Ranges for determining the search scope
58 |
59 |
60 | TY_SEARCH_SETTINGS
61 | E
62 | Basic search settings
63 |
64 |
65 | TY_SEARCH_SETTINGS_EXTERNAL
66 | E
67 | External settings for code search API
68 |
69 |
70 | TY_SEARCH_SETTINGS_INT
71 | E
72 | Internal code search settings
73 |
74 |
75 | TY_TADIR_OBJECT
76 | E
77 | Tadir object with corresponding subobjects
78 |
79 |
80 | TY_TADIR_OBJECTS
81 | E
82 | Table of tadir object with corresponding subobjects
83 |
84 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_matcher_factory.clas.abap:
--------------------------------------------------------------------------------
1 | "! Factory to create matchers
2 | CLASS zcl_adcoset_matcher_factory DEFINITION
3 | PUBLIC FINAL
4 | CREATE PRIVATE.
5 |
6 | PUBLIC SECTION.
7 | "! Creates matcher for the given type and pattern
8 | CLASS-METHODS create_matcher
9 | IMPORTING
10 | !type TYPE zif_adcoset_ty_global=>ty_matcher_type
11 | pcre_settings TYPE zif_adcoset_ty_global=>ty_pcre_regex_settings OPTIONAL
12 | !pattern TYPE zif_adcoset_ty_global=>ty_pattern
13 | ignore_case TYPE abap_bool OPTIONAL
14 | RETURNING
15 | VALUE(result) TYPE REF TO zif_adcoset_pattern_matcher
16 | RAISING
17 | zcx_adcoset_no_matcher
18 | cx_sy_regex.
19 |
20 | "! Creates matchers from pattern range
21 | CLASS-METHODS create_matchers
22 | IMPORTING
23 | pattern_config TYPE zif_adcoset_ty_global=>ty_pattern_config
24 | RETURNING
25 | VALUE(result) TYPE zif_adcoset_pattern_matcher=>ty_ref_tab
26 | RAISING
27 | zcx_adcoset_static_error.
28 |
29 | PRIVATE SECTION.
30 | CLASS-DATA pcre_supported TYPE abap_bool VALUE abap_undefined.
31 | ENDCLASS.
32 |
33 |
34 | CLASS zcl_adcoset_matcher_factory IMPLEMENTATION.
35 | METHOD create_matcher.
36 | result = SWITCH #( type
37 |
38 | WHEN zif_adcoset_c_global=>c_matcher_type-posix_regex THEN
39 | NEW zcl_adcoset_posix_regex_matchr( pattern = pattern
40 | ignore_case = ignore_case )
41 |
42 | WHEN zif_adcoset_c_global=>c_matcher_type-pcre THEN
43 | NEW zcl_adcoset_pcre_matcher( pattern = pattern
44 | settings = pcre_settings
45 | ignore_case = ignore_case )
46 |
47 | WHEN zif_adcoset_c_global=>c_matcher_type-substring THEN
48 | NEW zcl_adcoset_substring_matcher( pattern = pattern
49 | ignore_case = ignore_case )
50 |
51 | ELSE
52 | THROW zcx_adcoset_no_matcher( ) ).
53 | ENDMETHOD.
54 |
55 | METHOD create_matchers.
56 | LOOP AT pattern_config-patterns ASSIGNING FIELD-SYMBOL().
57 | TRY.
58 | result = VALUE #( BASE result
59 | ( create_matcher( type = pattern_config-matcher_type
60 | pattern =
61 | pcre_settings = pattern_config-pcre_settings
62 | ignore_case = pattern_config-ignore_case ) ) ).
63 | CATCH zcx_adcoset_no_matcher
64 | cx_sy_regex INTO DATA(matcher_error).
65 | RAISE EXCEPTION TYPE zcx_adcoset_static_error
66 | EXPORTING previous = matcher_error.
67 | ENDTRY.
68 | ENDLOOP.
69 | ENDMETHOD.
70 | ENDCLASS.
71 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_string_util.clas.abap:
--------------------------------------------------------------------------------
1 | "! Utility for string processing
2 | CLASS zcl_adcoset_string_util DEFINITION
3 | PUBLIC FINAL
4 | CREATE PRIVATE.
5 |
6 | PUBLIC SECTION.
7 | "! Adjusts the line endings in the given source
8 | CLASS-METHODS adjust_line_endings
9 | IMPORTING
10 | !text TYPE string
11 | line_feed TYPE string
12 | RETURNING
13 | VALUE(result) TYPE string.
14 |
15 | "! Transforms tabular source into single string
16 | CLASS-METHODS transform_to_string
17 | IMPORTING
18 | source_table TYPE string_table
19 | line_feed TYPE string
20 | EXPORTING
21 | source_text TYPE string
22 | indexes TYPE zif_adcoset_source_code=>ty_line_indexes.
23 |
24 | "! Determines the line indexes in the source
25 | CLASS-METHODS determine_line_indexes
26 | IMPORTING
27 | source_text TYPE string OPTIONAL
28 | source_table TYPE string_table OPTIONAL
29 | line_feed TYPE string
30 | RETURNING
31 | VALUE(result) TYPE zif_adcoset_source_code=>ty_line_indexes.
32 | ENDCLASS.
33 |
34 |
35 | CLASS zcl_adcoset_string_util IMPLEMENTATION.
36 | METHOD adjust_line_endings.
37 | CHECK text IS NOT INITIAL.
38 |
39 | IF line_feed = |\r\n|.
40 | IF find( val = text sub = line_feed ) = -1.
41 | result = replace( val = text sub = |\n| with = line_feed occ = 0 ).
42 | ELSEIF find( val = text regex = `^\n|[^\r]\n` ) = -1.
43 | result = text.
44 | ELSE.
45 | result = replace( val = text sub = |\r\n| with = |\n| occ = 0 ).
46 | result = replace( val = result sub = |\n| with = |\r\n| occ = 0 ).
47 | ENDIF.
48 | ELSE.
49 | result = replace( val = text sub = |\r\n| with = |\n| occ = 0 ).
50 | ENDIF.
51 | ENDMETHOD.
52 |
53 | METHOD determine_line_indexes.
54 | DATA l_source_table TYPE TABLE OF string.
55 |
56 | DATA(line_offset) = 0.
57 |
58 | DATA(line_feed_length) = strlen( line_feed ).
59 |
60 | IF source_text IS NOT INITIAL.
61 | SPLIT source_text AT line_feed INTO TABLE l_source_table.
62 | ELSE.
63 | l_source_table = source_table.
64 | ENDIF.
65 |
66 | LOOP AT l_source_table ASSIGNING FIELD-SYMBOL().
67 | " TODO: variable is assigned but never used (ABAP cleaner)
68 | DATA(line_number) = sy-tabix.
69 | DATA(line_length) = strlen( ).
70 | result = VALUE #( BASE result
71 | ( number = sy-tabix
72 | offset = line_offset
73 | length = line_length ) ).
74 |
75 | line_offset = line_offset + line_length + line_feed_length.
76 | ENDLOOP.
77 | ENDMETHOD.
78 |
79 | METHOD transform_to_string.
80 | CLEAR: source_text,
81 | indexes.
82 |
83 | indexes = determine_line_indexes( source_table = source_table
84 | line_feed = line_feed ).
85 |
86 | source_text = concat_lines_of( table = source_table sep = line_feed ).
87 | ENDMETHOD.
88 | ENDCLASS.
89 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_search_protocol.clas.abap:
--------------------------------------------------------------------------------
1 | "! Protocol that collects information during code search
2 | CLASS zcl_adcoset_search_protocol DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | "! Resets the protocol values
8 | CLASS-METHODS reset.
9 |
10 | "! Adds Lines of Code to total searched LoC
11 | CLASS-METHODS add_loc
12 | IMPORTING
13 | loc TYPE f.
14 |
15 | "! Increments the count of searched objects
16 | CLASS-METHODS increment_searched_objs_count
17 | IMPORTING
18 | searched_objs_count TYPE i OPTIONAL.
19 |
20 | "! Increments the count of searched sources
21 | CLASS-METHODS increment_searched_srcs_count.
22 |
23 | "! Increases count of searched sources with the given value
24 | CLASS-METHODS increase_searchd_sources_count
25 | IMPORTING
26 | !value TYPE i.
27 |
28 | "! Increases count of searched objects with the given value
29 | CLASS-METHODS increase_searchd_objects_count
30 | IMPORTING
31 | !value TYPE i.
32 |
33 | "! Retrieves searched Lines of Code
34 | CLASS-METHODS get_loc
35 | RETURNING
36 | VALUE(result) TYPE i.
37 |
38 | "! Returns count of searched objects
39 | CLASS-METHODS get_searched_object_count
40 | RETURNING
41 | VALUE(result) TYPE i.
42 |
43 | "! Returns count of searched sources
44 | CLASS-METHODS get_searched_sources_count
45 | RETURNING
46 | VALUE(result) TYPE i.
47 |
48 | PRIVATE SECTION.
49 | CLASS-DATA searched_objects_count TYPE i.
50 | CLASS-DATA loc TYPE f.
51 | CLASS-DATA searched_sources_count TYPE i.
52 | ENDCLASS.
53 |
54 |
55 | CLASS zcl_adcoset_search_protocol IMPLEMENTATION.
56 | METHOD add_loc.
57 | zcl_adcoset_search_protocol=>loc = zcl_adcoset_search_protocol=>loc + loc.
58 | ENDMETHOD.
59 |
60 | METHOD increment_searched_objs_count.
61 | IF searched_objs_count IS NOT INITIAL.
62 | searched_objects_count = searched_objects_count + searched_objs_count.
63 | ELSE.
64 | searched_objects_count = searched_objects_count + 1.
65 | ENDIF.
66 | ENDMETHOD.
67 |
68 | METHOD increment_searched_srcs_count.
69 | searched_sources_count = searched_sources_count + 1.
70 | ENDMETHOD.
71 |
72 | METHOD reset.
73 | CLEAR:
74 | searched_objects_count,
75 | searched_sources_count,
76 | loc.
77 | ENDMETHOD.
78 |
79 | METHOD get_searched_object_count.
80 | result = searched_objects_count.
81 | ENDMETHOD.
82 |
83 | METHOD get_searched_sources_count.
84 | result = searched_sources_count.
85 | ENDMETHOD.
86 |
87 | METHOD increase_searchd_sources_count.
88 | searched_sources_count = searched_sources_count + value.
89 | ENDMETHOD.
90 |
91 | METHOD increase_searchd_objects_count.
92 | searched_objects_count = searched_objects_count + value.
93 | ENDMETHOD.
94 |
95 | METHOD get_loc.
96 | result = loc.
97 | ENDMETHOD.
98 | ENDCLASS.
99 |
--------------------------------------------------------------------------------
/src/zadcoset_i_transportsrccodobj.ddls.asddls:
--------------------------------------------------------------------------------
1 | @AbapCatalog.preserveKey: true
2 | @AbapCatalog.sqlViewName: 'ZADCOSET_ITRSCO'
3 |
4 | @AccessControl.authorizationCheck: #NOT_REQUIRED
5 |
6 | @EndUserText.label: 'Rep. obj. of Tr. Request for Code Search'
7 |
8 | define view ZADCOSET_I_TransportSrcCodObj
9 | as select from e071 as TransportObject
10 |
11 | inner join tadir as Object
12 | on TransportObject.pgmid = Object.pgmid
13 | and TransportObject.object = Object.object
14 | and TransportObject.obj_name = Object.obj_name
15 |
16 | {
17 | key TransportObject.trkorr as Request,
18 | key TransportObject.pgmid as ProgramId,
19 | key TransportObject.object as ObjectType,
20 | key TransportObject.obj_name as ObjectName,
21 |
22 | Object.devclass as DevelopmentPackage,
23 | Object.author as Owner,
24 | Object.created_on as CreatedDate
25 | }
26 |
27 | where TransportObject.obj_name not like '______________________________VC'
28 | and Object.pgmid = 'R3TR'
29 | and Object.delflag = ''
30 | and(Object.object = 'CLAS'
31 | or Object.object = 'INTF'
32 | or Object.object = 'PROG'
33 | or Object.object = 'FUGR'
34 | or Object.object = 'TYPE'
35 | or Object.object = 'DDLS'
36 | or Object.object = 'DCLS'
37 | or Object.object = 'DDLX'
38 | or Object.object = 'BDEF'
39 | or Object.object = 'SRVD'
40 | or Object.object = 'XSLT')
41 |
42 | union
43 |
44 | select from e071 as TransportObject
45 |
46 | inner join tadir as Object
47 | on TransportObject.pgmid = Object.pgmid
48 | and TransportObject.object = Object.object
49 | and TransportObject.obj_name = Object.obj_name
50 |
51 | inner join ZADCOSET_I_SearchableTable as Tabl
52 | on Object.obj_name = Tabl.ObjectName
53 |
54 | {
55 | key TransportObject.trkorr as Request,
56 | key TransportObject.pgmid as ProgramId,
57 | key Tabl.ObjectType,
58 | key TransportObject.obj_name as ObjectName,
59 |
60 | Object.devclass as DevelopmentPackage,
61 | Object.author as Owner,
62 | Object.created_on as CreatedDate
63 | }
64 |
65 | where Object.pgmid = 'R3TR'
66 | and Object.delflag = ''
67 | and Object.object = 'TABL'
68 |
69 | union all
70 |
71 | select from e071 as TransportObject
72 |
73 | {
74 | key TransportObject.trkorr as Request,
75 | key TransportObject.pgmid as ProgramId,
76 | key TransportObject.object as ObjectType,
77 | key TransportObject.obj_name as ObjectName,
78 |
79 | '' as DevelopmentPackage,
80 | '' as Owner,
81 | cast('' as abap.dats) as CreatedDate
82 | }
83 |
84 | where(TransportObject.pgmid = 'LIMU'
85 | and(TransportObject.object = 'FUNC'
86 | or TransportObject.object = 'METH'
87 | or TransportObject.object = 'REPS'
88 | or TransportObject.object = 'CLSD'
89 | or TransportObject.object = 'CPUB'
90 | or TransportObject.object = 'CPRO'
91 | or TransportObject.object = 'CPRI'
92 | or TransportObject.object = 'CINC'))
93 | and TransportObject.obj_name not like '______________________________VC'
94 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_cds_name_mapper.clas.abap:
--------------------------------------------------------------------------------
1 | "! Maps technical to display name of Core Data Services
2 | CLASS zcl_adcoset_cds_name_mapper DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | "! Collects entry for mapping
8 | METHODS collect_entry
9 | IMPORTING
10 | !name TYPE string
11 | !type TYPE trobjtype
12 | RETURNING
13 | VALUE(result) TYPE abap_bool.
14 |
15 | "! Tries to map all collected entries
16 | METHODS map_entries
17 | RETURNING
18 | VALUE(result) TYPE abap_bool.
19 |
20 | "! Retrieves display name of a given entry
21 | METHODS get_display_name
22 | IMPORTING
23 | !name TYPE string
24 | !type TYPE trobjtype
25 | RETURNING
26 | VALUE(result) TYPE string.
27 |
28 | PRIVATE SECTION.
29 | TYPES:
30 | BEGIN OF ty_ddl2entity_map_entry,
31 | ddlname TYPE ddlname,
32 | entity_name TYPE objectname,
33 | END OF ty_ddl2entity_map_entry,
34 |
35 | ty_ddl2entity_map TYPE HASHED TABLE OF ty_ddl2entity_map_entry WITH UNIQUE KEY ddlname.
36 |
37 | DATA ddlname_range TYPE RANGE OF ddlname.
38 | DATA bdefname_range TYPE RANGE OF objectname.
39 | DATA ddl2entity_map TYPE ty_ddl2entity_map.
40 | DATA bdef2entity_map TYPE ty_ddl2entity_map.
41 | ENDCLASS.
42 |
43 |
44 | CLASS zcl_adcoset_cds_name_mapper IMPLEMENTATION.
45 | METHOD collect_entry.
46 | IF type = zif_adcoset_c_global=>c_source_code_type-data_definition.
47 | ddlname_range = VALUE #( BASE ddlname_range ( sign = 'I' option = 'EQ' low = name ) ).
48 | ELSEIF type = zif_adcoset_c_global=>c_source_code_type-behavior_definition.
49 | bdefname_range = VALUE #( BASE bdefname_range ( sign = 'I' option = 'EQ' low = name ) ).
50 | ELSE.
51 | RETURN.
52 | ENDIF.
53 |
54 | result = abap_true.
55 | ENDMETHOD.
56 |
57 | METHOD get_display_name.
58 | DATA entity_map_entry TYPE REF TO ty_ddl2entity_map_entry.
59 |
60 | IF type = zif_adcoset_c_global=>c_source_code_type-data_definition.
61 | entity_map_entry = REF #( ddl2entity_map[ ddlname = name ] OPTIONAL ).
62 | ELSEIF type = zif_adcoset_c_global=>c_source_code_type-behavior_definition.
63 | entity_map_entry = REF #( bdef2entity_map[ ddlname = name ] OPTIONAL ).
64 | ENDIF.
65 |
66 | IF entity_map_entry IS NOT INITIAL.
67 | result = entity_map_entry->entity_name.
68 | ENDIF.
69 | ENDMETHOD.
70 |
71 | METHOD map_entries.
72 | IF ddlname_range IS NOT INITIAL.
73 | SELECT dep~ddlname,
74 | stob~strucobjn_raw AS entity_name
75 | FROM ddldependency AS dep
76 | INNER JOIN dd02b AS stob
77 | ON dep~objectname = stob~strucobjn
78 | WHERE ddlname IN @ddlname_range
79 | AND objecttype = 'STOB'
80 | AND state = 'A'
81 | INTO CORRESPONDING FIELDS OF TABLE @ddl2entity_map.
82 | ENDIF.
83 |
84 | IF bdefname_range IS NOT INITIAL.
85 | SELECT strucobjn AS ddlname,
86 | strucobjn_raw AS entity_name
87 | FROM dd02b
88 | WHERE strucobjn IN @bdefname_range
89 | INTO CORRESPONDING FIELDS OF TABLE @bdef2entity_map.
90 | ENDIF.
91 |
92 | result = xsdbool( ddl2entity_map IS NOT INITIAL OR bdef2entity_map IS NOT INITIAL ).
93 | ENDMETHOD.
94 | ENDCLASS.
95 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 | [](https://github.com/DevEpos/abap-code-search-tools/blob/main/src/zif_adcoset_version.intf.abap)
3 |
4 | # abap-code-search
5 |
6 | ABAP Advanced Code Search Tools
7 |
8 | ## Description
9 |
10 | Searches Code in ABAP sources like
11 |
12 | - [X] Classes (CLAS)
13 | - [X] Interfaces (INTF)
14 | - [X] Programs (PROG)
15 | - [X] Type Groups (TYPE)
16 | - [X] Function Groups (FUGR)
17 | - [X] Data Definitions (DDLS)
18 | - [X] Metadata Extensions (DDLX)
19 | - [X] Access Controls (DCLS)
20 | - [X] Behavior Definitions (BDEV)
21 | - [X] Simple Transformations (XSLT)
22 | - [X] Structures (STRU) --> ABAP 7.50
23 | - [X] Database Tables (DTAB) --> ABAP 7.52
24 |
25 | The search is done entirely via ABAP (as opposed to the ADT Source Search). There is an option to run the search in parallel for better performance
26 |
27 | ### Search features
28 |
29 | Search can be done via normal String search or with Regular Expressions. If supported by the system it is also possible to activate PCRE (Perl Compatible Regular Expressions)
30 |
31 | ### UI
32 |
33 | You can execute the search via report `ZADCOSET_SEARCH`, where most of the options are available as well, but the main focus of the UI will be ADT (see [ABAP Code Search](https://github.com/DevEpos/eclipse-adt-plugins/tree/main/features/code-search)).
34 |
35 | ### Package overview
36 |
37 | - **/src**
38 | Root package which currently also holds the search API
39 | Important Objects in package:
40 |
41 | | Object Name | Purpose |
42 | | ------------------------- | ----------------------------------------- |
43 | | ZCL_ADCOSET_SEARCH_ENGINE | Access point to code search |
44 | | ZADCOSET_SEARCH | ABAP Report for executing the code search |
45 |
46 | - **/src/adt**
47 | Implementation of the ADT backend
48 |
49 | - **/src/parl**
50 | Implementation of parallel processing - needed for the code search
51 |
52 | ## Installation
53 |
54 | Install this repository using [abapGit](https://github.com/abapGit/abapGit#abapgit).
55 |
56 | ### Choosing the correct branch for your System
57 |
58 | | NW version | Branch name |
59 | | ------------ | ----------------------------------------------------------------------- |
60 | | ≥ 7.51 | **main** |
61 | | 7.50 | [nw-740](https://github.com/DevEpos/abap-code-search-tools/tree/nw-740) |
62 | | 7.40 | [nw-740](https://github.com/DevEpos/abap-code-search-tools/tree/nw-740) |
63 | | < 7.40 | *Not officially supported* |
64 |
65 | ## Supported Databases at branch `nw-740`
66 |
67 | A certain part of the implementation for the ABAP releases 7.40 and 7.50 uses `ADBC` (ABAP Database Connectivity).
68 | Only the following databases are supported at the moment:
69 |
70 | - Oracle
71 | - SAP HANA
72 | - Microsoft SQL Server
73 |
74 | ## Necessary Authorizations
75 |
76 | To access the backend from ADT a user must have the following authorizations
77 | | Authorization Object | Authorization Field | Value |
78 | | -------------------- | ------------------- | ------------------ |
79 | | S_ADT_RES | URI | /devepos/adt/cst/* |
80 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_api_state_util.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_adcoset_api_state_util DEFINITION
2 | PUBLIC FINAL
3 | CREATE PUBLIC.
4 |
5 | PUBLIC SECTION.
6 | CONSTANTS c_api_state_view TYPE tabname VALUE 'ARS_ADT_API_FILTER'.
7 | CONSTANTS c_released_state TYPE string VALUE 'RELEASED'.
8 | CONSTANTS c_deprecated_state TYPE string VALUE 'DEPRECATED'.
9 | CONSTANTS:
10 | BEGIN OF c_fields,
11 | object_name TYPE fieldname VALUE 'TADIR_OBJ_NAME',
12 | object_type TYPE fieldname VALUE 'TADIR_OBJECT',
13 | api_state TYPE fieldname VALUE 'FILTER_VALUE',
14 | END OF c_fields.
15 |
16 | CLASS-METHODS is_api_state_available
17 | RETURNING
18 | VALUE(result) TYPE abap_bool.
19 |
20 | CLASS-METHODS adjust_api_states_for_filter
21 | CHANGING
22 | api_state_range TYPE zif_adcoset_ty_global=>ty_search_scope_ranges-api_state_range.
23 |
24 | PRIVATE SECTION.
25 | CLASS-METHODS get_api_states
26 | EXPORTING
27 | released_states TYPE string_table
28 | deprecated_states TYPE string_table.
29 | ENDCLASS.
30 |
31 |
32 | CLASS zcl_adcoset_api_state_util IMPLEMENTATION.
33 | METHOD is_api_state_available.
34 | SELECT SINGLE @abap_true FROM ddddlsrc
35 | WHERE ddlname = @c_api_state_view
36 | INTO @result.
37 | ENDMETHOD.
38 |
39 | METHOD get_api_states.
40 | DATA(api_states) = cl_ris_adt_res_release_states=>get_all( ).
41 |
42 | LOOP AT api_states INTO DATA(api_state) WHERE name <> c_released_state
43 | AND name <> c_deprecated_state.
44 | IF api_state-name CP 'DEPRECATED*'.
45 | deprecated_states = VALUE #( BASE deprecated_states ( api_state-name ) ).
46 | ELSE.
47 | released_states = VALUE #( BASE released_states ( api_state-name ) ).
48 | ENDIF.
49 | ENDLOOP.
50 | ENDMETHOD.
51 |
52 | METHOD adjust_api_states_for_filter.
53 | DATA released_states TYPE string_table.
54 | DATA deprecated_states TYPE string_table.
55 | DATA replaced_states LIKE api_state_range.
56 |
57 | CHECK api_state_range IS NOT INITIAL.
58 |
59 | LOOP AT api_state_range REFERENCE INTO DATA(api_state).
60 | IF NOT ( api_state->low = c_released_state OR api_state->low = c_deprecated_state ).
61 | CONTINUE.
62 | ENDIF.
63 |
64 | IF released_states IS INITIAL.
65 | get_api_states( IMPORTING released_states = released_states
66 | deprecated_states = deprecated_states ).
67 | ENDIF.
68 |
69 | IF api_state->low = c_released_state.
70 | replaced_states = VALUE #(
71 | BASE replaced_states
72 | ( LINES OF VALUE #( FOR IN released_states
73 | ( sign = api_state->sign option = api_state->option low = ) ) ) ).
74 | ENDIF.
75 |
76 | IF api_state->low = c_deprecated_state.
77 | replaced_states = VALUE #(
78 | BASE replaced_states
79 | ( LINES OF VALUE #( FOR IN deprecated_states
80 | ( sign = api_state->sign option = api_state->option low = ) ) ) ).
81 | ENDIF.
82 |
83 | DELETE api_state_range.
84 | ENDLOOP.
85 |
86 | api_state_range = VALUE #( BASE api_state_range ( LINES OF replaced_states ) ).
87 |
88 | SORT api_state_range BY sign
89 | option
90 | low.
91 | DELETE ADJACENT DUPLICATES FROM api_state_range COMPARING sign option low.
92 | ENDMETHOD.
93 | ENDCLASS.
94 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_devc_reader.clas.abap:
--------------------------------------------------------------------------------
1 | "! Access to Packages (DEVC)
2 | CLASS zcl_adcoset_devc_reader DEFINITION
3 | PUBLIC FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 | "! Resolves full package names from Range Table
8 | CLASS-METHODS resolve_packages
9 | IMPORTING
10 | package_range TYPE zif_adcoset_ty_global=>ty_package_name_range
11 | RETURNING
12 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_package_name_range.
13 |
14 | "! Retrieves sub packages by range
15 | CLASS-METHODS get_subpackages_by_range
16 | IMPORTING
17 | package_range TYPE zif_adcoset_ty_global=>ty_package_name_range
18 | RETURNING
19 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_package_name_range.
20 |
21 | "! Retrieves sub packages by tab
22 | CLASS-METHODS get_subpackages_by_tab
23 | IMPORTING
24 | package_names TYPE zif_adcoset_ty_global=>ty_package_names
25 | RETURNING
26 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_package_name_range.
27 |
28 | "! Retrieves sub packages for top package
29 | CLASS-METHODS get_subpackages
30 | IMPORTING
31 | package_name TYPE devclass
32 | RETURNING
33 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_package_name_range.
34 |
35 | PRIVATE SECTION.
36 | CLASS-METHODS list_sub_packages
37 | IMPORTING
38 | package_range TYPE zif_adcoset_ty_global=>ty_package_name_range
39 | RETURNING
40 | VALUE(result) TYPE zif_adcoset_ty_global=>ty_package_name_range.
41 | ENDCLASS.
42 |
43 |
44 | CLASS zcl_adcoset_devc_reader IMPLEMENTATION.
45 | METHOD resolve_packages.
46 | CHECK package_range IS NOT INITIAL.
47 |
48 | SELECT devclass AS low,
49 | 'I' AS sign,
50 | 'EQ' AS option
51 | FROM tdevc
52 | WHERE devclass IN @package_range
53 | INTO CORRESPONDING FIELDS OF TABLE @result.
54 | ENDMETHOD.
55 |
56 | METHOD get_subpackages_by_range.
57 | result = list_sub_packages( package_range ).
58 | ENDMETHOD.
59 |
60 | METHOD get_subpackages.
61 | result = list_sub_packages( VALUE #( ( sign = 'I' option = 'EQ' low = to_upper( package_name ) ) ) ).
62 | ENDMETHOD.
63 |
64 | METHOD list_sub_packages.
65 | DATA package_names TYPE zif_adcoset_ty_global=>ty_package_names.
66 |
67 | CHECK package_range IS NOT INITIAL.
68 |
69 | SELECT devclass FROM tdevc
70 | WHERE parentcl IN @package_range
71 | INTO TABLE @package_names.
72 |
73 | result = VALUE #( FOR package_name IN package_names
74 | ( sign = 'I'
75 | option = 'EQ'
76 | low = package_name ) ).
77 |
78 | WHILE lines( package_names ) > 0.
79 | SELECT devclass FROM tdevc
80 | FOR ALL ENTRIES IN @package_names
81 | WHERE parentcl = @package_names-table_line
82 | INTO TABLE @package_names.
83 |
84 | result = VALUE #( BASE result
85 | FOR package_name IN package_names
86 | ( sign = 'I'
87 | option = 'EQ'
88 | low = package_name ) ).
89 | ENDWHILE.
90 | ENDMETHOD.
91 |
92 | METHOD get_subpackages_by_tab.
93 | result = list_sub_packages( VALUE #( FOR pack IN package_names
94 | ( sign = 'I'
95 | option = 'EQ'
96 | low = pack ) ) ).
97 | ENDMETHOD.
98 | ENDCLASS.
99 |
--------------------------------------------------------------------------------
/src/adt/zadcoset_adt_obj_ref.xslt.source.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/src/zcl_adcoset_extensions_util.clas.abap:
--------------------------------------------------------------------------------
1 | "! Utility to test extension availability
2 | CLASS zcl_adcoset_extensions_util DEFINITION
3 | PUBLIC FINAL
4 | CREATE PRIVATE.
5 |
6 | PUBLIC SECTION.
7 | "! Checks if ABAP Tags feature is installed
8 | CLASS-METHODS is_abap_tags_available
9 | RETURNING
10 | VALUE(result) TYPE abap_bool.
11 |
12 | "! Retrieves current table with stored tagged objects
13 | CLASS-METHODS get_current_tgobj_table
14 | RETURNING
15 | VALUE(result) TYPE tabname.
16 |
17 | PRIVATE SECTION.
18 | CONSTANTS c_tgobj_tab_v2 TYPE tabname VALUE 'ZABAPTAGS_TGOBJN'.
19 | CONSTANTS c_tgobj_tab_v1 TYPE tabname VALUE 'ZABAPTAGS_TGOBJ'.
20 |
21 | TYPES: BEGIN OF ty_field_config,
22 | fieldname TYPE fieldname,
23 | rollname TYPE rollname,
24 | END OF ty_field_config,
25 | ty_field_configs TYPE STANDARD TABLE OF ty_field_config WITH EMPTY KEY.
26 | TYPES ty_table_fields TYPE STANDARD TABLE OF dd03p WITH EMPTY KEY.
27 |
28 | CLASS-DATA abap_tags_available TYPE abap_bool VALUE abap_undefined.
29 | CLASS-DATA current_tgobj_tabname TYPE tabname.
30 |
31 | CLASS-METHODS is_tgobj_table_available
32 | IMPORTING
33 | tabname TYPE tabname
34 | RETURNING
35 | VALUE(result) TYPE abap_bool.
36 |
37 | CLASS-METHODS test_field_existence
38 | IMPORTING
39 | fields_to_test TYPE ty_field_configs
40 | !fields TYPE ty_table_fields
41 | RETURNING
42 | VALUE(result) TYPE abap_bool.
43 | ENDCLASS.
44 |
45 |
46 | CLASS zcl_adcoset_extensions_util IMPLEMENTATION.
47 | METHOD get_current_tgobj_table.
48 | IF is_abap_tags_available( ).
49 | result = current_tgobj_tabname.
50 | ENDIF.
51 | ENDMETHOD.
52 |
53 | METHOD is_abap_tags_available.
54 | IF abap_tags_available = abap_undefined.
55 | IF is_tgobj_table_available( c_tgobj_tab_v2 ).
56 | abap_tags_available = abap_true.
57 | current_tgobj_tabname = c_tgobj_tab_v2.
58 | ELSEIF is_tgobj_table_available( c_tgobj_tab_v1 ).
59 | current_tgobj_tabname = c_tgobj_tab_v1.
60 | ELSE.
61 | abap_tags_available = abap_false.
62 | ENDIF.
63 | ENDIF.
64 |
65 | result = abap_tags_available.
66 | ENDMETHOD.
67 |
68 | METHOD is_tgobj_table_available.
69 | DATA table_def TYPE dd02v.
70 | DATA table_fields TYPE ty_table_fields.
71 |
72 | CALL FUNCTION 'DDIF_TABL_GET'
73 | EXPORTING name = tabname
74 | IMPORTING dd02v_wa = table_def
75 | TABLES dd03p_tab = table_fields
76 | EXCEPTIONS illegal_input = 1
77 | OTHERS = 2.
78 | IF sy-subrc = 0
79 | AND table_def-tabclass = 'TRANSP'
80 | AND table_fields IS NOT INITIAL
81 | AND test_field_existence(
82 | fields = table_fields
83 | fields_to_test = VALUE #( ( fieldname = 'OBJECT_NAME' rollname = 'SOBJ_NAME' )
84 | ( fieldname = 'OBJECT_TYPE' rollname = 'TROBJTYPE' )
85 | ( fieldname = 'TAG_ID' rollname = 'ZABAPTAGS_TAG_ID' ) ) ).
86 | result = abap_true.
87 | ENDIF.
88 | ENDMETHOD.
89 |
90 | METHOD test_field_existence.
91 | result = abap_true.
92 |
93 | LOOP AT fields_to_test ASSIGNING FIELD-SYMBOL().
94 | IF NOT line_exists( fields[ fieldname = -fieldname
95 | rollname = -rollname ] ).
96 | CLEAR result.
97 | RETURN.
98 | ENDIF.
99 | ENDLOOP.
100 | ENDMETHOD.
101 | ENDCLASS.
102 |
--------------------------------------------------------------------------------