From 3824d679160c6fa9913b87a0ec008edb81fbf1fa Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Mon, 3 Feb 2025 09:33:05 +0100 Subject: [PATCH] GH-1429: find parent method or type declaration from within deeper nested ast nodes Fixes GH-1429 --- .../boot/java/beans/DependsOnCompletionProcessor.java | 4 ++++ .../java/beans/test/DependsOnCompletionProviderTest.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/DependsOnCompletionProcessor.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/DependsOnCompletionProcessor.java index 977cc3e92..33dc607e3 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/DependsOnCompletionProcessor.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/DependsOnCompletionProcessor.java @@ -51,6 +51,10 @@ public class DependsOnCompletionProcessor implements AnnotationAttributeCompleti private Collection getBeanNameFromSourceCodePosition(ASTNode node) { ASTNode parent = node.getParent(); + while (parent != null && !(parent instanceof MethodDeclaration) && !(parent instanceof TypeDeclaration)) { + parent = parent.getParent(); + } + if (parent instanceof MethodDeclaration method) { Annotation beanAnnotation = ASTUtils.getBeanAnnotation(method); return BeanUtils.getBeanNamesFromBeanAnnotation(beanAnnotation); diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/DependsOnCompletionProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/DependsOnCompletionProviderTest.java index 61bc974f6..c7c8c8971 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/DependsOnCompletionProviderTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/DependsOnCompletionProviderTest.java @@ -207,6 +207,14 @@ public class DependsOnCompletionProviderTest { assertCompletions("@DependsOn({\"bean1\",<*>\"bean2\"})", 1, "@DependsOn({\"bean1\",\"bean3\",<*>\"bean2\"})"); } + @Test + public void testDependsOnCompletionWithinQuotesExcludeDefaultBeanNameFromComponent() throws Exception { + Bean componentBean = new Bean("testDependsOnClass", "org.test.TestDependsOnClass", new Location(tempJavaDocUri, new Range(new Position(1,1), new Position(1, 20))), null, null, null, false); + springIndex.updateBeans(project.getElementName(), new Bean[] {bean1, bean2, componentBean}); + + assertCompletions("@DependsOn(\"<*>\")", 2, "@DependsOn(\"bean1<*>\")"); + } + @Test public void testDependsOnCompletionExcludeDefaultBeanNameFromComponent() throws Exception { Bean componentBean = new Bean("testDependsOnClass", "org.test.TestDependsOnClass", new Location(tempJavaDocUri, new Range(new Position(1,1), new Position(1, 20))), null, null, null, false);