Skip to content

Commit b47096e

Browse files
committed
Bean completion invocation for this. prefix
1 parent 2512212 commit b47096e

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@
1919

2020
import org.eclipse.jdt.core.dom.ASTNode;
2121
import org.eclipse.jdt.core.dom.Annotation;
22+
import org.eclipse.jdt.core.dom.Assignment;
2223
import org.eclipse.jdt.core.dom.Block;
2324
import org.eclipse.jdt.core.dom.CompilationUnit;
25+
import org.eclipse.jdt.core.dom.FieldAccess;
2426
import org.eclipse.jdt.core.dom.IAnnotationBinding;
2527
import org.eclipse.jdt.core.dom.ITypeBinding;
2628
import org.eclipse.jdt.core.dom.SimpleName;
29+
import org.eclipse.jdt.core.dom.ThisExpression;
2730
import org.eclipse.jdt.core.dom.TypeDeclaration;
2831
import org.eclipse.jdt.core.dom.VariableDeclaration;
2932
import org.slf4j.Logger;
@@ -81,6 +84,14 @@ public void provideCompletions(ASTNode node, int offset, TextDocument doc,
8184
return;
8285
}
8386

87+
// Empty SimpleName usually comes from unresolved FieldAccess, i.e. `this.owner` where `owner` field is not defined
88+
if (node instanceof SimpleName se && se.getLength() == 0
89+
&& node.getParent() instanceof Assignment assign
90+
&& assign.getLeftHandSide() instanceof FieldAccess fa
91+
&& fa.getExpression() instanceof ThisExpression) {
92+
node = fa.getName();
93+
}
94+
8495
if (isSpringComponent(topLevelClass)) {
8596
String className = getFullyQualifiedName(topLevelClass);
8697
Bean[] beans = this.springIndex.getBeansOfProject(project.getElementName());

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,43 @@ public void test() {
482482
""");
483483
}
484484

485+
@Test
486+
public void beanCompletionWithThis() throws Exception {
487+
String content = """
488+
package org.sample.test;
489+
490+
import org.springframework.stereotype.Controller;
491+
492+
@Controller
493+
public class TestBeanCompletionClass {
494+
public void test() {
495+
this.owner<*>
496+
}
497+
}
498+
""";
499+
500+
501+
assertCompletions(content, new String[] {"ownerRepository", "ownerService"}, 0,
502+
"""
503+
package org.sample.test;
504+
505+
import org.springframework.samples.petclinic.owner.OwnerRepository;
506+
import org.springframework.stereotype.Controller;
507+
508+
@Controller
509+
public class TestBeanCompletionClass {
510+
511+
private final OwnerRepository ownerRepository;
512+
513+
TestBeanCompletionClass(OwnerRepository ownerRepository) {
514+
this.ownerRepository = ownerRepository;
515+
}
516+
public void test() {
517+
this.ownerRepository<*>
518+
}
519+
}
520+
""");
521+
}
485522

486523

487524
private void assertCompletions(String completionLine, String[] expectedCompletions, int chosenCompletion, String expectedResult) throws Exception {

0 commit comments

Comments
 (0)