Skip to content

Commit

Permalink
GH-1424: bean index elements now childs of surrounding config node
Browse files Browse the repository at this point in the history
  • Loading branch information
martinlippert committed Feb 10, 2025
1 parent 8f6b5a6 commit f5cc986
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ public void addSymbols(Annotation node, ITypeBinding typeBinding, Collection<ITy

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 {
Expand Down Expand Up @@ -116,14 +119,33 @@ public void addSymbols(Annotation node, ITypeBinding typeBinding, Collection<ITy
}

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);
}
}
}

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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
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;
Expand All @@ -41,6 +42,7 @@
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;
Expand Down Expand Up @@ -135,6 +137,10 @@ void testBeansDefinitionLocationFromConfigurationAnnotatedClass() {

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
Expand Down Expand Up @@ -461,6 +467,11 @@ void testAnnotationMetadataFromComponentClass() {
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -29,6 +32,7 @@
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;
Expand Down Expand Up @@ -78,7 +82,13 @@ void testScanSimpleConfigurationClass() throws Exception {
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
Expand Down

0 comments on commit f5cc986

Please sign in to comment.