3030import org .springframework .stereotype .Component ;
3131
3232import java .util .ArrayList ;
33- import java .util .HashSet ;
3433import java .util .List ;
3534import java .util .Objects ;
3635import java .util .Set ;
3736
3837/**
39- * Сапплаер семантических токенов для лексических элементов: строк, чисел, операторов и ключевых слов.
38+ * Сапплаер семантических токенов для лексических элементов: чисел, операторов и ключевых слов.
4039 * <p>
41- * Исключает строки, которые содержат запросы SDBL (они обрабатываются в {@link QuerySemanticTokensSupplier}) .
40+ * Строки обрабатываются в {@link StringSemanticTokensSupplier} .
4241 */
4342@ Component
4443@ RequiredArgsConstructor
@@ -53,8 +52,7 @@ public class LexicalSemanticTokensSupplier implements SemanticTokensSupplier {
5352 BSLLexer .STRING ,
5453 BSLLexer .STRINGPART ,
5554 BSLLexer .STRINGSTART ,
56- BSLLexer .STRINGTAIL ,
57- BSLLexer .PREPROC_STRING
55+ BSLLexer .STRINGTAIL
5856 );
5957
6058 private static final Set <Integer > OPERATOR_TYPES = Set .of (
@@ -107,14 +105,13 @@ public class LexicalSemanticTokensSupplier implements SemanticTokensSupplier {
107105 public List <SemanticTokenEntry > getSemanticTokens (DocumentContext documentContext ) {
108106 List <SemanticTokenEntry > entries = new ArrayList <>();
109107 var tokensFromDefaultChannel = documentContext .getTokensFromDefaultChannel ();
110- var stringsWithQueries = collectStringsWithQueries (documentContext );
111108
112109 for (Token token : tokensFromDefaultChannel ) {
113110 var tokenType = token .getType ();
114111 var tokenText = Objects .toString (token .getText (), "" );
115112 if (!tokenText .isEmpty ()) {
116- // Skip string tokens that contain SDBL tokens - they'll be handled by QuerySemanticTokensSupplier
117- if (STRING_TYPES .contains (tokenType ) && stringsWithQueries . contains ( token ) ) {
113+ // Skip STRING tokens - they are handled by StringSemanticTokensSupplier
114+ if (STRING_TYPES .contains (tokenType )) {
118115 continue ;
119116 }
120117 selectAndAddSemanticToken (entries , token , tokenType );
@@ -124,46 +121,15 @@ public List<SemanticTokenEntry> getSemanticTokens(DocumentContext documentContex
124121 return entries ;
125122 }
126123
127- private Set <Token > collectStringsWithQueries (DocumentContext documentContext ) {
128- var queries = documentContext .getQueries ();
129- if (queries .isEmpty ()) {
130- return Set .of ();
131- }
132-
133- var stringsToSkip = new HashSet <Token >();
134- for (var query : queries ) {
135- for (Token queryToken : query .getTokens ()) {
136- if (queryToken .getChannel () != Token .DEFAULT_CHANNEL ) {
137- continue ;
138- }
139- int queryLine = queryToken .getLine ();
140- for (var bslToken : documentContext .getTokensFromDefaultChannel ()) {
141- if (!STRING_TYPES .contains (bslToken .getType ())) {
142- continue ;
143- }
144- if (bslToken .getLine () == queryLine ) {
145- var bslRange = Ranges .create (bslToken );
146- int queryStart = queryToken .getCharPositionInLine ();
147- int queryEnd = queryStart + queryToken .getText ().length ();
148- if (queryStart >= bslRange .getStart ().getCharacter () && queryEnd <= bslRange .getEnd ().getCharacter ()) {
149- stringsToSkip .add (bslToken );
150- }
151- }
152- }
153- }
154- }
155- return stringsToSkip ;
156- }
157-
158124 private void selectAndAddSemanticToken (List <SemanticTokenEntry > entries , Token token , int tokenType ) {
159125 // Skip '&' and all ANNOTATION_* symbol tokens here to avoid duplicate Decorator emission (handled via AST)
160126 if (tokenType == BSLLexer .AMPERSAND || ANNOTATION_TOKENS .contains (tokenType )) {
161127 return ;
162128 }
163129
164- if (STRING_TYPES . contains ( tokenType ) ) {
130+ if (tokenType == BSLLexer . DATETIME ) {
165131 helper .addRange (entries , Ranges .create (token ), SemanticTokenTypes .String );
166- } else if (tokenType == BSLLexer .DATETIME ) {
132+ } else if (tokenType == BSLLexer .PREPROC_STRING ) {
167133 helper .addRange (entries , Ranges .create (token ), SemanticTokenTypes .String );
168134 } else if (NUMBER_TYPES .contains (tokenType )) {
169135 helper .addRange (entries , Ranges .create (token ), SemanticTokenTypes .Number );
0 commit comments