GH-1424: bean index elements now childs of surrounding config node

This commit is contained in:
Martin Lippert
2025-02-10 15:15:27 +01:00
parent 8f6b5a619a
commit f5cc986854
3 changed files with 44 additions and 1 deletions

View File

@@ -89,6 +89,9 @@ public class BeansSymbolProvider extends AbstractSymbolProvider {
ITypeBinding beanType = getBeanType(method);
String markerString = getAnnotations(method);
// lookup parent config
SpringIndexElement configParent = findNearestConfigBean(context.getBeans(), doc.getUri());
for (Tuple2<String, DocumentRegion> nameAndRegion : BeanUtils.getBeanNamesFromBeanAnnotationWithRegions(node, doc)) {
try {
@@ -116,7 +119,13 @@ public class BeansSymbolProvider extends AbstractSymbolProvider {
}
context.getGeneratedSymbols().add(new CachedSymbol(context.getDocURI(), context.getLastModified(), symbol));
context.getBeans().add(new CachedBean(context.getDocURI(), beanDefinition));
if (configParent != null) {
configParent.addChild(beanDefinition);
}
else {
context.getBeans().add(new CachedBean(context.getDocURI(), beanDefinition));
}
} catch (BadLocationException e) {
log.error("", e);
@@ -124,6 +133,19 @@ public class BeansSymbolProvider extends AbstractSymbolProvider {
}
}
private SpringIndexElement findNearestConfigBean(List<CachedBean> beans, String docURI) {
int i = beans.size() - 1;
while (i >= 0 && beans.get(i).getDocURI().equals(docURI)) {
if (beans.get(i).getBean() instanceof Bean bean && bean.isConfiguration() && docURI.equals(docURI)) {
return beans.get(i).getBean();
}
i--;
}
return null;
}
@Override
protected void addSymbolsPass1(TypeDeclaration typeDeclaration, SpringIndexerJavaContext context, TextDocument doc) {
// this checks function beans that are defined as implementations of Function interfaces

View File

@@ -17,6 +17,7 @@ import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@@ -41,6 +42,7 @@ import org.springframework.ide.vscode.commons.protocol.spring.AnnotationMetadata
import org.springframework.ide.vscode.commons.protocol.spring.Bean;
import org.springframework.ide.vscode.commons.protocol.spring.DefaultValues;
import org.springframework.ide.vscode.commons.protocol.spring.InjectionPoint;
import org.springframework.ide.vscode.commons.protocol.spring.SpringIndexElement;
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@@ -135,6 +137,10 @@ public class SpringMetamodelIndexerBeansTest {
String docUri = directory.toPath().resolve("src/main/java/org/test/injections/ConfigurationWithoutInjection.java").toUri().toString();
assertEquals(docUri, beans[0].getLocation().getUri());
List<SpringIndexElement> children = beans[0].getChildren();
assertEquals(1, children.size());
assertEquals("beanWithoutInjections", ((Bean) children.get(0)).getName());
}
@Test
@@ -461,6 +467,11 @@ public class SpringMetamodelIndexerBeansTest {
Location runtimeHintsValueLocation = new Location(bean.getLocation().getUri(), new Range(new Position(13, 20), new Position(13, 52)));
assertEquals("org.test.injections.DummyRuntimeHintsRegistrar", runtimeHintsValueAttribute[0].getName());
assertEquals(runtimeHintsValueLocation, runtimeHintsValueAttribute[0].getLocation());
// child bean
List<SpringIndexElement> children = bean.getChildren();
assertEquals(1, children.size());
assertEquals("beanWithAnnotationsOnInjectionPoints", ((Bean) children.get(0)).getName());
}
@Test

View File

@@ -10,10 +10,13 @@
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.beans.test;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@@ -29,6 +32,7 @@ import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.commons.protocol.spring.Bean;
import org.springframework.ide.vscode.commons.protocol.spring.SpringIndexElement;
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@@ -78,7 +82,13 @@ public class SpringIndexerBeansTest {
Bean simpleBean = Arrays.stream(beans).filter(bean -> bean.getName().equals("simpleBean")).findFirst().get();
assertEquals("org.test.SimpleConfiguration", simpleConfigBean.getType());
assertTrue(simpleConfigBean.isConfiguration());
assertEquals("org.test.BeanClass", simpleBean.getType());
List<SpringIndexElement> children = simpleConfigBean.getChildren();
assertEquals(1, children.size());
assertSame(simpleBean, children.get(0));
}
@Test