Skip to content

Commit cf4edc1

Browse files
committed
Fix bean completion invocation case
1 parent 3a6dd8b commit cf4edc1

File tree

5 files changed

+47
-4
lines changed

5 files changed

+47
-4
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public BeanCompletionProvider(JavaProjectFinder javaProjectFinder, SpringMetamod
6666
@Override
6767
public void provideCompletions(ASTNode node, int offset, TextDocument doc, Collection<ICompletionProposal> completions) {
6868
if (config.isBeanInjectionCompletionEnabled()
69-
&& (node instanceof SimpleName || node instanceof Block || node instanceof FieldAccess)) {
69+
&& (node instanceof SimpleName || node instanceof Block || node instanceof FieldAccess || node instanceof ThisExpression)) {
7070
try {
7171

7272
if (node instanceof SimpleName) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
public class JpqlSemanticTokens implements SemanticTokensDataProvider {
5151

5252
private static List<String> TOKEN_TYPES = List.of("keyword", "type", "class", "string", "number", "operator",
53-
"variable", "method", "regexp", "parameter");
53+
"variable", "method", "parameter");
5454

5555
private final Optional<SpelSemanticTokens> optSpelTokens;
5656

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
public class MySqlSemanticTokens implements SemanticTokensDataProvider {
4747

4848
private static List<String> TOKEN_TYPES = List.of("keyword", "type", "string", "number", "operator",
49-
"variable", "regexp", "comment", "parameter", "method");
49+
"variable", "comment", "parameter", "method");
5050

5151
private final Optional<SpelSemanticTokens> optSpelTokens;
5252
private final Optional<Consumer<RecognitionException>> parseErrorHandler;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.eclipse.jdt.core.dom.ITypeBinding;
2222
import org.eclipse.jdt.core.dom.NodeFinder;
2323
import org.eclipse.jdt.core.dom.SimpleName;
24+
import org.eclipse.jdt.core.dom.ThisExpression;
2425
import org.springframework.ide.vscode.boot.java.snippets.JavaSnippetManager;
2526
import org.springframework.ide.vscode.boot.java.utils.CompilationUnitCache;
2627
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine;
@@ -90,7 +91,8 @@ private ASTNode findNode(TextDocument document, int offset, CompilationUnit cu)
9091

9192
if (numberOfSpaces > 0) {
9293
ASTNode leftNode = NodeFinder.perform(cu, offset - numberOfSpaces, 0);
93-
if (leftNode instanceof SimpleName && $MISSING$.equals(((SimpleName)leftNode).getIdentifier())) {
94+
if ((leftNode instanceof SimpleName && $MISSING$.equals(((SimpleName)leftNode).getIdentifier()))
95+
|| leftNode instanceof ThisExpression) {
9496
node = leftNode;
9597
}
9698
}

headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/BeanCompletionProviderTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,6 +1069,47 @@ public TestBeanCompletionClass(OwnerRepository ownerRepository) {
10691069
""");
10701070
}
10711071

1072+
@Test
1073+
public void methodReturnStatementAfterThisStatementWithoutPrefix() throws Exception {
1074+
String content = """
1075+
package org.sample.test;
1076+
1077+
import org.springframework.web.bind.annotation.RestController;
1078+
1079+
@RestController
1080+
public class TestBeanCompletionClass {
1081+
String TestBeanCompletionClass() {
1082+
this.<*>
1083+
return new String("oo");
1084+
}
1085+
}
1086+
""";
1087+
1088+
1089+
assertCompletions(content, new String[] {"ownerRepository", "ownerService", "petService", "testIntBean", "visitRepository", "visitService"}, 0,
1090+
"""
1091+
package org.sample.test;
1092+
1093+
import org.springframework.samples.petclinic.owner.OwnerRepository;
1094+
import org.springframework.web.bind.annotation.RestController;
1095+
1096+
@RestController
1097+
public class TestBeanCompletionClass {
1098+
1099+
private final OwnerRepository ownerRepository;
1100+
1101+
TestBeanCompletionClass(OwnerRepository ownerRepository) {
1102+
this.ownerRepository = ownerRepository;
1103+
}
1104+
String TestBeanCompletionClass() {
1105+
this.ownerRepository<*>
1106+
return new String("oo");
1107+
}
1108+
}
1109+
""");
1110+
}
1111+
1112+
10721113
@Test
10731114
public void constructorNoThisNoPrefix() throws Exception {
10741115
String content = """

0 commit comments

Comments
 (0)