Initial support for Gradle projects
This commit is contained in:
@@ -53,6 +53,11 @@
|
||||
<artifactId>commons-maven</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.ide.vscode</groupId>
|
||||
<artifactId>commons-gradle</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.ide.vscode</groupId>
|
||||
<artifactId>commons-language-server</artifactId>
|
||||
|
||||
@@ -24,6 +24,8 @@ import org.springframework.ide.vscode.boot.properties.hover.PropertiesHoverInfoP
|
||||
import org.springframework.ide.vscode.boot.properties.reconcile.SpringPropertiesReconcileEngine;
|
||||
import org.springframework.ide.vscode.boot.yaml.completions.ApplicationYamlAssistContext;
|
||||
import org.springframework.ide.vscode.boot.yaml.reconcile.ApplicationYamlReconcileEngine;
|
||||
import org.springframework.ide.vscode.commons.gradle.GradleCore;
|
||||
import org.springframework.ide.vscode.commons.gradle.GradleProjectFinderStrategy;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter;
|
||||
import org.springframework.ide.vscode.commons.languageserver.hover.HoverInfoProvider;
|
||||
@@ -36,6 +38,7 @@ import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcil
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService;
|
||||
import org.springframework.ide.vscode.commons.maven.JavaProjectWithClasspathFileFinderStrategy;
|
||||
import org.springframework.ide.vscode.commons.maven.MavenCore;
|
||||
import org.springframework.ide.vscode.commons.maven.MavenProjectFinderStrategy;
|
||||
import org.springframework.ide.vscode.commons.util.text.IDocument;
|
||||
import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
@@ -60,7 +63,8 @@ import com.google.common.collect.ImmutableList;
|
||||
public class BootPropertiesLanguageServer extends SimpleLanguageServer {
|
||||
|
||||
public static final JavaProjectFinder DEFAULT_PROJECT_FINDER = new DefaultJavaProjectFinder(new IJavaProjectFinderStrategy[] {
|
||||
new MavenProjectFinderStrategy(),
|
||||
new MavenProjectFinderStrategy(MavenCore.getDefault()),
|
||||
new GradleProjectFinderStrategy(GradleCore.getDefault()),
|
||||
new JavaProjectWithClasspathFileFinderStrategy()
|
||||
});
|
||||
|
||||
|
||||
@@ -131,11 +131,11 @@ public class ClassReferenceProvider extends CachingValueProvider {
|
||||
|
||||
@Override
|
||||
protected Flux<StsValueHint> getValuesAsync(IJavaProject javaProject, String query) {
|
||||
IType targetType = target == null || target.isEmpty() ? javaProject.findType("java.lang.Object") : javaProject.findType(target);
|
||||
IType targetType = target == null || target.isEmpty() ? javaProject.getClasspath().findType("java.lang.Object") : javaProject.getClasspath().findType(target);
|
||||
if (targetType == null) {
|
||||
return Flux.empty();
|
||||
}
|
||||
Set<IType> allSubclasses = javaProject
|
||||
Set<IType> allSubclasses = javaProject.getClasspath()
|
||||
.allSubtypesOf(targetType)
|
||||
.filter(t -> Flags.isPublic(t.getFlags()) && !concrete || !isAbstract(t))
|
||||
.collect(Collectors.toSet())
|
||||
@@ -143,7 +143,7 @@ public class ClassReferenceProvider extends CachingValueProvider {
|
||||
if (allSubclasses.isEmpty()) {
|
||||
return Flux.empty();
|
||||
} else {
|
||||
return javaProject
|
||||
return javaProject.getClasspath()
|
||||
.fuzzySearchTypes(query, type -> allSubclasses.contains(type))
|
||||
.collectSortedList((o1, o2) -> o2.getT2().compareTo(o1.getT2()))
|
||||
.flatMap(l -> Flux.fromIterable(l))
|
||||
|
||||
@@ -18,6 +18,8 @@ import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFin
|
||||
import org.springframework.ide.vscode.commons.util.text.IDocument;
|
||||
|
||||
public class DefaultSpringPropertyIndexProvider implements SpringPropertyIndexProvider {
|
||||
|
||||
private static final FuzzyMap<PropertyInfo> EMPTY_INDEX = new SpringPropertyIndex(null, null);
|
||||
|
||||
private JavaProjectFinder javaProjectFinder;
|
||||
private SpringPropertiesIndexManager indexManager = new SpringPropertiesIndexManager(ValueProviderRegistry.getDefault());
|
||||
@@ -34,7 +36,7 @@ public class DefaultSpringPropertyIndexProvider implements SpringPropertyIndexPr
|
||||
if (jp!=null) {
|
||||
return indexManager.get(jp, progressService);
|
||||
}
|
||||
return null;
|
||||
return EMPTY_INDEX;
|
||||
}
|
||||
|
||||
public void setProgressService(ProgressService progressService) {
|
||||
|
||||
@@ -37,10 +37,10 @@ public class LoggerNameProvider extends CachingValueProvider {
|
||||
@Override
|
||||
protected Flux<StsValueHint> getValuesAsync(IJavaProject javaProject, String query) {
|
||||
return Flux.concat(
|
||||
javaProject
|
||||
javaProject.getClasspath()
|
||||
.fuzzySearchPackages(query)
|
||||
.map(t -> Tuples.of(StsValueHint.create(t.getT1()), t.getT2())),
|
||||
javaProject
|
||||
javaProject.getClasspath()
|
||||
.fuzzySearchTypes(query, null)
|
||||
.map(t -> Tuples.of(StsValueHint.create(t.getT1()), t.getT2()))
|
||||
)
|
||||
|
||||
@@ -79,7 +79,7 @@ public class StsValueHint {
|
||||
try {
|
||||
IJavaProject jp = typeUtil.getJavaProject();
|
||||
if (jp!=null) {
|
||||
IType type = jp.findType(fqName);
|
||||
IType type = jp.getClasspath().findType(fqName);
|
||||
if (type!=null) {
|
||||
return create(type);
|
||||
}
|
||||
|
||||
@@ -543,7 +543,7 @@ public class TypeUtil {
|
||||
private IType findType(String typeName) {
|
||||
try {
|
||||
if (javaProject!=null) {
|
||||
return javaProject.findType(typeName);
|
||||
return javaProject.getClasspath().findType(typeName);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.log(e);
|
||||
|
||||
@@ -68,8 +68,8 @@ public class TypeUtilTest {
|
||||
@Test
|
||||
public void testGetProperties() throws Exception {
|
||||
useProject("enums-boot-1.3.2-app");
|
||||
assertNotNull(project.findType("demo.Color"));
|
||||
assertNotNull(project.findType("demo.ColorData"));
|
||||
assertNotNull(project.getClasspath().findType("demo.Color"));
|
||||
assertNotNull(project.getClasspath().findType("demo.ColorData"));
|
||||
|
||||
|
||||
Type data = TypeParser.parse("demo.ColorData");
|
||||
|
||||
@@ -214,7 +214,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
|
||||
@Test public void testPredefinedProject() throws Exception {
|
||||
IJavaProject p = createPredefinedMavenProject("tricky-getters-boot-1.3.1-app");
|
||||
IType type = p.findType("demo.DemoApplication");
|
||||
IType type = p.getClasspath().findType("demo.DemoApplication");
|
||||
assertNotNull(type);
|
||||
}
|
||||
|
||||
@@ -223,7 +223,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
|
||||
//Check some assumptions about the initial state of the test project (if these checks fail then
|
||||
// the test may be 'vacuous' since the things we are testing for already exist beforehand.
|
||||
Path metadataFile = p.getOutputFolder().resolve(PropertiesLoader.PROJECT_META_DATA_LOCATIONS[0]);
|
||||
Path metadataFile = p.getClasspath().getOutputFolder().resolve(PropertiesLoader.PROJECT_META_DATA_LOCATIONS[0]);
|
||||
assertTrue(metadataFile.toFile().isFile());
|
||||
assertContains("\"name\": \"foo.counter\"", Files.toString(metadataFile.toFile(), Charset.forName("UTF8")));
|
||||
}
|
||||
@@ -288,7 +288,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("boot-1.2.1-app-properties-list-of-pojo");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Foo"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Foo"));
|
||||
|
||||
Editor editor = newEditor(
|
||||
"token.bad.guy=problem\n"+
|
||||
@@ -313,7 +313,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("boot-1.2.1-app-properties-list-of-pojo");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Foo"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Foo"));
|
||||
|
||||
assertCompletionsVariations("volder.foo.l<*>", "volder.foo.list[<*>");
|
||||
assertCompletionsDisplayStringAndDetail("volder.foo.list[0].<*>",
|
||||
@@ -462,7 +462,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
|
||||
data("foo.colors", "java.util.List<demo.Color>", null, "A foonky list");
|
||||
|
||||
@@ -485,7 +485,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
|
||||
data("foo.color", "demo.Color", null, "A foonky colour");
|
||||
|
||||
@@ -504,7 +504,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
|
||||
data("foo.color", "demo.Color", null, "A foonky colour");
|
||||
Editor editor = newEditor(
|
||||
@@ -527,7 +527,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
|
||||
assertCompletionsVariations("foo.nam<*>",
|
||||
"foo.name-colors.<*>",
|
||||
@@ -546,7 +546,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
useProject(p);
|
||||
data("foo.name-colors", "java.util.Map<java.lang.String,demo.Color>", null, "Map with colors in its values");
|
||||
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
|
||||
Editor editor = newEditor(
|
||||
"foo.name-colors.jacket=BLUE\n" +
|
||||
@@ -565,8 +565,8 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
useProject(p);
|
||||
data("foo.color-names", "java.util.Map<demo.Color,java.lang.String>", null, "Map with colors in its keys");
|
||||
data("foo.color-data", "java.util.Map<demo.Color,demo.ColorData>", null, "Map with colors in its keys, and pojo in values");
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.findType("demo.ColorData"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.ColorData"));
|
||||
|
||||
//Map Enum -> String:
|
||||
assertCompletionsVariations("foo.colnam<*>", "foo.color-names.<*>");
|
||||
@@ -605,8 +605,8 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.findType("demo.ColorData"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.ColorData"));
|
||||
|
||||
Editor editor = newEditor(
|
||||
"foo.color-names.RED=Rood\n"+
|
||||
@@ -625,8 +625,8 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.findType("demo.ColorData"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.ColorData"));
|
||||
|
||||
assertCompletion("foo.dat<*>", "foo.data.<*>");
|
||||
|
||||
@@ -660,8 +660,8 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.findType("demo.ColorData"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.ColorData"));
|
||||
|
||||
Editor editor = newEditor(
|
||||
"foo.data.bogus=Something\n" +
|
||||
@@ -695,8 +695,8 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.findType("demo.ColorData"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.ColorData"));
|
||||
|
||||
data("atommap", "java.util.Map<java.lang.String,java.lang.Integer>", null, "map of atomic data");
|
||||
data("objectmap", "java.util.Map<java.lang.String,java.lang.Object>", null, "map of atomic object (recursive map)");
|
||||
@@ -735,8 +735,8 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.findType("demo.ColorData"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.ColorData"));
|
||||
|
||||
Editor editor = newEditor(
|
||||
"foo.color-names.BLUE.dot=Blauw\n"+
|
||||
@@ -761,7 +761,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.ClothingSize"));
|
||||
assertNotNull(p.getClasspath().findType("demo.ClothingSize"));
|
||||
|
||||
data("simple.pants.size", "demo.ClothingSize", null, "The simple pant's size");
|
||||
|
||||
@@ -805,7 +805,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.ClothingSize"));
|
||||
assertNotNull(p.getClasspath().findType("demo.ClothingSize"));
|
||||
|
||||
data("simple.pants.size", "demo.ClothingSize", null, "The simple pant's size");
|
||||
|
||||
@@ -1400,7 +1400,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
|
||||
data("my.colors", "java.util.List<demo.Color>", null, "Ooh! nice colors!");
|
||||
|
||||
|
||||
@@ -545,7 +545,7 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest {
|
||||
@Test public void testReconcileBeanPropName() throws Exception {
|
||||
IJavaProject p = createPredefinedMavenProject("boot-1.2.1-app-properties-list-of-pojo");
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Foo"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Foo"));
|
||||
data("some-foo", "demo.Foo", null, "some Foo pojo property");
|
||||
Editor editor = newEditor(
|
||||
"some-foo:\n" +
|
||||
@@ -577,7 +577,7 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest {
|
||||
@Test public void testReconcilePojoArray() throws Exception {
|
||||
IJavaProject p = createPredefinedMavenProject("boot-1.2.1-app-properties-list-of-pojo");
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Foo"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Foo"));
|
||||
|
||||
{
|
||||
Editor editor = newEditor(
|
||||
@@ -654,7 +654,7 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest {
|
||||
@Test public void testEnumPropertyReconciling() throws Exception {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.Color"));
|
||||
assertNotNull(p.getClasspath().findType("demo.Color"));
|
||||
|
||||
data("foo.color", "demo.Color", null, "A foonky colour");
|
||||
Editor editor = newEditor(
|
||||
@@ -1846,7 +1846,7 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest {
|
||||
@Ignore @Test public void testEnumsInLowerCaseContentAssist() throws Exception {
|
||||
IJavaProject p = createPredefinedMavenProject("enums-boot-1.3.2-app");
|
||||
useProject(p);
|
||||
assertNotNull(p.findType("demo.ClothingSize"));
|
||||
assertNotNull(p.getClasspath().findType("demo.ClothingSize"));
|
||||
|
||||
data("simple.pants.size", "demo.ClothingSize", null, "The simple pant's size");
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ public class ProjectsHarness {
|
||||
switch (type) {
|
||||
case MAVEN:
|
||||
MavenBuilder.newBuilder(testProjectPath).clean().pack().javadoc().skipTests().execute();
|
||||
return new MavenJavaProject(testProjectPath.resolve(MavenCore.POM_XML).toFile());
|
||||
return new MavenJavaProject(MavenCore.getDefault(), testProjectPath.resolve(MavenCore.POM_XML).toFile());
|
||||
case CLASSPATH_TXT:
|
||||
MavenBuilder.newBuilder(testProjectPath).clean().pack().skipTests().execute();
|
||||
return new JavaProjectWithClasspathFile(testProjectPath.resolve(MavenCore.CLASSPATH_TXT).toFile());
|
||||
|
||||
Reference in New Issue
Block a user