Share output and event handler for code inspector

This commit is contained in:
Marcello Urbani 2018-09-22 16:39:21 +00:00 committed by Lars Hvam
parent ce05bb65b1
commit eb34b7eeec
4 changed files with 227 additions and 166 deletions

View File

@ -1,5 +1,5 @@
CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC
INHERITING FROM zcl_abapgit_gui_page. INHERITING FROM zcl_abapgit_gui_page_codi_base.
PUBLIC SECTION. PUBLIC SECTION.
INTERFACES: zif_abapgit_gui_page_hotkey. INTERFACES: zif_abapgit_gui_page_hotkey.
@ -19,10 +19,9 @@ CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC
REDEFINITION. REDEFINITION.
PROTECTED SECTION. PROTECTED SECTION.
DATA: mo_repo TYPE REF TO zcl_abapgit_repo.
METHODS: METHODS:
render_content REDEFINITION. render_content REDEFINITION.
PRIVATE SECTION. PRIVATE SECTION.
CONSTANTS: CONSTANTS:
@ -31,10 +30,7 @@ CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC
commit TYPE string VALUE 'commit' ##NO_TEXT, commit TYPE string VALUE 'commit' ##NO_TEXT,
rerun TYPE string VALUE 'rerun' ##NO_TEXT, rerun TYPE string VALUE 'rerun' ##NO_TEXT,
END OF c_actions. END OF c_actions.
CONSTANTS: c_object_separator type char1 VALUE '|'.
DATA: DATA:
mt_result TYPE scit_alvlist,
mo_stage TYPE REF TO zcl_abapgit_stage. mo_stage TYPE REF TO zcl_abapgit_stage.
METHODS: METHODS:
@ -54,14 +50,7 @@ CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC
is_stage_allowed is_stage_allowed
RETURNING RETURNING
VALUE(rv_is_stage_allowed) TYPE abap_bool, VALUE(rv_is_stage_allowed) TYPE abap_bool.
jump
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
is_sub_item TYPE zif_abapgit_definitions=>ty_item
i_line_number type i
RAISING
zcx_abapgit_exception.
ENDCLASS. ENDCLASS.
@ -135,88 +124,6 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD jump.
DATA: lo_test TYPE REF TO cl_ci_test_root,
li_code_inspector TYPE REF TO zif_abapgit_code_inspector,
ls_info TYPE scir_rest,
lo_result TYPE REF TO cl_ci_result_root,
lv_check_variant_name TYPE sci_chkv,
lv_package TYPE devclass.
DATA: lv_adt_jump_enabled TYPE abap_bool.
DATA: lv_line_number TYPE i.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
DATA: ls_sub_item TYPE zif_abapgit_definitions=>ty_item.
FIELD-SYMBOLS: <ls_result> TYPE scir_alvlist.
IF is_sub_item IS NOT INITIAL.
READ TABLE mt_result WITH KEY objtype = is_item-obj_type
objname = is_item-obj_name
sobjtype = is_sub_item-obj_type
sobjname = is_sub_item-obj_name
line = i_line_number
ASSIGNING <ls_result>.
ELSE.
READ TABLE mt_result WITH KEY objtype = is_item-obj_type
objname = is_item-obj_name
line = i_line_number
ASSIGNING <ls_result>.
ENDIF.
ASSERT <ls_result> IS ASSIGNED.
ls_item-obj_name = <ls_result>-objname.
ls_item-obj_type = <ls_result>-objtype.
ls_sub_item-obj_name = <ls_result>-sobjname.
ls_sub_item-obj_type = <ls_result>-sobjtype.
lv_package = mo_repo->get_package( ).
lv_check_variant_name = mo_repo->get_local_settings( )-code_inspector_check_variant.
li_code_inspector = zcl_abapgit_factory=>get_code_inspector(
iv_package = lv_package
iv_check_variant_name = lv_check_variant_name ).
" see SCI_LCL_DYNP_530 / HANDLE_DOUBLE_CLICK
lv_adt_jump_enabled = zcl_abapgit_persist_settings=>get_instance( )->read( )->get_adt_jump_enabled( ).
TRY.
IF lv_adt_jump_enabled = abap_true.
lv_line_number = <ls_result>-line.
zcl_abapgit_objects_super=>jump_adt( i_obj_name = ls_item-obj_name
i_obj_type = ls_item-obj_type
i_sub_obj_name = ls_sub_item-obj_name
i_sub_obj_type = ls_sub_item-obj_type
i_line_number = lv_line_number ).
RETURN.
ENDIF.
CATCH zcx_abapgit_exception.
ENDTRY.
TRY.
lo_test ?= cl_ci_tests=>get_test_ref( <ls_result>-test ).
CATCH cx_root.
zcx_abapgit_exception=>raise( |Jump to object not supported in your NW release| ).
ENDTRY.
lo_result = lo_test->get_result_node( <ls_result>-kind ).
MOVE-CORRESPONDING <ls_result> TO ls_info.
lo_result->set_info( ls_info ).
lo_result->if_ci_test~navigate( ).
ENDMETHOD.
METHOD render_content. METHOD render_content.
DATA: lv_check_variant TYPE sci_chkv, DATA: lv_check_variant TYPE sci_chkv,
@ -246,50 +153,13 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION.
ro_html->add( |<br/>| ). ro_html->add( |<br/>| ).
LOOP AT mt_result ASSIGNING <ls_result>. LOOP AT mt_result ASSIGNING <ls_result>.
render_result( ro_html = ro_html iv_result = <ls_result> ).
ro_html->add( '<div>' ).
IF <ls_result>-sobjname IS INITIAL or
( <ls_result>-sobjname = <ls_result>-objname and
<ls_result>-sobjtype = <ls_result>-sobjtype ).
ro_html->add_a( iv_txt = |{ <ls_result>-objtype } { <ls_result>-objname }|
iv_act = |{ <ls_result>-objtype }{ <ls_result>-objname }| &&
|{ c_object_separator }{ c_object_separator }{ <ls_result>-line }|
iv_typ = zif_abapgit_definitions=>c_action_type-sapevent ).
ELSE.
ro_html->add_a( iv_txt = |{ <ls_result>-objtype } { <ls_result>-objname }| &&
| < { <ls_result>-sobjtype } { <ls_result>-sobjname }|
iv_act = |{ <ls_result>-objtype }{ <ls_result>-objname }| &&
|{ c_object_separator }{ <ls_result>-sobjtype }{ <ls_result>-sobjname }| &&
|{ c_object_separator }{ <ls_result>-line }|
iv_typ = zif_abapgit_definitions=>c_action_type-sapevent ).
ENDIF.
ro_html->add( '</div>' ).
CASE <ls_result>-kind.
WHEN 'E'.
lv_class = 'error'.
WHEN 'W'.
lv_class = 'warning'.
WHEN OTHERS.
lv_class = 'grey'.
ENDCASE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = <ls_result>-line
IMPORTING
output = lv_line.
ro_html->add( |<div class="{ lv_class }">Line { lv_line }: { <ls_result>-text }</div><br>| ).
ENDLOOP. ENDLOOP.
ro_html->add( '</div>' ). ro_html->add( '</div>' ).
ENDMETHOD. "render_content ENDMETHOD. "render_content
METHOD run_code_inspector. METHOD run_code_inspector.
mt_result = mo_repo->run_code_inspector( ). mt_result = mo_repo->run_code_inspector( ).
@ -315,7 +185,6 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION.
METHOD zif_abapgit_gui_page~on_event. METHOD zif_abapgit_gui_page~on_event.
DATA: lo_repo_online TYPE REF TO zcl_abapgit_repo_online, DATA: lo_repo_online TYPE REF TO zcl_abapgit_repo_online,
ls_item TYPE zif_abapgit_definitions=>ty_item, ls_item TYPE zif_abapgit_definitions=>ty_item,
ls_sub_item TYPE zif_abapgit_definitions=>ty_item. ls_sub_item TYPE zif_abapgit_definitions=>ty_item.
@ -324,7 +193,6 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION.
DATA: lv_line_number_s TYPE string. DATA: lv_line_number_s TYPE string.
DATA: lv_line_number TYPE i. DATA: lv_line_number TYPE i.
CASE iv_action. CASE iv_action.
WHEN c_actions-stage. WHEN c_actions-stage.
@ -371,28 +239,16 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION.
ei_page = me. ei_page = me.
ev_state = zif_abapgit_definitions=>c_event_state-re_render. ev_state = zif_abapgit_definitions=>c_event_state-re_render.
WHEN zif_abapgit_definitions=>c_action-abapgit_home.
RETURN.
WHEN OTHERS. WHEN OTHERS.
SPLIT iv_action AT c_object_separator INTO lv_main_object lv_sub_object lv_line_number_s. super->zif_abapgit_gui_page~on_event(
ls_item-obj_type = lv_main_object(4). EXPORTING
ls_item-obj_name = lv_main_object+4(*). iv_action = iv_action
iv_prev_page = iv_prev_page
IF lv_sub_object IS NOT INITIAL. iv_getdata = iv_getdata
ls_sub_item-obj_type = lv_sub_object(4). it_postdata = it_postdata
ls_sub_item-obj_name = lv_sub_object+4(*). IMPORTING
ENDIF. ei_page = ei_page
ev_state = ev_state ).
lv_line_number = lv_line_number_s.
jump( is_item = ls_item
is_sub_item = ls_sub_item
i_line_number = lv_line_number ).
ev_state = zif_abapgit_definitions=>c_event_state-no_more_act.
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.

View File

@ -0,0 +1,188 @@
CLASS zcl_abapgit_gui_page_codi_base DEFINITION PUBLIC ABSTRACT INHERITING FROM zcl_abapgit_gui_page.
PUBLIC SECTION.
METHODS:
zif_abapgit_gui_page~on_event
REDEFINITION.
PROTECTED SECTION.
DATA: mo_repo TYPE REF TO zcl_abapgit_repo.
DATA:
mt_result TYPE scit_alvlist.
METHODS:
render_result IMPORTING ro_html TYPE REF TO zcl_abapgit_html
iv_result TYPE scir_alvlist,
jump
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
is_sub_item TYPE zif_abapgit_definitions=>ty_item
i_line_number type i
RAISING
zcx_abapgit_exception.
PRIVATE SECTION.
CONSTANTS: c_object_separator TYPE char1 VALUE '|'.
ENDCLASS.
CLASS zcl_abapgit_gui_page_codi_base IMPLEMENTATION.
METHOD render_result.
DATA: lv_class TYPE string,
lv_line TYPE string.
ro_html->add( '<div>' ).
IF iv_result-sobjname IS INITIAL OR
( iv_result-sobjname = iv_result-objname AND
iv_result-sobjtype = iv_result-sobjtype ).
ro_html->add_a( iv_txt = |{ iv_result-objtype } { iv_result-objname }|
iv_act = |{ iv_result-objtype }{ iv_result-objname }| &&
|{ c_object_separator }{ c_object_separator }{ iv_result-line }|
iv_typ = zif_abapgit_definitions=>c_action_type-sapevent ).
ELSE.
ro_html->add_a( iv_txt = |{ iv_result-objtype } { iv_result-objname }| &&
| < { iv_result-sobjtype } { iv_result-sobjname }|
iv_act = |{ iv_result-objtype }{ iv_result-objname }| &&
|{ c_object_separator }{ iv_result-sobjtype }{ iv_result-sobjname }| &&
|{ c_object_separator }{ iv_result-line }|
iv_typ = zif_abapgit_definitions=>c_action_type-sapevent ).
ENDIF.
ro_html->add( '</div>' ).
CASE iv_result-kind.
WHEN 'E'.
lv_class = 'error'.
WHEN 'W'.
lv_class = 'warning'.
WHEN OTHERS.
lv_class = 'grey'.
ENDCASE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = iv_result-line
IMPORTING
output = lv_line.
ro_html->add( |<div class="{ lv_class }">Line { lv_line }: { iv_result-text }</div><br>| ).
ENDMETHOD.
METHOD zif_abapgit_gui_page~on_event.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item,
ls_sub_item TYPE zif_abapgit_definitions=>ty_item,
lv_main_object TYPE string,
lv_sub_object TYPE string,
lv_line_number_s TYPE string,
lv_line_number TYPE i.
CASE iv_action.
WHEN zif_abapgit_definitions=>c_action-abapgit_home.
RETURN.
WHEN OTHERS.
SPLIT iv_action AT c_object_separator INTO lv_main_object lv_sub_object lv_line_number_s.
ls_item-obj_type = lv_main_object(4).
ls_item-obj_name = lv_main_object+4(*).
IF lv_sub_object IS NOT INITIAL.
ls_sub_item-obj_type = lv_sub_object(4).
ls_sub_item-obj_name = lv_sub_object+4(*).
ENDIF.
lv_line_number = lv_line_number_s.
jump( is_item = ls_item
is_sub_item = ls_sub_item
i_line_number = lv_line_number ).
ev_state = zif_abapgit_definitions=>c_event_state-no_more_act.
ENDCASE.
ENDMETHOD.
METHOD jump.
DATA: lo_test TYPE REF TO cl_ci_test_root,
li_code_inspector TYPE REF TO zif_abapgit_code_inspector,
ls_info TYPE scir_rest,
lo_result TYPE REF TO cl_ci_result_root,
lv_check_variant_name TYPE sci_chkv,
lv_package TYPE devclass.
DATA: lv_adt_jump_enabled TYPE abap_bool.
DATA: lv_line_number TYPE i.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
DATA: ls_sub_item TYPE zif_abapgit_definitions=>ty_item.
FIELD-SYMBOLS: <ls_result> TYPE scir_alvlist.
IF is_sub_item IS NOT INITIAL.
READ TABLE mt_result WITH KEY objtype = is_item-obj_type
objname = is_item-obj_name
sobjtype = is_sub_item-obj_type
sobjname = is_sub_item-obj_name
line = i_line_number
ASSIGNING <ls_result>.
ELSE.
READ TABLE mt_result WITH KEY objtype = is_item-obj_type
objname = is_item-obj_name
line = i_line_number
ASSIGNING <ls_result>.
ENDIF.
ASSERT <ls_result> IS ASSIGNED.
ls_item-obj_name = <ls_result>-objname.
ls_item-obj_type = <ls_result>-objtype.
ls_sub_item-obj_name = <ls_result>-sobjname.
ls_sub_item-obj_type = <ls_result>-sobjtype.
lv_package = mo_repo->get_package( ).
lv_check_variant_name = mo_repo->get_local_settings( )-code_inspector_check_variant.
li_code_inspector = zcl_abapgit_factory=>get_code_inspector(
iv_package = lv_package
iv_check_variant_name = lv_check_variant_name ).
" see SCI_LCL_DYNP_530 / HANDLE_DOUBLE_CLICK
lv_adt_jump_enabled = zcl_abapgit_persist_settings=>get_instance( )->read( )->get_adt_jump_enabled( ).
TRY.
IF lv_adt_jump_enabled = abap_true.
lv_line_number = <ls_result>-line.
zcl_abapgit_objects_super=>jump_adt( i_obj_name = ls_item-obj_name
i_obj_type = ls_item-obj_type
i_sub_obj_name = ls_sub_item-obj_name
i_sub_obj_type = ls_sub_item-obj_type
i_line_number = lv_line_number ).
RETURN.
ENDIF.
CATCH zcx_abapgit_exception.
ENDTRY.
TRY.
lo_test ?= cl_ci_tests=>get_test_ref( <ls_result>-test ).
CATCH cx_root.
zcx_abapgit_exception=>raise( |Jump to object not supported in your NW release| ).
ENDTRY.
lo_result = lo_test->get_result_node( <ls_result>-kind ).
MOVE-CORRESPONDING <ls_result> TO ls_info.
lo_result->set_info( ls_info ).
lo_result->if_ci_test~navigate( ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_GUI_PAGE_CODI_BASE</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>base class for code inspector</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSABSTRCT>X</CLSABSTRCT>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -1,5 +1,5 @@
CLASS zcl_abapgit_gui_page_syntax DEFINITION PUBLIC FINAL CREATE PUBLIC CLASS zcl_abapgit_gui_page_syntax DEFINITION PUBLIC FINAL CREATE PUBLIC
INHERITING FROM zcl_abapgit_gui_page. INHERITING FROM zcl_abapgit_gui_page_codi_base.
PUBLIC SECTION. PUBLIC SECTION.
INTERFACES: zif_abapgit_gui_page_hotkey. INTERFACES: zif_abapgit_gui_page_hotkey.
@ -9,7 +9,6 @@ CLASS zcl_abapgit_gui_page_syntax DEFINITION PUBLIC FINAL CREATE PUBLIC
IMPORTING io_repo TYPE REF TO zcl_abapgit_repo. IMPORTING io_repo TYPE REF TO zcl_abapgit_repo.
PROTECTED SECTION. PROTECTED SECTION.
DATA: mo_repo TYPE REF TO zcl_abapgit_repo.
METHODS: METHODS:
render_content REDEFINITION. render_content REDEFINITION.
@ -30,23 +29,22 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SYNTAX IMPLEMENTATION.
METHOD render_content. METHOD render_content.
DATA: li_syntax_check TYPE REF TO zif_abapgit_code_inspector, DATA: li_syntax_check TYPE REF TO zif_abapgit_code_inspector.
lt_result TYPE scit_alvlist, FIELD-SYMBOLS: <ls_result> LIKE LINE OF mt_result.
ls_result LIKE LINE OF lt_result.
li_syntax_check = zcl_abapgit_factory=>get_syntax_check( iv_package = mo_repo->get_package( ) ). li_syntax_check = zcl_abapgit_factory=>get_syntax_check( iv_package = mo_repo->get_package( ) ).
lt_result = li_syntax_check->run( ). mt_result = li_syntax_check->run( ).
CREATE OBJECT ro_html. CREATE OBJECT ro_html.
ro_html->add( '<div class="toc">' ). ro_html->add( '<div class="toc">' ).
IF lines( lt_result ) = 0. IF lines( mt_result ) = 0.
ro_html->add( 'No errors' ). ro_html->add( 'No errors' ).
ENDIF. ENDIF.
LOOP AT lt_result INTO ls_result. LOOP AT mt_result ASSIGNING <ls_result>.
ro_html->add( |{ ls_result-objtype } { ls_result-objname } { ls_result-kind } { ls_result-text }<br>| ). render_result( ro_html = ro_html iv_result = <ls_result> ).
ENDLOOP. ENDLOOP.
ro_html->add( '</div>' ). ro_html->add( '</div>' ).