Skip to content

Commit b6cb5d0

Browse files
committed
Missing semantic tokens for Java
1 parent 00d423a commit b6cb5d0

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/JdtSemanticTokensHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.eclipse.lsp4j.SemanticTokensWithRegistrationOptions;
2424
import org.eclipse.lsp4j.jsonrpc.CancelChecker;
2525
import org.springframework.ide.vscode.boot.java.reconcilers.CompositeASTVisitor;
26+
import org.springframework.ide.vscode.boot.java.semantictokens.JavaSemanticTokensProvider;
2627
import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache;
2728
import org.springframework.ide.vscode.commons.java.IJavaProject;
2829
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
@@ -76,7 +77,8 @@ private List<SemanticTokenData> semanticTokens(TextDocument doc, CancelChecker c
7677
if (optProject.isPresent()) {
7778
IJavaProject jp = optProject.get();
7879
List<JdtSemanticTokensProvider> applicableTokenProviders = tokenProviders.stream().filter(tp -> tp.isApplicable(jp)).collect(Collectors.toList());
79-
if (!applicableTokenProviders.isEmpty()) {
80+
// If only the JavaSemanticTokensProvider going to compute tokens then don't compute tokens at all - let JDT LS compute them.
81+
if (!applicableTokenProviders.isEmpty() && !(applicableTokenProviders.size() == 1 && applicableTokenProviders.get(0) instanceof JavaSemanticTokensProvider)) {
8082
return cuCache.withCompilationUnit(jp, URI.create(doc.getUri()), cu -> computeTokens(applicableTokenProviders, jp, cu, r, doc));
8183
}
8284
}

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/reconcilers/CompositeASTVisitor.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.eclipse.jdt.core.dom.NormalAnnotation;
2424
import org.eclipse.jdt.core.dom.QualifiedName;
2525
import org.eclipse.jdt.core.dom.ReturnStatement;
26+
import org.eclipse.jdt.core.dom.SimpleName;
2627
import org.eclipse.jdt.core.dom.SimpleType;
2728
import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
2829
import org.eclipse.jdt.core.dom.TypeDeclaration;
@@ -175,7 +176,22 @@ public boolean visit(ReturnStatement node) {
175176
}
176177
return result;
177178
}
178-
179+
180+
/*
181+
* Needed for the JDT LS semantic tokens workaround
182+
*/
183+
@Override
184+
public boolean visit(SimpleName node) {
185+
boolean result = true;
186+
if (!checkOffset(node)) {
187+
return false;
188+
}
189+
for (ASTVisitor astVisitor : visitors) {
190+
result |= astVisitor.visit(node);
191+
}
192+
return result;
193+
}
194+
179195
private boolean checkOffset(ASTNode n) {
180196
return (startOffset < 0 || n.getStartPosition() >= startOffset)
181197
|| (endOffset <0 || n.getStartPosition() + n.getLength() < endOffset);

0 commit comments

Comments
 (0)