From 07cdc0e0e85596419bca61955a5f94cafaf03b89 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Mon, 7 Dec 2020 03:13:58 -0500 Subject: [PATCH] Resolve circular reference in /syntax/ (#4292) Closes #4258 Co-authored-by: Lars Hvam --- .../zcl_abapgit_syntax_factory.clas.abap | 46 +++++++++++++++++++ .../zcl_abapgit_syntax_factory.clas.xml | 16 +++++++ .../zcl_abapgit_syntax_highlighter.clas.abap | 37 ++------------- ...t_syntax_highlighter.clas.testclasses.abap | 4 +- .../zcl_abapgit_syntax_highlighter.clas.xml | 2 +- .../db/zcl_abapgit_gui_page_db_dis.clas.abap | 4 +- src/ui/zcl_abapgit_gui_page_diff.clas.abap | 4 +- .../zcl_abapgit_gui_page_merge_res.clas.abap | 4 +- 8 files changed, 74 insertions(+), 43 deletions(-) create mode 100644 src/syntax/zcl_abapgit_syntax_factory.clas.abap create mode 100644 src/syntax/zcl_abapgit_syntax_factory.clas.xml diff --git a/src/syntax/zcl_abapgit_syntax_factory.clas.abap b/src/syntax/zcl_abapgit_syntax_factory.clas.abap new file mode 100644 index 000000000..af5dda81e --- /dev/null +++ b/src/syntax/zcl_abapgit_syntax_factory.clas.abap @@ -0,0 +1,46 @@ +CLASS zcl_abapgit_syntax_factory DEFINITION + PUBLIC + ABSTRACT + CREATE PUBLIC . + + PUBLIC SECTION. + + CLASS-METHODS create + IMPORTING + !iv_filename TYPE string + !iv_hidden_chars TYPE abap_bool DEFAULT abap_false + RETURNING + VALUE(ro_instance) TYPE REF TO zcl_abapgit_syntax_highlighter . + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS zcl_abapgit_syntax_factory IMPLEMENTATION. + + + METHOD create. + + " Create instance of highighter dynamically dependent on syntax type + IF iv_filename CP '*.abap'. + CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_abap. + ELSEIF iv_filename CP '*.xml' OR iv_filename CP '*.html'. + CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_xml. + ELSEIF iv_filename CP '*.css'. + CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_css. + ELSEIF iv_filename CP '*.js'. + CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_js. + ELSEIF iv_filename CP '*.json'. + CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_json. + ELSEIF iv_filename CP '*.txt' OR iv_filename CP '*.ini' OR iv_filename CP '*.text'. + CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_txt. + ELSE. + CLEAR ro_instance. + ENDIF. + + IF ro_instance IS BOUND. + ro_instance->set_hidden_chars( iv_hidden_chars ). + ENDIF. + ENDMETHOD. +ENDCLASS. diff --git a/src/syntax/zcl_abapgit_syntax_factory.clas.xml b/src/syntax/zcl_abapgit_syntax_factory.clas.xml new file mode 100644 index 000000000..eb3f8d748 --- /dev/null +++ b/src/syntax/zcl_abapgit_syntax_factory.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_SYNTAX_FACTORY + E + abapGit - Syntax Highlighter Factory + 1 + X + X + X + + + + diff --git a/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap b/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap index cd13267a5..bb9063ee1 100644 --- a/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap +++ b/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap @@ -5,17 +5,14 @@ CLASS zcl_abapgit_syntax_highlighter DEFINITION PUBLIC SECTION. - CLASS-METHODS create - IMPORTING - !iv_filename TYPE string - !iv_hidden_chars TYPE abap_bool DEFAULT abap_false - RETURNING - VALUE(ro_instance) TYPE REF TO zcl_abapgit_syntax_highlighter . METHODS process_line IMPORTING !iv_line TYPE string RETURNING VALUE(rv_line) TYPE string . + METHODS set_hidden_chars + IMPORTING + !iv_hidden_chars TYPE abap_bool . PROTECTED SECTION. TYPES: @@ -78,9 +75,6 @@ CLASS zcl_abapgit_syntax_highlighter DEFINITION !iv_string TYPE string RETURNING VALUE(rv_result) TYPE abap_bool . - METHODS set_hidden_chars - IMPORTING - !iv_hidden_chars TYPE abap_bool . METHODS show_hidden_chars IMPORTING !iv_line TYPE string @@ -131,31 +125,6 @@ CLASS zcl_abapgit_syntax_highlighter IMPLEMENTATION. ENDMETHOD. - METHOD create. - - " Create instance of highighter dynamically dependent on syntax type - IF iv_filename CP '*.abap'. - CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_abap. - ELSEIF iv_filename CP '*.xml' OR iv_filename CP '*.html'. - CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_xml. - ELSEIF iv_filename CP '*.css'. - CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_css. - ELSEIF iv_filename CP '*.js'. - CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_js. - ELSEIF iv_filename CP '*.json'. - CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_json. - ELSEIF iv_filename CP '*.txt' OR iv_filename CP '*.ini' OR iv_filename CP '*.text'. - CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_txt. - ELSE. - CLEAR ro_instance. - ENDIF. - - IF ro_instance IS BOUND. - ro_instance->set_hidden_chars( iv_hidden_chars ). - ENDIF. - ENDMETHOD. - - METHOD extend_matches. DATA: lv_line_len TYPE i, diff --git a/src/syntax/zcl_abapgit_syntax_highlighter.clas.testclasses.abap b/src/syntax/zcl_abapgit_syntax_highlighter.clas.testclasses.abap index 29f3fd7ae..08b625a3b 100644 --- a/src/syntax/zcl_abapgit_syntax_highlighter.clas.testclasses.abap +++ b/src/syntax/zcl_abapgit_syntax_highlighter.clas.testclasses.abap @@ -59,7 +59,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION. lo_syntax TYPE REF TO zcl_abapgit_syntax_highlighter. - lo_syntax = zcl_abapgit_syntax_highlighter=>create( iv_filename ). + lo_syntax = zcl_abapgit_syntax_factory=>create( iv_filename ). lt_matches_act = lo_syntax->parse_line( iv_line ). SORT lt_matches_act BY offset. @@ -1290,7 +1290,7 @@ ENDCLASS. CLASS ltcl_syntax_basic_logic IMPLEMENTATION. METHOD setup. - mo_syntax_highlighter = zcl_abapgit_syntax_highlighter=>create( '*.abap' ). + mo_syntax_highlighter = zcl_abapgit_syntax_factory=>create( '*.abap' ). ENDMETHOD. METHOD format_line. diff --git a/src/syntax/zcl_abapgit_syntax_highlighter.clas.xml b/src/syntax/zcl_abapgit_syntax_highlighter.clas.xml index ef6f27c15..00403f49b 100644 --- a/src/syntax/zcl_abapgit_syntax_highlighter.clas.xml +++ b/src/syntax/zcl_abapgit_syntax_highlighter.clas.xml @@ -5,7 +5,7 @@ ZCL_ABAPGIT_SYNTAX_HIGHLIGHTER E - Syntax highlighter + abapGit - Syntax Highlighter 1 X X diff --git a/src/ui/db/zcl_abapgit_gui_page_db_dis.clas.abap b/src/ui/db/zcl_abapgit_gui_page_db_dis.clas.abap index 32dd7078f..1bfb41726 100644 --- a/src/ui/db/zcl_abapgit_gui_page_db_dis.clas.abap +++ b/src/ui/db/zcl_abapgit_gui_page_db_dis.clas.abap @@ -23,7 +23,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_DB_DIS IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_db_dis IMPLEMENTATION. METHOD constructor. @@ -50,7 +50,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB_DIS IMPLEMENTATION. ENDTRY. " Create syntax highlighter - lo_highlighter = zcl_abapgit_syntax_highlighter=>create( '*.xml' ). + lo_highlighter = zcl_abapgit_syntax_factory=>create( '*.xml' ). ls_action-type = ms_key-type. ls_action-value = ms_key-value. diff --git a/src/ui/zcl_abapgit_gui_page_diff.clas.abap b/src/ui/zcl_abapgit_gui_page_diff.clas.abap index 67cd9eb9d..c22514566 100644 --- a/src/ui/zcl_abapgit_gui_page_diff.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_diff.clas.abap @@ -749,8 +749,8 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION. FIELD-SYMBOLS LIKE LINE OF lt_diffs. - lo_highlighter = zcl_abapgit_syntax_highlighter=>create( iv_filename = is_diff-filename - iv_hidden_chars = mv_hidden_chars ). + lo_highlighter = zcl_abapgit_syntax_factory=>create( iv_filename = is_diff-filename + iv_hidden_chars = mv_hidden_chars ). CREATE OBJECT ri_html TYPE zcl_abapgit_html. lt_diffs = is_diff-o_diff->get( ). diff --git a/src/ui/zcl_abapgit_gui_page_merge_res.clas.abap b/src/ui/zcl_abapgit_gui_page_merge_res.clas.abap index abb525176..563c1a041 100644 --- a/src/ui/zcl_abapgit_gui_page_merge_res.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_merge_res.clas.abap @@ -107,7 +107,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE_RES IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_merge_res IMPLEMENTATION. METHOD apply_merged_content. @@ -351,7 +351,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE_RES IMPLEMENTATION. FIELD-SYMBOLS LIKE LINE OF lt_diffs. - lo_highlighter = zcl_abapgit_syntax_highlighter=>create( is_diff-filename ). + lo_highlighter = zcl_abapgit_syntax_factory=>create( is_diff-filename ). CREATE OBJECT ri_html TYPE zcl_abapgit_html. lt_diffs = is_diff-o_diff->get( ).