diff --git a/src/objects/zcl_abapgit_objects_super.clas.abap b/src/objects/zcl_abapgit_objects_super.clas.abap index 4b768438c..adead7e76 100644 --- a/src/objects/zcl_abapgit_objects_super.clas.abap +++ b/src/objects/zcl_abapgit_objects_super.clas.abap @@ -10,8 +10,11 @@ CLASS zcl_abapgit_objects_super DEFINITION PUBLIC ABSTRACT. CLASS-METHODS: jump_adt - IMPORTING i_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name - i_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type + IMPORTING i_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name + i_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type + i_sub_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name OPTIONAL + i_sub_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type OPTIONAL + i_line_number TYPE i OPTIONAL RAISING zcx_abapgit_exception. CONSTANTS: c_user_unknown TYPE xubname VALUE 'UNKNOWN'. @@ -68,6 +71,18 @@ CLASS zcl_abapgit_objects_super DEFINITION PUBLIC ABSTRACT. io_adt TYPE REF TO object RETURNING VALUE(r_is_adt_jump_possible) TYPE abap_bool RAISING zcx_abapgit_exception. + CLASS-METHODS: + get_adt_objects_and_names + IMPORTING + i_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name + i_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type + EXPORTING + eo_adt_uri_mapper TYPE REF TO object + eo_adt_objectref TYPE REF TO object + e_program TYPE progname + e_include TYPE progname + RAISING + zcx_abapgit_exception. ENDCLASS. @@ -255,17 +270,75 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION. METHOD jump_adt. - DATA: lv_adt_link TYPE string, - lv_obj_type TYPE trobjtype, - lv_obj_name TYPE trobj_name, - lo_object TYPE REF TO cl_wb_object, - lo_adt TYPE REF TO object, - lo_adt_uri_mapper TYPE REF TO object, - lo_adt_objref TYPE REF TO object ##needed. - + DATA: lv_adt_link TYPE string. + DATA: lo_adt_uri_mapper TYPE REF TO object ##needed. + DATA: lo_adt_objref TYPE REF TO object ##needed. + DATA: lo_adt_sub_objref TYPE REF TO object ##needed. + DATA: lv_program TYPE progname. + DATA: lv_include TYPE progname. FIELD-SYMBOLS: TYPE string. + get_adt_objects_and_names( + EXPORTING + i_obj_name = i_obj_name + i_obj_type = i_obj_type + IMPORTING + eo_adt_uri_mapper = lo_adt_uri_mapper + eo_adt_objectref = lo_adt_objref + e_program = lv_program + e_include = lv_include ). + + TRY. + IF i_sub_obj_name IS NOT INITIAL. + + IF ( lv_program <> i_obj_name AND lv_include IS INITIAL ) OR + ( lv_program = lv_include AND i_sub_obj_name IS NOT INITIAL ). + lv_include = i_sub_obj_name. + ENDIF. + + CALL METHOD lo_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_INCLUDE_TO_OBJREF') + EXPORTING + program = lv_program + include = lv_include + line = i_line_number + line_offset = 0 + end_line = i_line_number + end_offset = 1 + RECEIVING + result = lo_adt_sub_objref. + IF lo_adt_sub_objref IS NOT INITIAL. + lo_adt_objref = lo_adt_sub_objref. + ENDIF. + + ENDIF. + + ASSIGN ('LO_ADT_OBJREF->REF_DATA-URI') TO . + ASSERT sy-subrc = 0. + + CONCATENATE 'adt://' sy-sysid INTO lv_adt_link. + + cl_gui_frontend_services=>execute( EXPORTING document = lv_adt_link + EXCEPTIONS OTHERS = 1 ). + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'ADT Jump Error' ). + ENDIF. + + CATCH cx_root. + zcx_abapgit_exception=>raise( 'ADT Jump Error' ). + ENDTRY. + + ENDMETHOD. + + METHOD get_adt_objects_and_names. + + DATA lv_obj_type TYPE trobjtype. + DATA lv_obj_name TYPE trobj_name. + DATA lo_object TYPE REF TO cl_wb_object. + DATA lo_adt TYPE REF TO object. + FIELD-SYMBOLS TYPE string. + lv_obj_name = i_obj_name. lv_obj_type = i_obj_type. @@ -293,25 +366,23 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION. CALL METHOD lo_adt->('IF_ADT_TOOLS_CORE_FACTORY~GET_URI_MAPPER') RECEIVING - result = lo_adt_uri_mapper. + result = eo_adt_uri_mapper. - CALL METHOD lo_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_WB_OBJECT_TO_OBJREF') + CALL METHOD eo_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_WB_OBJECT_TO_OBJREF') EXPORTING wb_object = lo_object RECEIVING - result = lo_adt_objref. + result = eo_adt_objectref. - ASSIGN ('LO_ADT_OBJREF->REF_DATA-URI') TO . + ASSIGN ('EO_ADT_OBJECTREF->REF_DATA-URI') TO . ASSERT sy-subrc = 0. - CONCATENATE 'adt://' sy-sysid INTO lv_adt_link. - - cl_gui_frontend_services=>execute( EXPORTING document = lv_adt_link - EXCEPTIONS OTHERS = 1 ). - - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( 'ADT Jump Error' ). - ENDIF. + CALL METHOD eo_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_OBJREF_TO_INCLUDE') + EXPORTING + uri = + IMPORTING + program = e_program + include = e_include. CATCH cx_root. zcx_abapgit_exception=>raise( 'ADT Jump Error' ). diff --git a/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap b/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap index 1490bc2d7..37ad7ecca 100644 --- a/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap @@ -31,6 +31,7 @@ CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC commit TYPE string VALUE 'commit' ##NO_TEXT, rerun TYPE string VALUE 'rerun' ##NO_TEXT, END OF c_actions. + CONSTANTS: c_object_separator type char1 VALUE '|'. DATA: mt_result TYPE scit_alvlist, @@ -56,7 +57,9 @@ CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC VALUE(rv_is_stage_allowed) TYPE abap_bool, jump IMPORTING - is_item TYPE zif_abapgit_definitions=>ty_item + 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. @@ -141,13 +144,32 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. 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: TYPE scir_alvlist. - READ TABLE mt_result WITH KEY objtype = is_item-obj_type - objname = is_item-obj_name - ASSIGNING . - ASSERT sy-subrc = 0. + 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 . + ELSE. + READ TABLE mt_result WITH KEY objtype = is_item-obj_type + objname = is_item-obj_name + line = i_line_number + ASSIGNING . + ENDIF. + ASSERT IS ASSIGNED. + ls_item-obj_name = -objname. + ls_item-obj_type = -objtype. + + ls_sub_item-obj_name = -sobjname. + ls_sub_item-obj_type = -sobjtype. lv_package = mo_repo->get_package( ). lv_check_variant_name = mo_repo->get_local_settings( )-code_inspector_check_variant. @@ -158,7 +180,23 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. " see SCI_LCL_DYNP_530 / HANDLE_DOUBLE_CLICK - MOVE-CORRESPONDING TO ls_info. + 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 = -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( -test ). @@ -169,6 +207,9 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. lo_result = lo_test->get_result_node( -kind ). + + MOVE-CORRESPONDING TO ls_info. + lo_result->set_info( ls_info ). lo_result->if_ci_test~navigate( ). @@ -207,9 +248,23 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. LOOP AT mt_result ASSIGNING . ro_html->add( '
' ). - ro_html->add_a( iv_txt = |{ -objtype } { -objname }| - iv_act = |{ -objtype }{ -objname }| - iv_typ = zif_abapgit_definitions=>c_action_type-sapevent ). + IF -sobjname IS INITIAL or + ( -sobjname = -objname and + -sobjtype = -sobjtype ). + ro_html->add_a( iv_txt = |{ -objtype } { -objname }| + iv_act = |{ -objtype }{ -objname }| && + |{ c_object_separator }{ c_object_separator }{ -line }| + iv_typ = zif_abapgit_definitions=>c_action_type-sapevent ). + + ELSE. + ro_html->add_a( iv_txt = |{ -objtype } { -objname }| && + | < { -sobjtype } { -sobjname }| + iv_act = |{ -objtype }{ -objname }| && + |{ c_object_separator }{ -sobjtype }{ -sobjname }| && + |{ c_object_separator }{ -line }| + iv_typ = zif_abapgit_definitions=>c_action_type-sapevent ). + + ENDIF. ro_html->add( '
' ). CASE -kind. @@ -242,10 +297,32 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions. + + DATA: ls_hotkey_action LIKE LINE OF rt_hotkey_actions. + + ls_hotkey_action-name = |Code Inspector: Stage|. + ls_hotkey_action-action = c_actions-stage. + ls_hotkey_action-default_hotkey = |s|. + INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. + + ls_hotkey_action-name = |Code Inspector: Re-Run|. + ls_hotkey_action-action = c_actions-rerun. + ls_hotkey_action-default_hotkey = |r|. + INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. + + ENDMETHOD. + + METHOD zif_abapgit_gui_page~on_event. - DATA: lo_repo_online TYPE REF TO zcl_abapgit_repo_online, - ls_item TYPE zif_abapgit_definitions=>ty_item. + DATA: lo_repo_online TYPE REF TO zcl_abapgit_repo_online, + ls_item TYPE zif_abapgit_definitions=>ty_item, + ls_sub_item TYPE zif_abapgit_definitions=>ty_item. + DATA: lv_main_object TYPE string. + DATA: lv_sub_object TYPE string. + DATA: lv_line_number_s TYPE string. + DATA: lv_line_number TYPE i. CASE iv_action. @@ -299,13 +376,20 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. 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(*). - ls_item-obj_type = iv_action(4). - ls_item-obj_name = iv_action+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. - jump( ls_item ). + lv_line_number = lv_line_number_s. -* zcl_abapgit_objects=>jump( ls_item ). + 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. @@ -320,22 +404,4 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. ro_html = super->zif_abapgit_gui_page~render( ). ENDMETHOD. - - - METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions. - - DATA: ls_hotkey_action LIKE LINE OF rt_hotkey_actions. - - ls_hotkey_action-name = |Code Inspector: Stage|. - ls_hotkey_action-action = c_actions-stage. - ls_hotkey_action-default_hotkey = |s|. - INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. - - ls_hotkey_action-name = |Code Inspector: Re-Run|. - ls_hotkey_action-action = c_actions-rerun. - ls_hotkey_action-default_hotkey = |r|. - INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. - - ENDMETHOD. - ENDCLASS. diff --git a/src/zcl_abapgit_objects.clas.abap b/src/zcl_abapgit_objects.clas.abap index 2f6e960e6..4bf0b66ad 100644 --- a/src/zcl_abapgit_objects.clas.abap +++ b/src/zcl_abapgit_objects.clas.abap @@ -48,7 +48,8 @@ CLASS zcl_abapgit_objects DEFINITION zcx_abapgit_exception . CLASS-METHODS jump IMPORTING - !is_item TYPE zif_abapgit_definitions=>ty_item + !is_item TYPE zif_abapgit_definitions=>ty_item + !i_line_number TYPE i OPTIONAL RAISING zcx_abapgit_exception . CLASS-METHODS changed_by @@ -723,8 +724,9 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION. IF lv_adt_jump_enabled = abap_true. TRY. zcl_abapgit_objects_super=>jump_adt( - i_obj_name = is_item-obj_name - i_obj_type = is_item-obj_type ). + i_obj_name = is_item-obj_name + i_obj_type = is_item-obj_type + i_line_number = i_line_number ). CATCH zcx_abapgit_exception. li_obj->jump( ). ENDTRY.