firt rough cut to include conditional and profile annotations in bean symbols instead of their own ones

This commit is contained in:
Martin Lippert
2018-08-07 15:11:05 +02:00
parent 531656f88b
commit 64e7bbad45
10 changed files with 286 additions and 20 deletions

View File

@@ -44,7 +44,7 @@ public class SpringIndexerBeansTest {
harness = BootJavaLanguageServerHarness.builder().build();
harness.intialize(null);
indexer = harness.getServerWrapper().getComponents().getSpringIndexer();
directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-beans/").toURI());
@@ -90,6 +90,29 @@ public class SpringIndexerBeansTest {
);
}
@Test
public void testScanConfigurationClassWithConditionals() throws Exception {
String docUri = directory.toPath().resolve("src/main/java/org/test/ConfigurationWithConditionals.java").toUri().toString();
SpringIndexerHarness.assertDocumentSymbols(indexer, docUri,
SpringIndexerHarness.symbol("@Configuration", "@+ 'configurationWithConditionals' (@Configuration <: @Component) ConfigurationWithConditionals"),
SpringIndexerHarness.symbol("@Bean", "@+ 'conditionalBean' (@Bean @ConditionalOnJava(JavaVersion.EIGHT)) BeanClass"),
SpringIndexerHarness.symbol("@Bean", "@+ 'conditionalBeanDifferentSequence' (@Bean @ConditionalOnJava(JavaVersion.EIGHT)) BeanClass"),
SpringIndexerHarness.symbol("@Bean", "@+ 'conditionalBeanWithJavaAndCloud' (@Bean @ConditionalOnJava(JavaVersion.EIGHT) @Profile(\"cloud\")) BeanClass")
);
}
@Test
public void testScanConfigurationClassWithConditionalsDefaultSymbol() throws Exception {
String docUri = directory.toPath().resolve("src/main/java/org/test/ConfigurationWithConditionalsDefaultSymbols.java").toUri().toString();
SpringIndexerHarness.assertDocumentSymbols(indexer, docUri,
SpringIndexerHarness.symbol("@Configuration", "@+ 'configurationWithConditionalsDefaultSymbols' (@Configuration <: @Component) ConfigurationWithConditionalsDefaultSymbols"),
SpringIndexerHarness.symbol("@ConditionalOnJava(JavaVersion.EIGHT)", "@ConditionalOnJava(JavaVersion.EIGHT)"),
SpringIndexerHarness.symbol("@Profile(\"cloud\")", "@Profile(\"cloud\")"),
SpringIndexerHarness.symbol("@ConditionalOnJava(JavaVersion.EIGHT)", "@ConditionalOnJava(JavaVersion.EIGHT)"),
SpringIndexerHarness.symbol("@Profile(\"cloud\")", "@Profile(\"cloud\")")
);
}
@Test
public void testScanAbstractBeanConfiguration() throws Exception {
String docUri = directory.toPath().resolve("src/main/java/org/test/AbstractBeanConfiguration.java").toUri().toString();

View File

@@ -37,7 +37,7 @@ import org.springframework.ide.vscode.project.harness.ProjectsHarness;
* @author Martin Lippert
*/
public class SpringIndexerTest {
private BootJavaLanguageServerHarness harness;
private File directory;
private SpringIndexer indexer;
@@ -47,13 +47,13 @@ public class SpringIndexerTest {
@Before
public void setup() throws Exception {
harness = BootJavaLanguageServerHarness.builder().build();
harness.intialize(null);
indexer = harness.getServerWrapper().getComponents().getSpringIndexer();
directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
projectDir = directory.toURI().toString();
// trigger project creation
project = harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get();
@@ -65,7 +65,7 @@ public class SpringIndexerTest {
public void testScanningAllAnnotationsSimpleProjectUpfront() throws Exception {
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
assertEquals(6, allSymbols.size());
assertEquals(7, allSymbols.size());
String docUri = directory.toPath().resolve("src/main/java/org/test/MainClass.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@+ 'mainClass' (@SpringBootApplication <: @SpringBootConfiguration, @Configuration, @Component) MainClass", docUri, 6, 0, 6, 22));
@@ -78,6 +78,9 @@ public class SpringIndexerTest {
docUri = directory.toPath().resolve("src/main/java/org/test/sub/MappingClassSubpackage.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38));
docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13));
}
@Test
@@ -105,7 +108,7 @@ public class SpringIndexerTest {
public void testScanningAllAnnotationsMultiModuleProjectUpfront() throws Exception {
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
assertEquals(6, allSymbols.size());
assertEquals(7, allSymbols.size());
String docUri = directory.toPath().resolve("src/main/java/org/test/MainClass.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@+ 'mainClass' (@SpringBootApplication <: @SpringBootConfiguration, @Configuration, @Component) MainClass", docUri, 6, 0, 6, 22));
@@ -118,6 +121,10 @@ public class SpringIndexerTest {
docUri = directory.toPath().resolve("src/main/java/org/test/sub/MappingClassSubpackage.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38));
docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13));
}
@Test
@@ -139,7 +146,7 @@ public class SpringIndexerTest {
// check for updated index in all symbols
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
assertEquals(6, allSymbols.size());
assertEquals(7, allSymbols.size());
String docUri = directory.toPath().resolve("src/main/java/org/test/MainClass.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@+ 'mainClass' (@SpringBootApplication <: @SpringBootConfiguration, @Configuration, @Component) MainClass", docUri, 6, 0, 6, 22));
@@ -152,6 +159,9 @@ public class SpringIndexerTest {
docUri = directory.toPath().resolve("src/main/java/org/test/sub/MappingClassSubpackage.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38));
docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13));
}
@Test
@@ -163,7 +173,7 @@ public class SpringIndexerTest {
assertNull(symbols);
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
assertEquals(6, allSymbols.size());
assertEquals(7, allSymbols.size());
try {
// create document and update index
@@ -197,7 +207,7 @@ public class SpringIndexerTest {
// check for updated index in all symbols
allSymbols = indexer.getAllSymbols("");
assertEquals(8, allSymbols.size());
assertEquals(9, allSymbols.size());
String docUri = directory.toPath().resolve("src/main/java/org/test/MainClass.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@+ 'mainClass' (@SpringBootApplication <: @SpringBootConfiguration, @Configuration, @Component) MainClass", docUri, 6, 0, 6, 22));
@@ -211,6 +221,9 @@ public class SpringIndexerTest {
docUri = directory.toPath().resolve("src/main/java/org/test/sub/MappingClassSubpackage.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38));
docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13));
assertTrue(containsSymbol(allSymbols, "@/created-mapping1", createdDocURI, 6, 1, 6, 36));
assertTrue(containsSymbol(allSymbols, "@/created-mapping2", createdDocURI, 11, 1, 11, 36));
}
@@ -233,7 +246,7 @@ public class SpringIndexerTest {
// check for updated index in all symbols
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
assertEquals(4, allSymbols.size());
assertEquals(5, allSymbols.size());
String docUri = directory.toPath().resolve("src/main/java/org/test/MainClass.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@+ 'mainClass' (@SpringBootApplication <: @SpringBootConfiguration, @Configuration, @Component) MainClass", docUri, 6, 0, 6, 22));
@@ -242,6 +255,9 @@ public class SpringIndexerTest {
docUri = directory.toPath().resolve("src/main/java/org/test/sub/MappingClassSubpackage.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38));
docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13));
}
@Test
@@ -289,7 +305,7 @@ public class SpringIndexerTest {
SymbolInformation symbol = iterator.next();
if (
symbol.getName().equals(name) &&
symbol.getName().equals(name) &&
symbol.getLocation().getUri().equals(uri)
) {
return true;
@@ -315,11 +331,11 @@ public class SpringIndexerTest {
return false;
}
@Test
public void testDeleteProject() throws Exception {
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
assertEquals(6, allSymbols.size());
assertEquals(7, allSymbols.size());
CompletableFuture<Void> deleteProject = indexer.deleteProject(project);
deleteProject.get(5, TimeUnit.SECONDS);

View File

@@ -0,0 +1,30 @@
package org.test;
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava.JavaVersion;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
public class ConfigurationWithConditionals {
@Bean
@ConditionalOnJava(JavaVersion.EIGHT)
public BeanClass conditionalBean() {
return new BeanClass();
}
@ConditionalOnJava(JavaVersion.EIGHT)
@Bean
public BeanClass conditionalBeanDifferentSequence() {
return new BeanClass();
}
@Bean
@ConditionalOnJava(JavaVersion.EIGHT)
@Profile("cloud")
public BeanClass conditionalBeanWithJavaAndCloud() {
return new BeanClass();
}
}

View File

@@ -0,0 +1,27 @@
package org.test;
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava.JavaVersion;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
public class ConfigurationWithConditionalsDefaultSymbols {
@ConditionalOnJava(JavaVersion.EIGHT)
public BeanClass conditionalBean() {
return new BeanClass();
}
@Profile("cloud")
public BeanClass conditionalBeanWithCloud() {
return new BeanClass();
}
@ConditionalOnJava(JavaVersion.EIGHT)
@Profile("cloud")
public BeanClass conditionalBeanWithJavaAndCloud() {
return new BeanClass();
}
}

View File

@@ -0,0 +1,7 @@
package org.test;
import org.springframework.beans.factory.annotation.Configurable;
@Configurable
public class ClassWithDefaultSymbol {
}