GH-1405: take setter injection into account while indexing injection points
This commit is contained in:
@@ -35,6 +35,7 @@ import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
|
||||
import org.springframework.ide.vscode.boot.bootiful.BootLanguageServerTest;
|
||||
import org.springframework.ide.vscode.boot.bootiful.SymbolProviderTestConf;
|
||||
import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex;
|
||||
import org.springframework.ide.vscode.boot.java.Annotations;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.protocol.spring.AnnotationAttributeValue;
|
||||
import org.springframework.ide.vscode.commons.protocol.spring.AnnotationMetadata;
|
||||
@@ -186,6 +187,53 @@ public class SpringMetamodelIndexerBeansTest {
|
||||
assertEquals(ip2Location, injectionPoints[1].getLocation());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSetterInjectionPointsFromConstructor() {
|
||||
Bean[] beans = springIndex.getBeansWithName("test-spring-indexing", "setterInjectionService");
|
||||
assertEquals(1, beans.length);
|
||||
|
||||
String docUri = directory.toPath().resolve("src/main/java/org/test/injections/SetterInjectionService.java").toUri().toString();
|
||||
|
||||
InjectionPoint[] injectionPoints = beans[0].getInjectionPoints();
|
||||
assertEquals(2, injectionPoints.length);
|
||||
|
||||
assertEquals("bean1", injectionPoints[0].getName());
|
||||
assertEquals("org.test.BeanClass1", injectionPoints[0].getType());
|
||||
assertEquals(new Location(docUri, new Range(new Position(21, 33), new Position(21, 38))), injectionPoints[0].getLocation());
|
||||
|
||||
AnnotationMetadata[] point1Annotations = injectionPoints[0].getAnnotations();
|
||||
assertEquals(2, point1Annotations.length);
|
||||
|
||||
assertEquals(Annotations.AUTOWIRED, point1Annotations[0].getAnnotationType());
|
||||
assertEquals(new Location(docUri, new Range(new Position(19, 1), new Position(19, 11))), point1Annotations[0].getLocation());
|
||||
assertEquals(0, point1Annotations[0].getAttributes().size());
|
||||
|
||||
assertEquals(Annotations.QUALIFIER, point1Annotations[1].getAnnotationType());
|
||||
assertEquals(new Location(docUri, new Range(new Position(20, 1), new Position(20, 41))), point1Annotations[1].getLocation());
|
||||
assertEquals(1, point1Annotations[1].getAttributes().size());
|
||||
assertEquals(1, point1Annotations[1].getAttributes().get("value").length);
|
||||
assertEquals("setter-injection-qualifier", point1Annotations[1].getAttributes().get("value")[0].getName());
|
||||
assertEquals(new Location(docUri, new Range(new Position(20, 12), new Position(20, 40))), point1Annotations[1].getAttributes().get("value")[0].getLocation());
|
||||
|
||||
assertEquals("bean2", injectionPoints[1].getName());
|
||||
assertEquals("org.test.BeanClass2", injectionPoints[1].getType());
|
||||
assertEquals(new Location(docUri, new Range(new Position(26, 83), new Position(26, 88))), injectionPoints[1].getLocation());
|
||||
|
||||
AnnotationMetadata[] point2Annotations = injectionPoints[1].getAnnotations();
|
||||
assertEquals(2, point2Annotations.length);
|
||||
assertEquals(Annotations.AUTOWIRED, point2Annotations[0].getAnnotationType());
|
||||
assertEquals(new Location(docUri, new Range(new Position(25, 1), new Position(25, 11))), point2Annotations[0].getLocation());
|
||||
assertEquals(0, point2Annotations[0].getAttributes().size());
|
||||
|
||||
assertEquals(Annotations.QUALIFIER, point2Annotations[1].getAnnotationType());
|
||||
assertEquals(new Location(docUri, new Range(new Position(26, 22), new Position(26, 71))), point2Annotations[1].getLocation());
|
||||
assertEquals(1, point2Annotations[1].getAttributes().size());
|
||||
assertEquals(1, point2Annotations[1].getAttributes().get("value").length);
|
||||
assertEquals("setter-injection-qualifier-on-param", point2Annotations[1].getAttributes().get("value")[0].getName());
|
||||
assertEquals(new Location(docUri, new Range(new Position(26, 33), new Position(26, 70))), point2Annotations[1].getAttributes().get("value")[0].getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBeanInjectionPointsFromAutowiredFields() {
|
||||
Bean[] beans = springIndex.getBeansWithName("test-spring-indexing", "autowiredInjectionService");
|
||||
|
||||
@@ -18,12 +18,12 @@ import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.eclipse.lsp4j.Location;
|
||||
import org.eclipse.lsp4j.Position;
|
||||
import org.eclipse.lsp4j.Range;
|
||||
import org.eclipse.lsp4j.TextDocumentIdentifier;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -58,10 +58,8 @@ public class NamedReferencesProviderTest {
|
||||
private File directory;
|
||||
private IJavaProject project;
|
||||
private Bean bean1;
|
||||
private Bean bean2;
|
||||
|
||||
private String tempJavaDocUri1;
|
||||
private String tempJavaDocUri2;
|
||||
private String tempJavaDocUri;
|
||||
|
||||
@BeforeEach
|
||||
@@ -78,12 +76,11 @@ public class NamedReferencesProviderTest {
|
||||
|
||||
tempJavaDocUri = directory.toPath().resolve("src/main/java/org/test/TestDependsOnClass.java").toUri().toString();
|
||||
tempJavaDocUri1 = directory.toPath().resolve("src/main/java/org/test/TempClass1.java").toUri().toString();
|
||||
tempJavaDocUri2 = directory.toPath().resolve("src/main/java/org/test/TempClass2.java").toUri().toString();
|
||||
|
||||
bean1 = new Bean("bean1", "type1", new Location(tempJavaDocUri1, new Range(new Position(1,1), new Position(1, 20))), null, null, new AnnotationMetadata[] {});
|
||||
bean2 = new Bean("bean2", "type2", new Location(tempJavaDocUri2, new Range(new Position(1,1), new Position(1, 20))), null, null, new AnnotationMetadata[] {});
|
||||
|
||||
springIndex.updateBeans(project.getElementName(), new Bean[] {bean1, bean2});
|
||||
|
||||
Bean[] beans = ArrayUtils.add(springIndex.getBeansOfProject(project.getElementName()), bean1);
|
||||
springIndex.updateBeans(project.getElementName(), beans);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -111,7 +108,6 @@ public class NamedReferencesProviderTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled // TODO: need to include setter injection in spring index as a first step, then resurrect this test case
|
||||
public void testNamedRefersToOtherNamedValues() throws Exception {
|
||||
Editor editor = harness.newEditor(LanguageId.JAVA, """
|
||||
package org.test;
|
||||
@@ -124,11 +120,11 @@ public class NamedReferencesProviderTest {
|
||||
|
||||
String expectedDefinitionUri1 = directory.toPath().resolve("src/main/java/org/test/jakarta/SimpleMovieLister.java").toUri().toString();
|
||||
Location expectedLocation1 = new Location(expectedDefinitionUri1,
|
||||
new Range(new Position(24, 38), new Position(24, 62)));
|
||||
new Range(new Position(27, 45), new Position(27, 61)));
|
||||
|
||||
String expectedDefinitionUri2 = directory.toPath().resolve("src/main/java/org/test/javax/SimpleMovieLister.java").toUri().toString();
|
||||
Location expectedLocation2 = new Location(expectedDefinitionUri2,
|
||||
new Range(new Position(24, 38), new Position(24, 62)));
|
||||
new Range(new Position(27, 45), new Position(27, 61)));
|
||||
|
||||
List<? extends Location> references = editor.getReferences();
|
||||
assertEquals(2, references.size());
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package org.test.injections;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.test.BeanClass1;
|
||||
import org.test.BeanClass2;
|
||||
|
||||
@Service
|
||||
public class SetterInjectionService {
|
||||
|
||||
private BeanClass1 bean1;
|
||||
private BeanClass2 bean2;
|
||||
|
||||
private BeanClass1 somethingElse;
|
||||
|
||||
public SetterInjectionService() {
|
||||
}
|
||||
|
||||
@Autowired
|
||||
@Qualifier("setter-injection-qualifier")
|
||||
public void setBean1(BeanClass1 bean1) {
|
||||
this.bean1 = bean1;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
public void setBean2(@Qualifier("setter-injection-qualifier-on-param") BeanClass2 bean2) {
|
||||
this.bean2 = bean2;
|
||||
}
|
||||
|
||||
public void setSomethingElse(BeanClass1 somethingElseNotInjected) {
|
||||
this.somethingElse = somethingElseNotInjected;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user