Advertisement
Guest User

ABAP TPDA_SCRIPT_CST_OBJ

a guest
Jan 15th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 8.39 KB | None | 0 0
  1. *<SCRIPT:PERSISTENT>
  2. REPORT ZGD_DEBUG_SCRIPT_CUST_OBJ.
  3.  
  4. *<SCRIPT:HEADER>
  5. *<SCRIPTNAME>ZGD_TEST_DEBUG_SCRIPT_TMP</SCRIPTNAME>
  6. *<SCRIPT_CLASS>LCL_DEBUGGER_SCRIPT</SCRIPT_CLASS>
  7. *<SCRIPT_COMMENT>Debugger Skript: Default Template</SCRIPT_COMMENT>
  8. *<SINGLE_STEP>X</SINGLE_STEP>
  9.  
  10. *</SCRIPT:HEADER>
  11.  
  12. *<SCRIPT:PRESETTINGS>
  13.  
  14. *</SCRIPT:PRESETTINGS>
  15.  
  16. *<SCRIPT:SCRIPT_CLASS>
  17. *---------------------------------------------------------------------*
  18. *       CLASS lcl_debugger_script DEFINITION
  19. *---------------------------------------------------------------------*
  20. *
  21. *---------------------------------------------------------------------*
  22. CLASS lcl_debugger_script DEFINITION INHERITING FROM  cl_tpda_script_class_super.
  23.  
  24.   PUBLIC SECTION.
  25.     METHODS:
  26.       prologue REDEFINITION,
  27.       init     REDEFINITION,
  28.       script   REDEFINITION,
  29.       end      REDEFINITION.
  30.  
  31.   PRIVATE SECTION.
  32.  
  33.     DATA: m_filter     TYPE TABLE OF string,
  34.           m_returncode TYPE char01,
  35.           m_is_regex   TYPE abap_bool.
  36.  
  37. ENDCLASS.                    "lcl_debugger_script DEFINITION
  38.  
  39. CLASS lcl_source_code_info DEFINITION.
  40.  
  41.   PUBLIC SECTION.
  42.  
  43.     types: ty_pattern type table of string.
  44.  
  45.  
  46.     CLASS-METHODS:
  47.       get_source_info_extended
  48.         IMPORTING
  49.           !i_source_info TYPE tpda_curr_source_pos
  50.           !i_filter      TYPE ty_pattern OPTIONAL
  51.           i_is_regex     TYPE abap_bool OPTIONAL
  52.         CHANGING
  53.           !ct_source     TYPE tpda_ast_src_it,
  54.  
  55.       add_to_buffer
  56.         IMPORTING i_progname type reposrc-progname
  57.         exporting ev_break   type xfeld,
  58.  
  59.       clear_buffer.
  60.  
  61.  
  62.   PRIVATE SECTION.
  63.  
  64.     CLASS-METHODS:
  65.       get_source
  66.         IMPORTING
  67.           i_program     TYPE csequence
  68.         EXPORTING
  69.           et_source     TYPE stringtab
  70.           et_tokens     TYPE stokesx_tab
  71.           et_statements TYPE sstmnt_tab ,
  72.  
  73.       get_start_statement
  74.         IMPORTING
  75.           i_start_source_line TYPE i
  76.           i_statements        TYPE sstmnt_tab
  77.         EXPORTING
  78.           e_start_row         TYPE i
  79.           e_start_index       TYPE i.
  80.  
  81.  
  82.  
  83.     TYPES: BEGIN OF ty_scan,
  84.              program    TYPE tpda_program,
  85.              source     TYPE stringtab,
  86.              tokens     TYPE stokesx_tab,
  87.              statements TYPE sstmnt_tab,
  88.            END OF ty_scan,
  89.            tty_scan TYPE HASHED TABLE OF ty_scan
  90.                WITH UNIQUE KEY program.
  91.  
  92.     CLASS-DATA: scan_buffer   TYPE tty_scan,
  93.                 cst_mod_progs TYPE hashed table of reposrc with unique key progname.
  94.  
  95.  
  96. ENDCLASS.
  97.  
  98.  
  99.  
  100. *---------------------------------------------------------------------*
  101. *       CLASS lcl_debugger_script IMPLEMENTATION
  102. *---------------------------------------------------------------------*
  103. *
  104. *---------------------------------------------------------------------*
  105. CLASS lcl_debugger_script IMPLEMENTATION.
  106.  
  107.   METHOD prologue.
  108.   ENDMETHOD.                    "prolog
  109.  
  110.   METHOD init.
  111.  
  112.     lcl_source_code_info=>clear_buffer( ).
  113.  
  114.   ENDMETHOD.                    "init
  115.  
  116.   METHOD script.
  117.  
  118.     DATA: source_info TYPE tpda_curr_source_pos,
  119.           source      TYPE tpda_ast_src_it,
  120.           ls_reposrc  TYPE reposrc.
  121.  
  122.     TRY.
  123.         cl_tpda_script_abapdescr=>get_abap_src_info(
  124.            IMPORTING
  125.              p_prg_info  = source_info-prg_info
  126.              p_dynp_info = source_info-dynp_info ).
  127.       CATCH cx_tpda_src_info.
  128.         CLEAR source_info.
  129.     ENDTRY.
  130.  
  131.  
  132.     lcl_source_code_info=>add_to_buffer( exporting i_progname = source_info-include
  133.                                          importing ev_break = data(lv_break) ).
  134.  
  135.     if lv_break = abap_true.
  136.       me->break( ).
  137.     endif.
  138.  
  139.   ENDMETHOD.                    "script
  140.  
  141.   METHOD end.
  142.   ENDMETHOD.                    "end
  143.  
  144. ENDCLASS.                    "lcl_debugger_script IMPLEMENTATION
  145.  
  146. CLASS lcl_source_code_info IMPLEMENTATION.
  147.  
  148.   method clear_buffer.
  149.     refresh cst_mod_progs[].
  150.  
  151.   endmethod.
  152.  
  153.   method add_to_buffer.
  154.  
  155.     select single *
  156.      from reposrc into @data(ls_reposrc)
  157.        where progname = @i_progname.
  158.  
  159.     if ls_reposrc-unam ne 'SAP'.
  160.  
  161.       read table cst_mod_progs into data(ls_cst_mod_progs) with key progname = ls_reposrc-progname.
  162.       if sy-subrc <> 0.
  163.         insert ls_reposrc into table cst_mod_progs.
  164.         ev_break = abap_true.
  165.         return.
  166.       endif.
  167.  
  168.     endif.
  169.  
  170.  
  171.   endmethod.
  172.  
  173.   METHOD get_source_info_extended.
  174.  
  175.     DATA: include_source TYPE stringtab,
  176.           tokens         TYPE stokesx_tab,
  177.           statements     TYPE sstmnt_tab,
  178.           source_trace   LIKE LINE OF ct_source,
  179.           start_tabix    TYPE syst-tabix,
  180.           start_row      TYPE stmnt_trow,
  181.           lt_filter      TYPE tpda_range_it.
  182.  
  183.     FIELD-SYMBOLS:  <end_statement>   LIKE LINE OF statements.
  184.  
  185.     get_source(
  186.       EXPORTING
  187.         i_program     = i_source_info-include
  188.       IMPORTING
  189.         et_source     = include_source
  190.         et_tokens     = tokens
  191.         et_statements = statements ).
  192.  
  193.     get_start_statement(
  194.      EXPORTING
  195.        i_start_source_line = i_source_info-line
  196.        i_statements        = statements
  197.      IMPORTING
  198.        e_start_row         = start_row
  199.        e_start_index       = start_tabix ).
  200.  
  201.     CHECK start_row IS NOT INITIAL.
  202.  
  203.     READ TABLE statements ASSIGNING <end_statement> INDEX start_tabix + 1.
  204.     CHECK sy-subrc = 0.
  205.  
  206.     DATA(whole_statement_source) = REDUCE string( INIT result = ||
  207.                                                   FOR index = start_row + 1
  208.                                                   WHILE index <= <end_statement>-trow
  209.                                                   LET source_line = include_source[ index ]
  210.                                                   IN
  211.                                                   NEXT result = result && source_line ).
  212.  
  213.     IF i_is_regex = abap_true.
  214.  
  215.       loop at i_filter into data(ls_filter).
  216.         IF find( val   = whole_statement_source
  217.                  regex = ls_filter ) = -1.
  218.           RETURN.
  219.         ENDIF.
  220.  
  221.       endloop.
  222.  
  223.     ELSE.
  224.  
  225.       loop at i_filter into ls_filter.
  226.  
  227.         INSERT VALUE #( sign   = 'I'
  228.                         option = 'CP'
  229.                         low    = |*{ to_upper( ls_filter ) }*| ) INTO TABLE lt_filter.
  230.  
  231.       endloop.
  232.  
  233.       IF NOT whole_statement_source IN lt_filter.
  234.         RETURN.
  235.       ENDIF.
  236.  
  237.     ENDIF.
  238.  
  239.     source_trace-statement    = whole_statement_source.
  240.     source_trace-program      = i_source_info-prg_info-program.
  241.     source_trace-include      = i_source_info-prg_info-include.
  242.     source_trace-line         = i_source_info-line.
  243.     INSERT source_trace INTO TABLE ct_source.
  244.  
  245.   ENDMETHOD.
  246.  
  247.  
  248.   METHOD get_source.
  249.  
  250.     DATA: scan_buffer_line LIKE LINE OF scan_buffer.
  251.  
  252.     FIELD-SYMBOLS: <scan_buffer_line> LIKE LINE OF scan_buffer.
  253.  
  254.     READ TABLE scan_buffer ASSIGNING <scan_buffer_line>
  255.                            WITH TABLE KEY program = i_program.
  256.     IF sy-subrc = 0.
  257.       et_source     = <scan_buffer_line>-source.
  258.       et_tokens     = <scan_buffer_line>-tokens.
  259.       et_statements = <scan_buffer_line>-statements.
  260.       RETURN.
  261.     ENDIF.
  262.  
  263.     scan_buffer_line-program = i_program.
  264.  
  265.     READ REPORT scan_buffer_line-program INTO scan_buffer_line-source.
  266.  
  267.     SCAN ABAP-SOURCE scan_buffer_line-source
  268.          TOKENS INTO scan_buffer_line-tokens
  269.          STATEMENTS INTO scan_buffer_line-statements
  270.          WITH ANALYSIS.
  271.  
  272.     INSERT scan_buffer_line INTO TABLE scan_buffer.
  273.  
  274.     et_source     = scan_buffer_line-source.
  275.     et_tokens     = scan_buffer_line-tokens.
  276.     et_statements = scan_buffer_line-statements.
  277.  
  278.   ENDMETHOD.
  279.  
  280.   METHOD get_start_statement.
  281.  
  282.     DATA: found TYPE abap_bool,
  283.           line  TYPE i.
  284.  
  285.     CLEAR: e_start_index,
  286.            e_start_row.
  287.  
  288.     " get statement before current line
  289.     WHILE found = abap_false.
  290.  
  291.       line = i_start_source_line - sy-index.
  292.  
  293.       IF line <= 0.
  294.         EXIT.
  295.       ENDIF.
  296.  
  297.       READ TABLE i_statements ASSIGNING FIELD-SYMBOL(<start_statement>)
  298.                               WITH KEY trow = line
  299.                               BINARY SEARCH.
  300.       IF sy-subrc = 0.
  301.         found = abap_true.
  302.         e_start_index = sy-tabix.
  303.       ENDIF.
  304.  
  305.     ENDWHILE.
  306.  
  307.     IF <start_statement> IS ASSIGNED.
  308.       e_start_row = <start_statement>-trow.
  309.     ENDIF.
  310.  
  311.   ENDMETHOD.
  312.  
  313. ENDCLASS.
  314.  
  315.  
  316. *</SCRIPT:SCRIPT_CLASS>
  317.  
  318. *</SCRIPT:PERSISTENT>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement