Fix bean completion invocation case

This commit is contained in:
aboyko
2024-12-17 10:19:22 -05:00
parent 3a6dd8b012
commit cf4edc16a1
5 changed files with 47 additions and 4 deletions

View File

@@ -66,7 +66,7 @@ public class BeanCompletionProvider implements CompletionProvider {
@Override
public void provideCompletions(ASTNode node, int offset, TextDocument doc, Collection<ICompletionProposal> completions) {
if (config.isBeanInjectionCompletionEnabled()
&& (node instanceof SimpleName || node instanceof Block || node instanceof FieldAccess)) {
&& (node instanceof SimpleName || node instanceof Block || node instanceof FieldAccess || node instanceof ThisExpression)) {
try {
if (node instanceof SimpleName) {

View File

@@ -50,7 +50,7 @@ import org.springframework.ide.vscode.parser.jpql.JpqlParser.State_fieldContext;
public class JpqlSemanticTokens implements SemanticTokensDataProvider {
private static List<String> TOKEN_TYPES = List.of("keyword", "type", "class", "string", "number", "operator",
"variable", "method", "regexp", "parameter");
"variable", "method", "parameter");
private final Optional<SpelSemanticTokens> optSpelTokens;

View File

@@ -46,7 +46,7 @@ import org.springframework.ide.vscode.parser.mysql.MySqlParserBaseListener;
public class MySqlSemanticTokens implements SemanticTokensDataProvider {
private static List<String> TOKEN_TYPES = List.of("keyword", "type", "string", "number", "operator",
"variable", "regexp", "comment", "parameter", "method");
"variable", "comment", "parameter", "method");
private final Optional<SpelSemanticTokens> optSpelTokens;
private final Optional<Consumer<RecognitionException>> parseErrorHandler;

View File

@@ -21,6 +21,7 @@ import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.NodeFinder;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.ThisExpression;
import org.springframework.ide.vscode.boot.java.snippets.JavaSnippetManager;
import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache;
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine;
@@ -90,7 +91,8 @@ public class BootJavaCompletionEngine implements ICompletionEngine, LanguageSpec
if (numberOfSpaces > 0) {
ASTNode leftNode = NodeFinder.perform(cu, offset - numberOfSpaces, 0);
if (leftNode instanceof SimpleName && $MISSING$.equals(((SimpleName)leftNode).getIdentifier())) {
if ((leftNode instanceof SimpleName && $MISSING$.equals(((SimpleName)leftNode).getIdentifier()))
|| leftNode instanceof ThisExpression) {
node = leftNode;
}
}

View File

@@ -1069,6 +1069,47 @@ public class TestBeanCompletionClass {
""");
}
@Test
public void methodReturnStatementAfterThisStatementWithoutPrefix() throws Exception {
String content = """
package org.sample.test;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestBeanCompletionClass {
String TestBeanCompletionClass() {
this.<*>
return new String("oo");
}
}
""";
assertCompletions(content, new String[] {"ownerRepository", "ownerService", "petService", "testIntBean", "visitRepository", "visitService"}, 0,
"""
package org.sample.test;
import org.springframework.samples.petclinic.owner.OwnerRepository;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestBeanCompletionClass {
private final OwnerRepository ownerRepository;
TestBeanCompletionClass(OwnerRepository ownerRepository) {
this.ownerRepository = ownerRepository;
}
String TestBeanCompletionClass() {
this.ownerRepository<*>
return new String("oo");
}
}
""");
}
@Test
public void constructorNoThisNoPrefix() throws Exception {
String content = """