Skip to content

Commit 1d02a04

Browse files
committed
[HQL] Semantic tokens adjustment
1 parent ec8b9ea commit 1d02a04

File tree

2 files changed

+61
-12
lines changed

2 files changed

+61
-12
lines changed

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/HqlSemanticTokens.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,14 @@
4040
import org.springframework.ide.vscode.parser.hql.HqlParser;
4141
import org.springframework.ide.vscode.parser.hql.HqlParser.EntityNameContext;
4242
import org.springframework.ide.vscode.parser.hql.HqlParser.IdentifierContext;
43+
import org.springframework.ide.vscode.parser.hql.HqlParser.InstantiationTargetContext;
4344
import org.springframework.ide.vscode.parser.hql.HqlParser.ParameterContext;
4445
import org.springframework.ide.vscode.parser.hql.HqlParser.SimplePathElementContext;
4546

4647
public class HqlSemanticTokens implements SemanticTokensDataProvider {
4748

4849
private static List<String> TOKEN_TYPES = List.of("keyword", "type", "class", "string", "number", "operator",
49-
"variable", "method", "parameter");
50+
"variable", "method", "parameter", "property");
5051

5152
private final Optional<SpelSemanticTokens> optSpelTokens;
5253

@@ -128,10 +129,18 @@ public void visitTerminal(TerminalNode node) {
128129
public void visitErrorNode(ErrorNode node) {
129130
processTerminalNode(node);
130131
}
131-
132+
133+
@Override
134+
public void exitInstantiationTarget(InstantiationTargetContext ctx) {
135+
int offset = initialOffset + ctx.getStart().getStartIndex();
136+
int length = ctx.getText().length();
137+
tokens.add(new SemanticTokenData(offset, offset + length , "method", new String[0]));
138+
AntlrUtils.getAllLeafs(ctx).forEach(semantics::remove);
139+
}
140+
132141
@Override
133142
public void exitSimplePathElement(SimplePathElementContext ctx) {
134-
semantics.put(ctx.identifier().getStart(), "method");
143+
semantics.put(ctx.identifier().getStart(), "property");
135144
}
136145

137146
@Override

headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/HqlSemanticTokensTest.java

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void query_with_conflicting_groupby() {
6666
assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(28, 30, "keyword", new String[0]));
6767
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(31, 32, "variable", new String[0]));
6868
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(32, 33, "operator", new String[0]));
69-
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(33, 37, "method", new String[0]));
69+
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(33, 37, "property", new String[0]));
7070

7171
assertThat(tokens.size()).isEqualTo(10);
7272
}
@@ -84,11 +84,11 @@ void query_with_parameter() {
8484
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(44, 48, "keyword", new String[0])); // join
8585
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(50, 55, "variable", new String[0])); // owner
8686
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(55, 56, "operator", new String[0])); // .
87-
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(56, 60, "method", new String[0])); // pets
87+
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(56, 60, "property", new String[0])); // pets
8888
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(61, 66, "keyword", new String[0])); // WHERE
8989
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(67, 72, "variable", new String[0])); // owner
9090
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(72, 73, "operator", new String[0])); // .
91-
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(73, 81, "method", new String[0])); // lastName
91+
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(73, 81, "property", new String[0])); // lastName
9292
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(82, 86, "keyword", new String[0])); // LIKE
9393
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(87, 88, "operator", new String[0])); // :
9494
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(88, 96, "parameter", new String[0])); // lastName
@@ -110,11 +110,11 @@ void query_with_SPEL() {
110110
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(40, 45, "keyword", new String[0])); // fetch
111111
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(46, 51, "variable", new String[0])); // owner
112112
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(51, 52, "operator", new String[0])); // .
113-
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "method", new String[0])); // pets
113+
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "property", new String[0])); // pets
114114
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(57, 62, "keyword", new String[0])); // WHERE
115115
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(63, 68, "variable", new String[0])); // owner
116116
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(68, 69, "operator", new String[0])); // .
117-
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "method", new String[0])); // id
117+
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "property", new String[0])); // id
118118
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(72, 73, "operator", new String[0])); // =
119119
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(73, 74, "operator", new String[0])); // :
120120
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(74, 76, "operator", new String[0])); // #{
@@ -138,11 +138,11 @@ void query_with_SPEL_Tokens() {
138138
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(40, 45, "keyword", new String[0])); // fetch
139139
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(46, 51, "variable", new String[0])); // owner
140140
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(51, 52, "operator", new String[0])); // .
141-
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "method", new String[0])); // pets
141+
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "property", new String[0])); // pets
142142
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(57, 62, "keyword", new String[0])); // WHERE
143143
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(63, 68, "variable", new String[0])); // owner
144144
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(68, 69, "operator", new String[0])); // .
145-
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "method", new String[0])); // id
145+
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "property", new String[0])); // id
146146
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(72, 73, "operator", new String[0])); // =
147147
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(73, 74, "operator", new String[0])); // :
148148
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(74, 76, "operator", new String[0])); // #{
@@ -166,11 +166,11 @@ void query_with_complex_SPEL_Tokens() {
166166
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(40, 45, "keyword", new String[0])); // fetch
167167
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(46, 51, "variable", new String[0])); // owner
168168
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(51, 52, "operator", new String[0])); // .
169-
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "method", new String[0])); // pets
169+
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "property", new String[0])); // pets
170170
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(57, 62, "keyword", new String[0])); // WHERE
171171
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(63, 68, "variable", new String[0])); // owner
172172
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(68, 69, "operator", new String[0])); // .
173-
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "method", new String[0])); // id
173+
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "property", new String[0])); // id
174174
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(72, 73, "operator", new String[0])); // =
175175
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(73, 74, "operator", new String[0])); // :
176176
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(74, 76, "operator", new String[0])); // #{
@@ -189,4 +189,44 @@ void query_with_complex_SPEL_Tokens() {
189189

190190
assertThat(tokens.size()).isEqualTo(30);
191191
}
192+
193+
@Test
194+
void instatiotation_1() {
195+
provider = new HqlSemanticTokens(Optional.of(new SpelSemanticTokens()));
196+
List<SemanticTokenData> tokens = provider.computeTokens("SELECT new com.example.ls.issue.SampleTableSizePojo(t.schemaName, sum(t.tableSize) ) FROM MTables t GROUP BY t.schemaName ORDER BY sum(t.tableSize) DESC", 0);
197+
assertThat(tokens.size()).isEqualTo(32);
198+
199+
assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0])); // SELECT
200+
assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 10, "keyword", new String[0])); // new
201+
assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(11, 51, "method", new String[0])); // com.example.ls.issue.SampleTableSizePojo
202+
assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(51, 52, "operator", new String[0])); // (
203+
assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(52, 53, "variable", new String[0])); // t
204+
assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(53, 54, "operator", new String[0])); // .
205+
assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(54, 64, "property", new String[0])); // schemaName
206+
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(64, 65, "operator", new String[0])); // ,
207+
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(66, 69, "keyword", new String[0])); // sum
208+
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(69, 70, "operator", new String[0])); // (
209+
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(70, 71, "variable", new String[0])); // t
210+
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(71, 72, "operator", new String[0])); // .
211+
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(72, 81, "property", new String[0])); // tableSize
212+
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(81, 82, "operator", new String[0])); // )
213+
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(83, 84, "operator", new String[0])); // )
214+
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(85, 89, "keyword", new String[0])); // FROM
215+
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(90, 97, "class", new String[0])); // MTables
216+
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(98, 99, "variable", new String[0])); // t
217+
assertThat(tokens.get(18)).isEqualTo(new SemanticTokenData(100, 105, "keyword", new String[0])); // GROUP
218+
assertThat(tokens.get(19)).isEqualTo(new SemanticTokenData(106, 108, "keyword", new String[0])); // BY
219+
assertThat(tokens.get(20)).isEqualTo(new SemanticTokenData(109, 110, "variable", new String[0])); // t
220+
assertThat(tokens.get(21)).isEqualTo(new SemanticTokenData(110, 111, "operator", new String[0])); // .
221+
assertThat(tokens.get(22)).isEqualTo(new SemanticTokenData(111, 121, "property", new String[0])); // schemaName
222+
assertThat(tokens.get(23)).isEqualTo(new SemanticTokenData(122, 127, "keyword", new String[0])); // ORDER
223+
assertThat(tokens.get(24)).isEqualTo(new SemanticTokenData(128, 130, "keyword", new String[0])); // BY
224+
assertThat(tokens.get(25)).isEqualTo(new SemanticTokenData(131, 134, "keyword", new String[0])); // sum
225+
assertThat(tokens.get(26)).isEqualTo(new SemanticTokenData(134, 135, "operator", new String[0])); // (
226+
assertThat(tokens.get(27)).isEqualTo(new SemanticTokenData(135, 136, "variable", new String[0])); // t
227+
assertThat(tokens.get(28)).isEqualTo(new SemanticTokenData(136, 137, "operator", new String[0])); // .
228+
assertThat(tokens.get(29)).isEqualTo(new SemanticTokenData(137, 146, "property", new String[0])); // tableSize
229+
assertThat(tokens.get(30)).isEqualTo(new SemanticTokenData(146, 147, "operator", new String[0])); // )
230+
assertThat(tokens.get(31)).isEqualTo(new SemanticTokenData(148, 152, "keyword", new String[0])); // DESC
231+
}
192232
}

0 commit comments

Comments
 (0)