Resolve circular reference in /syntax/ (#4292)

Closes #4258

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2020-12-07 03:13:58 -05:00 committed by GitHub
parent 88372f0430
commit 07cdc0e0e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 74 additions and 43 deletions

View File

@ -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.

View File

@ -0,0 +1,16 @@
<?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_SYNTAX_FACTORY</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Syntax Highlighter Factory</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -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,

View File

@ -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.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_SYNTAX_HIGHLIGHTER</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Syntax highlighter</DESCRIPT>
<DESCRIPT>abapGit - Syntax Highlighter</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -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.

View File

@ -749,8 +749,8 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
FIELD-SYMBOLS <ls_diff> 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( ).

View File

@ -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 <ls_diff> 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( ).