GH-1424: bean index elements now childs of surrounding config node
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user