diff --git a/.gitignore b/.gitignore index cb58cf4c8..0932b9cd4 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ hs_err_pid* target/ +bin/ *.log # Mac OSX aux files diff --git a/vscode-extensions/commons/commons-gradle/.classpath b/vscode-extensions/commons/commons-gradle/.classpath new file mode 100644 index 000000000..fae1a2b37 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/.classpath @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vscode-extensions/commons/commons-gradle/.project b/vscode-extensions/commons/commons-gradle/.project new file mode 100644 index 000000000..c9d9c8fb0 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/.project @@ -0,0 +1,23 @@ + + + commons-gradle + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/vscode-extensions/commons/commons-gradle/.settings/org.eclipse.core.resources.prefs b/vscode-extensions/commons/commons-gradle/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..29abf9995 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/vscode-extensions/commons/commons-gradle/.settings/org.eclipse.jdt.core.prefs b/vscode-extensions/commons/commons-gradle/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..714351aec --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/vscode-extensions/commons/commons-gradle/.settings/org.eclipse.m2e.core.prefs b/vscode-extensions/commons/commons-gradle/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 000000000..f897a7f1c --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/vscode-extensions/commons/commons-gradle/pom.xml b/vscode-extensions/commons/commons-gradle/pom.xml new file mode 100644 index 000000000..5e9a84009 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/pom.xml @@ -0,0 +1,41 @@ + + 4.0.0 + + commons-gradle + commons-gradle + Gradle Utilities + + + org.springframework.ide.vscode + commons-parent + 0.0.1-SNAPSHOT + ../pom.xml + + + + 3.3 + + + + + gradle-repo + Gradle Tooling Repo + https://repo.gradle.org/gradle/libs-releases + + + + + + org.springframework.ide.vscode + commons-java + ${project.version} + + + org.gradle + gradle-tooling-api + ${gradle-tooling.version} + + + + \ No newline at end of file diff --git a/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleCore.java b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleCore.java new file mode 100644 index 000000000..6cbd3c9bd --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleCore.java @@ -0,0 +1,107 @@ +/******************************************************************************* + * Copyright (c) 2017 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.gradle; + +import java.io.File; + +import org.gradle.tooling.GradleConnectionException; +import org.gradle.tooling.GradleConnector; +import org.gradle.tooling.ProjectConnection; +import org.gradle.tooling.model.build.BuildEnvironment; +import org.gradle.tooling.model.eclipse.EclipseProject; +import org.springframework.ide.vscode.commons.util.Assert; + +/** + * Gradle API tooling utility + * + * @author Alex Boyko + * + */ +public class GradleCore { + + @FunctionalInterface + public interface GradleConfiguration { + void configure(GradleConnector connector); + } + + public interface GradleCoreProject { + EclipseProject getProject(); + BuildEnvironment getBuildEnvironment(); + } + + static final String GRADLE_BUILD_FILE = "build.gradle"; + + private static GradleCore defaultInstance = null; + + public static GradleCore getDefault() { + if (defaultInstance == null) { + defaultInstance = new GradleCore(); + } + return defaultInstance; + } + + private GradleConfiguration configuration; + + public GradleCore() { + this.configuration = (connector) -> {}; + } + + public GradleCore(GradleConfiguration configuration) { + Assert.isNotNull(configuration); + this.configuration = configuration; + } + + public GradleCoreProject readProject(File projectDir) throws GradleException { + ProjectConnection connection = null; + try { + GradleConnector gradleConnector = GradleConnector.newConnector().forProjectDirectory(projectDir); + configuration.configure(gradleConnector); + connection = gradleConnector.connect();; + final EclipseProject project = connection.getModel(EclipseProject.class); + final BuildEnvironment build = connection.getModel(BuildEnvironment.class); + return new GradleCoreProject() { + + @Override + public EclipseProject getProject() { + return project; + } + + @Override + public BuildEnvironment getBuildEnvironment() { + return build; + } + }; + } catch (GradleConnectionException e) { + throw new GradleException(e); + } finally { + if (connection != null) { + connection.close(); + } + } + } + + public T getModel(File projectDir, Class modelType) throws GradleException { + ProjectConnection connection = null; + try { + GradleConnector gradleConnector = GradleConnector.newConnector().forProjectDirectory(projectDir); + configuration.configure(gradleConnector); + connection = gradleConnector.connect(); + return connection.getModel(modelType); + } catch (GradleConnectionException e) { + throw new GradleException(e); + } finally { + if (connection != null) { + connection.close(); + } + } + } + +} diff --git a/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleException.java b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleException.java new file mode 100644 index 000000000..75342b9ca --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleException.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2017 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.gradle; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * Gradle wrapper exception + * + * @author Alex Boyko + * + */ +public class GradleException extends Exception { + + private static final long serialVersionUID = 7958309594787399714L; + + private Throwable[] t; + + public GradleException() { + super(); + } + + public GradleException(Throwable... t) { + super(); + this.t = t; + } + + @Override + public String getMessage() { + if (t != null) { + return String.join("\n", Arrays.stream(t).map(t -> t.getMessage()).collect(Collectors.toList())); + } + return super.getMessage(); + } + +} diff --git a/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleJavaProject.java b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleJavaProject.java new file mode 100644 index 000000000..ae7121144 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleJavaProject.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2017 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.gradle; + +import java.io.File; + +import org.springframework.ide.vscode.commons.java.IJavaProject; + +/** + * Implementation of Gradle Java project + * + * @author Alex Boyko + * + */ +public class GradleJavaProject implements IJavaProject { + + private GradleProjectClasspath classpath; + + public GradleJavaProject(GradleCore gradle, File projectDir) throws GradleException { + this.classpath = new GradleProjectClasspath(gradle, projectDir); + } + + @Override + public GradleProjectClasspath getClasspath() { + return classpath; + } + +} diff --git a/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectClasspath.java b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectClasspath.java new file mode 100644 index 000000000..c7b2b8379 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectClasspath.java @@ -0,0 +1,207 @@ +/******************************************************************************* + * Copyright (c) 2017 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.gradle; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.gradle.tooling.model.build.BuildEnvironment; +import org.gradle.tooling.model.eclipse.EclipseProject; +import org.springframework.ide.vscode.commons.jandex.JandexClasspath; +import org.springframework.ide.vscode.commons.jandex.JandexIndex; +import org.springframework.ide.vscode.commons.java.IClasspath; +import org.springframework.ide.vscode.commons.java.IJavadocProvider; +import org.springframework.ide.vscode.commons.java.parser.ParserJavadocProvider; +import org.springframework.ide.vscode.commons.javadoc.HtmlJavadocProvider; +import org.springframework.ide.vscode.commons.javadoc.SourceUrlProviderFromSourceContainer; +import org.springframework.ide.vscode.commons.util.Log; + +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; + +/** + * Implementation of {@link IClasspath} for Gradle projects + * + * @author Alex Boyko + * + */ +public class GradleProjectClasspath extends JandexClasspath { + + private static final String JAVA_HOME = "java.home"; + private static final String JAVA_RUNTIME_VERSION = "java.runtime.version"; + private static final String JAVA_BOOT_CLASS_PATH = "sun.boot.class.path"; + + private EclipseProject gradleProject; + private Supplier buildEnvironment; + + public GradleProjectClasspath(GradleCore gradle, File projectDir) throws GradleException { + super(); + this.gradleProject = gradle.getModel(projectDir, EclipseProject.class); + this.buildEnvironment = Suppliers.memoize(() -> { + try { + return gradle.getModel(projectDir, BuildEnvironment.class); + } catch (GradleException e) { + Log.log(e); + return null; + } + }); + } + + @Override + protected JandexIndex[] getBaseIndices() { + return new JandexIndex[] { new JandexIndex(getJreLibs().map(path -> path.toFile()).collect(Collectors.toList()), + jarFile -> findIndexFile(jarFile), (classpathResource) -> { + try { + String javaVersion = getJavaRuntimeMinorVersion(); + if (javaVersion == null) { + javaVersion = "8"; + } + URL javadocUrl = new URL("http://docs.oracle.com/javase/" + javaVersion + "/docs/api/"); + return new HtmlJavadocProvider( + (type) -> SourceUrlProviderFromSourceContainer.JAVADOC_FOLDER_URL_SUPPLIER + .sourceUrl(javadocUrl, type)); + } catch (MalformedURLException e) { + Log.log(e); + return null; + } + }) }; + } + + @Override + public Stream getClasspathEntries() throws Exception { + return Stream.concat(gradleProject.getClasspath().stream().map(dep -> dep.getFile().toPath()), + gradleProject.getProjectDependencies().stream().map(project -> new File(project.getPath()).toPath())); + } + + @Override + public Stream getClasspathResources() { + return gradleProject.getSourceDirectories().stream().map(sourceDirectory -> sourceDirectory.getDirectory()).flatMap(folder -> { + try { + return Files.walk(folder.toPath()) + .filter(path -> Files.isRegularFile(path)) + .map(path -> folder.toPath().relativize(path)) + .map(relativePath -> relativePath.toString()) + .filter(pathString -> !pathString.endsWith(".java") && !pathString.endsWith(".class")); + } catch (IOException e) { + return Stream.empty(); + } + }); + } + + public Path getOutputFolder() { + return gradleProject.getProjectDirectory().toPath().resolve(gradleProject.getOutputLocation().getPath()); + } + + public String getName() { + return gradleProject.getName(); + } + + public boolean exists() { + return gradleProject != null; + } + + @Override + protected IJavadocProvider createParserJavadocProvider(File classpathResource) { + if (classpathResource.isDirectory()) { + Optional classpathFolder = gradleProject.getSourceDirectories().stream() + .map(dir -> dir.getDirectory()) + .filter(dir -> classpathResource.toPath().startsWith(dir.toPath())) + .findFirst(); + if (classpathFolder.isPresent()) { + return new ParserJavadocProvider(type -> { + return SourceUrlProviderFromSourceContainer.SOURCE_FOLDER_URL_SUPPLIER + .sourceUrl(classpathFolder.get().toURI().toURL(), type); + }); + + } + } else { + + } + return null; + } + + @Override + protected IJavadocProvider createHtmlJavdocProvider(File classpathResource) { + return null; + } + + public String getGradleVersion() throws GradleException { + if (buildEnvironment.get() == null) { + throw new GradleException(new Exception("Cannot find Gradle version")); + } else { + return buildEnvironment.get().getGradle().getGradleVersion(); + } + } + + public File getGradleHome() throws GradleException { + if (buildEnvironment.get() == null) { + throw new GradleException(new Exception("Cannot find Gradle home folder")); + } else { + return buildEnvironment.get().getGradle().getGradleUserHome(); + } + } + + public String getJavaRuntimeVersion() { + return System.getProperty(JAVA_RUNTIME_VERSION); + } + + public String getJavaRuntimeMinorVersion() { + String fullVersion = getJavaRuntimeVersion(); + String[] tokenized = fullVersion.split("\\."); + if (tokenized.length > 1) { + return tokenized[1]; + } else { + Log.log("Cannot determine minor version for the Java Runtime Version: " + fullVersion); + return null; + } + } + + private String getJavaHome() { + if (buildEnvironment.get() == null) { + return System.getProperty(JAVA_HOME); + } else { + return buildEnvironment.get().getJava().getJavaHome().toString(); + } + } + + private Stream getJreLibs() { + String s = System.getProperty(JAVA_BOOT_CLASS_PATH); + return Arrays.stream(s.split(File.pathSeparator)) + .map(strPath -> strPath.replace(System.getProperty(JAVA_HOME), getJavaHome())) + .map(File::new) + .filter(f -> f.canRead()) + .map(f -> f.toPath()); + } + + private File findIndexFile(File jarFile) { + String suffix = null; + String javaHome = getJavaHome(); + if (javaHome != null) { + int index = javaHome.lastIndexOf('/'); + if (index != -1) { + javaHome = javaHome.substring(0, index); + } + } + if (jarFile.toString().startsWith(javaHome)) { + suffix = getJavaRuntimeVersion(); + } + return new File(JandexIndex.getIndexFolder().toString(), jarFile.getName() + "-" + suffix + ".jdx"); + } + +} diff --git a/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectFinderStrategy.java b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectFinderStrategy.java new file mode 100644 index 000000000..f46142d8f --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/main/java/org/springframework/ide/vscode/commons/gradle/GradleProjectFinderStrategy.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2017 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.gradle; + +import java.io.File; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.concurrent.ExecutionException; + +import org.springframework.ide.vscode.commons.languageserver.java.IJavaProjectFinderStrategy; +import org.springframework.ide.vscode.commons.util.FileUtils; +import org.springframework.ide.vscode.commons.util.StringUtil; +import org.springframework.ide.vscode.commons.util.text.IDocument; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; + +/** + * Tests whether document belongs to a Gradle project + * + * @author Alex Boyko + * + */ +public class GradleProjectFinderStrategy implements IJavaProjectFinderStrategy { + + private Cache cache = CacheBuilder.newBuilder().build(); + + private GradleCore gradle; + + public GradleProjectFinderStrategy(GradleCore gradle) { + this.gradle = gradle; + } + + @Override + public GradleJavaProject find(IDocument d) throws ExecutionException, URISyntaxException { + String uriStr = d.getUri(); + if (StringUtil.hasText(uriStr)) { + URI uri = new URI(uriStr); + // TODO: This only work with File uri. Should it work with others + // too? + if (uri.getScheme().equalsIgnoreCase("file")) { + File file = new File(uri).getAbsoluteFile(); + File gradlebuild = FileUtils.findFile(file, GradleCore.GRADLE_BUILD_FILE); + if (gradlebuild != null) { + return cache.get(gradlebuild.getParentFile(), () -> { + return new GradleJavaProject(gradle, gradlebuild.getParentFile()); + }); + } + } + } + return null; + } + +} diff --git a/vscode-extensions/commons/commons-gradle/src/test/java/org/springframework/ide/vscode/commons/gradle/GradleProjectTest.java b/vscode-extensions/commons/commons-gradle/src/test/java/org/springframework/ide/vscode/commons/gradle/GradleProjectTest.java new file mode 100644 index 000000000..f99c08bb8 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/java/org/springframework/ide/vscode/commons/gradle/GradleProjectTest.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2017 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.commons.gradle; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.junit.Test; + +/** + * Tests covering Gradle project data + * + * @author Alex Boyko + * + */ +public class GradleProjectTest { + + private GradleJavaProject getGradleProject(String projectName) throws Exception { + Path testProjectPath = Paths.get(GradleProjectTest.class.getResource("/" + projectName).toURI()); + return new GradleJavaProject(GradleCore.getDefault(), testProjectPath.toFile()); + } + + @Test + public void testEclipseGradleProject() throws Exception { + GradleJavaProject project = getGradleProject("empty-gradle-project"); + Set calculatedClassPath = project.getClasspath().getClasspathEntries().collect(Collectors.toSet()); + assertEquals(48, calculatedClassPath.size()); + } + + @Test + public void outputFolder() throws Exception { + GradleJavaProject project = getGradleProject("test-app-1"); + assertTrue(project.getClasspath().getOutputFolder().endsWith("bin")); + } + + @Test + public void gradleClasspathResource() throws Exception { + GradleJavaProject project = getGradleProject("test-app-1"); + List resources = project.getClasspath().getClasspathResources().collect(Collectors.toList()); + assertArrayEquals(new String[] {"test-resource-1.txt"}, resources.toArray(new String[resources.size()])); + } + +} diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/.gitignore b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/.gitignore new file mode 100644 index 000000000..c9f701048 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/.gitignore @@ -0,0 +1,25 @@ +.gradle +/build/ +!gradle/wrapper/gradle-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ \ No newline at end of file diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/build.gradle b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/build.gradle new file mode 100644 index 000000000..87b447d99 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/build.gradle @@ -0,0 +1,33 @@ +buildscript { + ext { + springBootVersion = '1.5.1.RELEASE' + } + repositories { + mavenCentral() + } + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") + } +} + +apply plugin: 'java' +apply plugin: 'eclipse' +apply plugin: 'org.springframework.boot' + +jar { + baseName = 'empty-boot-1.4.0-web-app' + version = '0.0.1-SNAPSHOT' +} + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + + +dependencies { + compile('org.springframework.boot:spring-boot-starter-actuator') + compile('org.springframework.boot:spring-boot-starter-web') + testCompile('org.springframework.boot:spring-boot-starter-test') +} diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradle/wrapper/gradle-wrapper.jar b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..ca78035ef Binary files /dev/null and b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradle/wrapper/gradle-wrapper.jar differ diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradle/wrapper/gradle-wrapper.properties b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..b66f3c112 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradlew b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradlew new file mode 100755 index 000000000..27309d923 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradlew.bat b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradlew.bat new file mode 100644 index 000000000..832fdb607 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/src/main/java/com/example/EmptyGradleProjectApplication.java b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/src/main/java/com/example/EmptyGradleProjectApplication.java new file mode 100644 index 000000000..5c892a565 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/src/main/java/com/example/EmptyGradleProjectApplication.java @@ -0,0 +1,12 @@ +package com.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class EmptyGradleProjectApplication { + + public static void main(String[] args) { + SpringApplication.run(EmptyGradleProjectApplication.class, args); + } +} diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/src/main/resources/application.properties b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/src/main/resources/application.properties new file mode 100644 index 000000000..e69de29bb diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/src/test/java/com/example/EmptyGradleProjectApplicationTests.java b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/src/test/java/com/example/EmptyGradleProjectApplicationTests.java new file mode 100644 index 000000000..f2ba4bbc4 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/empty-gradle-project/src/test/java/com/example/EmptyGradleProjectApplicationTests.java @@ -0,0 +1,16 @@ +package com.example; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class EmptyGradleProjectApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/fileHashes.bin b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/fileHashes.bin new file mode 100644 index 000000000..e80e08a00 Binary files /dev/null and b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/fileHashes.bin differ diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/fileSnapshots.bin b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/fileSnapshots.bin new file mode 100644 index 000000000..15b63715c Binary files /dev/null and b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/fileSnapshots.bin differ diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/taskArtifacts.bin b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/taskArtifacts.bin new file mode 100644 index 000000000..33f6a081c Binary files /dev/null and b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/taskArtifacts.bin differ diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/taskArtifacts.lock b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/taskArtifacts.lock new file mode 100644 index 000000000..ae4ecd12e Binary files /dev/null and b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/.gradle/3.3/taskArtifacts/taskArtifacts.lock differ diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/build.gradle b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/build.gradle new file mode 100644 index 000000000..fd99219f5 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/build.gradle @@ -0,0 +1,28 @@ +/* + * This build file was generated by the Gradle 'init' task. + * + * This generated file contains a sample Java project to get you started. + * For more details take a look at the Java Quickstart chapter in the Gradle + * user guide available at https://docs.gradle.org/3.3/userguide/tutorial_java_projects.html + */ + +// Apply the java plugin to add support for Java +apply plugin: 'java' + +// In this section you declare where to find the dependencies of your project +repositories { + // Use jcenter for resolving your dependencies. + // You can declare any Maven/Ivy/file repository here. + jcenter() +} + +dependencies { + // The production code uses Guava + compile 'com.google.guava:guava:20.0' + compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '1.5.1.RELEASE' + compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.1.RELEASE' + + // Use JUnit test framework + testCompile 'junit:junit:4.12' +} + diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/gradle/wrapper/gradle-wrapper.properties b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..49bf4f6c9 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue Feb 07 11:31:46 EST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/gradlew b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/gradlew new file mode 100755 index 000000000..4453ccea3 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save ( ) { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/gradlew.bat b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/gradlew.bat new file mode 100644 index 000000000..f9553162f --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/settings.gradle b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/settings.gradle new file mode 100644 index 000000000..aa96911ff --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/settings.gradle @@ -0,0 +1,20 @@ +/* + * This settings file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * In a single project build this file can be empty or even removed. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user guide at https://docs.gradle.org/3.3/userguide/multi_project_builds.html + */ + +/* +// To declare projects as part of a multi-project build use the 'include' method +include 'shared' +include 'api' +include 'services:webservice' +*/ + +rootProject.name = 'test-app-1' +//org.gradle.java.home = '/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home' + diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/src/main/java/Library.java b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/src/main/java/Library.java new file mode 100644 index 000000000..fa1b41a26 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/src/main/java/Library.java @@ -0,0 +1,8 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +public class Library { + public boolean someLibraryMethod() { + return true; + } +} diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/src/test/java/LibraryTest.java b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/src/test/java/LibraryTest.java new file mode 100644 index 000000000..645740d03 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/src/test/java/LibraryTest.java @@ -0,0 +1,12 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +import org.junit.Test; +import static org.junit.Assert.*; + +public class LibraryTest { + @Test public void testSomeLibraryMethod() { + Library classUnderTest = new Library(); + assertTrue("someLibraryMethod should return 'true'", classUnderTest.someLibraryMethod()); + } +} diff --git a/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/src/test/resources/test-resource-1.txt b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/src/test/resources/test-resource-1.txt new file mode 100644 index 000000000..9dbfeeee5 --- /dev/null +++ b/vscode-extensions/commons/commons-gradle/src/test/resources/test-app-1/src/test/resources/test-resource-1.txt @@ -0,0 +1 @@ +Some text \ No newline at end of file diff --git a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/jandex/JandexClasspath.java b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/jandex/JandexClasspath.java new file mode 100644 index 000000000..c90066026 --- /dev/null +++ b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/jandex/JandexClasspath.java @@ -0,0 +1,88 @@ +package org.springframework.ide.vscode.commons.jandex; + +import java.io.File; +import java.nio.file.Path; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.springframework.ide.vscode.commons.java.IClasspath; +import org.springframework.ide.vscode.commons.java.IJavadocProvider; +import org.springframework.ide.vscode.commons.java.IType; +import org.springframework.ide.vscode.commons.util.Log; + +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; + +import reactor.core.publisher.Flux; +import reactor.util.function.Tuple2; + +public abstract class JandexClasspath implements IClasspath { + + public static JavadocProviderTypes providerType = JavadocProviderTypes.HTML; + + public enum JavadocProviderTypes { + JAVA_PARSER, + HTML + } + + private Supplier javaIndex; + + public JandexClasspath() { + this.javaIndex = Suppliers.memoize(() -> createIndex()); + } + + protected JandexIndex createIndex() { + Stream classpathEntries = Stream.empty(); + try { + classpathEntries = getClasspathEntries(); + } catch (Exception e) { + Log.log(e); + } + return new JandexIndex(classpathEntries.map(p -> p.toFile()).collect(Collectors.toList()), jarFile -> findIndexFile(jarFile), classpathResource -> { + switch (providerType) { + case JAVA_PARSER: + return createParserJavadocProvider(classpathResource); + default: + return createHtmlJavdocProvider(classpathResource); + } + }, getBaseIndices()); + } + + protected JandexIndex[] getBaseIndices() { + return new JandexIndex[0]; + } + + public IType findType(String fqName) { + return javaIndex.get().findType(fqName); + } + + public Flux> fuzzySearchTypes(String searchTerm, Predicate typeFilter) { + return javaIndex.get().fuzzySearchTypes(searchTerm, typeFilter); + } + + public Flux> fuzzySearchPackages(String searchTerm) { + return javaIndex.get().fuzzySearchPackages(searchTerm); + } + + public Flux allSubtypesOf(IType type) { + return javaIndex.get().allSubtypesOf(type); + } + + private File findIndexFile(File jarFile) { + File indexFolder = getIndexFolder(); + if (indexFolder == null) { + return null; + } + return new File(indexFolder.toString(), jarFile.getName() + "-" + jarFile.lastModified() + ".jdx"); + } + + protected File getIndexFolder() { + return JandexIndex.getIndexFolder(); + } + + abstract protected IJavadocProvider createParserJavadocProvider(File classpathResource); + + abstract protected IJavadocProvider createHtmlJavdocProvider(File classpathResource); + +} diff --git a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/jandex/JandexIndex.java b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/jandex/JandexIndex.java index 195baf290..43935a478 100644 --- a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/jandex/JandexIndex.java +++ b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/jandex/JandexIndex.java @@ -54,19 +54,29 @@ import reactor.util.function.Tuple2; import reactor.util.function.Tuples; public class JandexIndex { - + + private static final String JAVA_IO_TMPDIR = "java.io.tmpdir"; + @FunctionalInterface public static interface IndexFileFinder { File findIndexFile(File jarFile); } - + @FunctionalInterface public static interface JavadocProviderFactory { IJavadocProvider createJavadocProvider(File jarContainer); } - + + public static File getIndexFolder() { + File folder = new File(System.getProperty(JAVA_IO_TMPDIR), "jandex"); + if (!folder.isDirectory()) { + folder.mkdirs(); + } + return folder; + } + private static final IJavadocProvider ABSENT_JAVADOC_PROVIDER = new IJavadocProvider() { - + @Override public IJavadoc getJavadoc(IType type) { return null; @@ -86,30 +96,31 @@ public class JandexIndex { public IJavadoc getJavadoc(IAnnotation method) { return null; } - + }; - + private Map>> index; - + private JavadocProviderFactory javadocProviderFactory; - + private Map>>> knownTypes; - + private Map>> knownPackages; - + private Cache javadocProvidersCache = CacheBuilder.newBuilder().build(); private JandexIndex[] baseIndex; - + public void setJvadocProviderFactory(JavadocProviderFactory sourceContainerProvider) { this.javadocProviderFactory = sourceContainerProvider; } - + public JavadocProviderFactory getJavadocProviderFactory() { return javadocProviderFactory; } - - public JandexIndex(Collection classpathEntries, IndexFileFinder indexFileFinder, JavadocProviderFactory javadocProviderFactory, JandexIndex... baseIndex) { + + public JandexIndex(Collection classpathEntries, IndexFileFinder indexFileFinder, + JavadocProviderFactory javadocProviderFactory, JandexIndex... baseIndex) { this.baseIndex = baseIndex; this.index = new ConcurrentHashMap<>(); this.knownTypes = new HashMap<>(); @@ -121,186 +132,185 @@ public class JandexIndex { knownPackages.put(file, Suppliers.memoize(() -> getKnownPackages(file).collect(Collectors.toList()))); }); } - + private Optional createIndex(File file, IndexFileFinder indexFileFinder) { - if (file.isFile() && file.getName().endsWith(".jar")) { + if (file != null && file.isFile() && file.getName().endsWith(".jar")) { return indexJar(file, indexFileFinder); - } else if (file.isDirectory()) { + } else if (file != null && file.isDirectory()) { return indexFolder(file); } else { return Optional.empty(); } } - + private static Optional indexFolder(File folder) { Indexer indexer = new Indexer(); - for (Iterator itr = com.google.common.io.Files.fileTreeTraverser().breadthFirstTraversal(folder).iterator(); itr.hasNext();) { + for (Iterator itr = com.google.common.io.Files.fileTreeTraverser().breadthFirstTraversal(folder) + .iterator(); itr.hasNext();) { File file = itr.next(); if (file.isFile() && file.getName().endsWith(".class")) { - try { - final InputStream stream = new FileInputStream(file); - try { - indexer.index(stream); - } finally { - try { - stream.close(); - } catch (Exception ignore) { - } - } - } catch (Exception e) { - Log.log(e); - } + try { + final InputStream stream = new FileInputStream(file); + try { + indexer.index(stream); + } finally { + try { + stream.close(); + } catch (Exception ignore) { + } + } + } catch (Exception e) { + Log.log(e); + } } } return Optional.of(indexer.complete()); } - + private static Optional indexJar(File file, IndexFileFinder indexFileFinder) { - File indexFile = indexFileFinder.findIndexFile(file); - if (indexFile != null) { - try { - if (indexFile.createNewFile()) { - try { - return Optional.of(JarIndexer - .createJarIndex(file, new Indexer(), indexFile, - false, false, false, System.out, System.err) - .getIndex()); - } catch (IOException e) { - Log.log("Failed to index '" + file + "'", e); - } - } else { - try { - return Optional.of(new IndexReader(new FileInputStream(indexFile)).read()); - } catch (IOException e) { - Log.log("Failed to read index file '" + indexFile + "'. Creating new index file.", e); - if (indexFile.delete()) { - return indexJar(file, indexFileFinder); - } else { - Log.log("Failed to read index file '" + indexFile); - } + File indexFile = indexFileFinder.findIndexFile(file); + if (indexFile != null) { + try { + if (indexFile.createNewFile()) { + try { + return Optional.of(JarIndexer.createJarIndex(file, new Indexer(), indexFile, false, false, + false, System.out, System.err).getIndex()); + } catch (IOException e) { + Log.log("Failed to index '" + file + "'", e); + } + } else { + try { + return Optional.of(new IndexReader(new FileInputStream(indexFile)).read()); + } catch (IOException e) { + Log.log("Failed to read index file '" + indexFile + "'. Creating new index file.", e); + if (indexFile.delete()) { + return indexJar(file, indexFileFinder); + } else { + Log.log("Failed to read index file '" + indexFile); } } - } catch (IOException e) { - Log.log("Unable to create index file '" + indexFile +"'"); - } - } else { - try { - return Optional.of(JarIndexer - .createJarIndex(file, new Indexer(), file.canWrite(), file.getParentFile().canWrite(), false) - .getIndex()); - } catch (IOException e) { - Log.log("Failed to index '" + file + "'", e); } + } catch (IOException e) { + Log.log("Unable to create index file '" + indexFile + "'"); } + } else { + try { + return Optional.of(JarIndexer + .createJarIndex(file, new Indexer(), file.canWrite(), file.getParentFile().canWrite(), false) + .getIndex()); + } catch (IOException e) { + Log.log("Failed to index '" + file + "'", e); + } + } return Optional.empty(); } public IType findType(String fqName) { return getClassByName(DotName.createSimple(fqName)); } - + IType getClassByName(DotName fqName) { // First look for type in the base index array return (baseIndex == null ? Stream.empty() - : Arrays.stream(baseIndex) - .filter(jandexIndex -> jandexIndex != null) - .map(jandexIndex -> jandexIndex.getClassByName(fqName))) - .filter(type -> type != null) - .findFirst() - // If not found look at indices owned by this JandexIndex instance - .orElseGet(() -> streamOfIndices() - .map(e -> Tuples.of(e.getT1(), e.getT2().getClassByName(fqName))) - .filter(e -> e.getT2() != null) - .map(e -> createType(e)) - .findFirst() - .orElse(null)); - + : Arrays.stream( + baseIndex) + .filter( + jandexIndex -> jandexIndex != null) + .map(jandexIndex -> jandexIndex.getClassByName(fqName))).filter(type -> type != null) + .findFirst() + // If not found look at indices owned by this + // JandexIndex instance + .orElseGet(() -> streamOfIndices() + .map(e -> Tuples.of(e.getT1(), e.getT2().getClassByName(fqName))) + .filter(e -> e.getT2() != null).map(e -> createType(e)).findFirst() + .orElse(null)); + } - + private IType createType(Tuple2 match) { File classpathResource = match.getT1(); IJavadocProvider javadocProvider = null; try { - javadocProvider = javadocProvidersCache.get(classpathResource, () -> javadocProviderFactory == null ? ABSENT_JAVADOC_PROVIDER : javadocProviderFactory.createJavadocProvider(classpathResource)); + javadocProvider = javadocProvidersCache.get(classpathResource, () -> { + IJavadocProvider provider = null; + if (javadocProviderFactory != null) { + provider = javadocProviderFactory.createJavadocProvider(classpathResource); + } + return provider == null ? ABSENT_JAVADOC_PROVIDER : provider; + }); } catch (ExecutionException e) { Log.log(e); } - return Wrappers.wrap(this, match.getT2(), javadocProvider); + return Wrappers.wrap(this, match.getT2(), javadocProvider); } - + private Stream> streamOfIndices() { - return index.entrySet().parallelStream().map(e -> Tuples.of(e.getKey(), e.getValue().get())).filter(t -> t.getT2().isPresent()).map(t -> Tuples.of(t.getT1(), t.getT2().get())); + return index.entrySet().parallelStream().map(e -> Tuples.of(e.getKey(), e.getValue().get())) + .filter(t -> t.getT2().isPresent()).map(t -> Tuples.of(t.getT1(), t.getT2().get())); } - + private Stream> getKnownTypesStream(File file) { Optional indexView = index.get(file).get(); if (indexView.isPresent()) { - return indexView.get().getKnownClasses().parallelStream().map(info -> Tuples.of(info.name().toString(), createType(Tuples.of(file, info)))); + return indexView.get().getKnownClasses().parallelStream() + .map(info -> Tuples.of(info.name().toString(), createType(Tuples.of(file, info)))); } return Stream.empty(); } - + private Stream getKnownPackages(File file) { Optional indexView = index.get(file).get(); if (indexView.isPresent()) { - return indexView.get() - .getKnownClasses() - .parallelStream() - .map(info -> { - String name = info.name().toString(); - return name.substring(0, name.lastIndexOf('.')); - }) - .distinct(); + return indexView.get().getKnownClasses().parallelStream().map(info -> { + String name = info.name().toString(); + return name.substring(0, name.lastIndexOf('.')); + }).distinct(); } return Stream.empty(); } - + public Flux> fuzzySearchTypes(String searchTerm, Predicate typeFilter) { - Flux> flux = Flux.fromIterable(knownTypes.values()) - .publishOn(Schedulers.parallel()) - .flatMap(s -> Flux.fromIterable(s.get())) - .filter(t -> typeFilter == null || typeFilter.test(t.getT2())) + Flux> flux = Flux.fromIterable(knownTypes.values()).publishOn(Schedulers.parallel()) + .flatMap(s -> Flux.fromIterable(s.get())).filter(t -> typeFilter == null || typeFilter.test(t.getT2())) .map(t -> Tuples.of(t.getT2(), FuzzyMatcher.matchScore(searchTerm, t.getT1()))) .filter(t -> t.getT2() != 0.0); if (baseIndex == null) { return flux; } else { - return Flux.merge(flux, Flux.fromArray(baseIndex).flatMap(index -> index.fuzzySearchTypes(searchTerm, typeFilter))); + return Flux.merge(flux, + Flux.fromArray(baseIndex).flatMap(index -> index.fuzzySearchTypes(searchTerm, typeFilter))); } } - + public Flux> fuzzySearchPackages(String searchTerm) { - Flux> flux = Flux.fromIterable(knownPackages.values()) - .publishOn(Schedulers.parallel()) + Flux> flux = Flux.fromIterable(knownPackages.values()).publishOn(Schedulers.parallel()) .flatMap(s -> Flux.fromIterable(s.get())) - .map(pkg -> Tuples.of(pkg, FuzzyMatcher.matchScore(searchTerm, pkg))) - .filter(t -> t.getT2() != 0.0); + .map(pkg -> Tuples.of(pkg, FuzzyMatcher.matchScore(searchTerm, pkg))).filter(t -> t.getT2() != 0.0); if (baseIndex == null) { return flux; } else { return Flux.merge(flux, Flux.fromArray(baseIndex).flatMap(index -> index.fuzzySearchPackages(searchTerm))); } } - + public Flux allSubtypesOf(IType type) { DotName name = DotName.createSimple(type.getFullyQualifiedName()); - Flux flux = Flux.fromIterable(index.keySet()) - .publishOn(Schedulers.parallel()) - .flatMap(file -> { - Optional optional = index.get(file).get(); - if (optional.isPresent()) { - return Flux.fromIterable(type.isInterface() ? optional.get().getAllKnownImplementors(name) : optional.get().getAllKnownSubclasses(name)) - .publishOn(Schedulers.parallel()) - .map(info -> createType(Tuples.of(file, info))); - } else { - return Flux.empty(); - } - }); + Flux flux = Flux.fromIterable(index.keySet()).publishOn(Schedulers.parallel()).flatMap(file -> { + Optional optional = index.get(file).get(); + if (optional.isPresent()) { + return Flux + .fromIterable(type.isInterface() ? optional.get().getAllKnownImplementors(name) + : optional.get().getAllKnownSubclasses(name)) + .publishOn(Schedulers.parallel()).map(info -> createType(Tuples.of(file, info))); + } else { + return Flux.empty(); + } + }); if (baseIndex == null) { return flux; } else { return Flux.merge(flux, Flux.fromArray(baseIndex).flatMap(index -> index.allSubtypesOf(type))); } } - + } diff --git a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/IClasspath.java b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/IClasspath.java index 81ef98d3a..a30663512 100644 --- a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/IClasspath.java +++ b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/IClasspath.java @@ -11,8 +11,12 @@ package org.springframework.ide.vscode.commons.java; import java.nio.file.Path; +import java.util.function.Predicate; import java.util.stream.Stream; +import reactor.core.publisher.Flux; +import reactor.util.function.Tuple2; + /** * Classpath for a Java artifact * @@ -21,7 +25,21 @@ import java.util.stream.Stream; * */ public interface IClasspath { + + String getName(); + + boolean exists(); + IType findType(String fqName); + + Flux> fuzzySearchTypes(String searchTerm, Predicate typeFilter); + + Flux> fuzzySearchPackages(String searchTerm); + + Flux allSubtypesOf(IType type); + + Path getOutputFolder(); + /** * Classpath entries paths * diff --git a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/IJavaProject.java b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/IJavaProject.java index 0e7740556..1b9631e3e 100644 --- a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/IJavaProject.java +++ b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/IJavaProject.java @@ -10,20 +10,25 @@ *******************************************************************************/ package org.springframework.ide.vscode.commons.java; -import java.util.function.Predicate; - -import reactor.core.publisher.Flux; -import reactor.util.function.Tuple2; +import org.springframework.ide.vscode.commons.javadoc.IJavadoc; public interface IJavaProject extends IJavaElement { - IType findType(String fqName); - - Flux> fuzzySearchTypes(String searchTerm, Predicate typeFilter); - - Flux> fuzzySearchPackages(String searchTerm); - - Flux allSubtypesOf(IType type); - IClasspath getClasspath(); + + @Override + default String getElementName() { + return getClasspath().getName(); + } + + @Override + default IJavadoc getJavaDoc() { + return null; + } + + @Override + default boolean exists() { + return getClasspath().exists(); + } + } diff --git a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/MavenCore.java b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/MavenCore.java index 18d5b06b1..c02c145d9 100644 --- a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/MavenCore.java +++ b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/MavenCore.java @@ -76,7 +76,6 @@ public class MavenCore { private static final String CLASSIFIER_TESTS = "tests"; private static final String CLASSIFIER_TESTSOURCES = "test-sources"; - public static final String JAVA_IO_TMPDIR = "java.io.tmpdir"; private static final String JAVA_HOME = "java.home"; private static final String JAVA_RUNTIME_VERSION = "java.runtime.version"; private static final String JAVA_BOOT_CLASS_PATH = "sun.boot.class.path"; @@ -336,18 +335,11 @@ public class MavenCore { } catch (MavenException e) { Log.log(e); } - return new File(getIndexFolder().toString(), jarFile.getName() + "-" + suffix + ".jdx"); + return new File(JandexIndex.getIndexFolder().toString(), jarFile.getName() + "-" + suffix + ".jdx"); } public JandexIndex getJavaIndexForJreLibs() { return javaCoreIndex.get(); } - public File getIndexFolder() { - File folder = new File(System.getProperty(JAVA_IO_TMPDIR), "jandex"); - if (!folder.isDirectory()) { - folder.mkdirs(); - } - return folder; - } } diff --git a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/MavenProjectFinderStrategy.java b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/MavenProjectFinderStrategy.java index e03d4122d..c925015dd 100644 --- a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/MavenProjectFinderStrategy.java +++ b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/MavenProjectFinderStrategy.java @@ -32,7 +32,13 @@ import com.google.common.cache.CacheBuilder; */ public class MavenProjectFinderStrategy implements IJavaProjectFinderStrategy { - public Cache cache = CacheBuilder.newBuilder().build(); + private Cache cache = CacheBuilder.newBuilder().build(); + + private MavenCore maven; + + public MavenProjectFinderStrategy(MavenCore maven) { + this.maven = maven; + } @Override public MavenJavaProject find(IDocument d) throws ExecutionException, URISyntaxException { @@ -46,7 +52,7 @@ public class MavenProjectFinderStrategy implements IJavaProjectFinderStrategy { File pomFile = FileUtils.findFile(file, MavenCore.POM_XML); if (pomFile != null) { return cache.get(pomFile, () -> { - return new MavenJavaProject(pomFile); + return new MavenJavaProject(maven, pomFile); }); } } diff --git a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenJavaProject.java b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenJavaProject.java index 6f496f4f8..549312c16 100644 --- a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenJavaProject.java +++ b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenJavaProject.java @@ -11,18 +11,10 @@ package org.springframework.ide.vscode.commons.maven.java; import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.function.Predicate; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.java.IType; -import org.springframework.ide.vscode.commons.javadoc.IJavadoc; import org.springframework.ide.vscode.commons.maven.MavenCore; -import reactor.core.publisher.Flux; -import reactor.util.function.Tuple2; - /** * Wrapper for Maven Core project * @@ -32,46 +24,9 @@ import reactor.util.function.Tuple2; public class MavenJavaProject implements IJavaProject { private MavenProjectClasspath classpath; - private MavenCore maven; - public MavenJavaProject(File pom) { - this.maven = MavenCore.getDefault(); - this.classpath = new MavenProjectClasspath(pom, maven); - } - - @Override - public String getElementName() { - return classpath.getName(); - } - - @Override - public IJavadoc getJavaDoc() { - return null; - } - - @Override - public boolean exists() { - return classpath.exists(); - } - - @Override - public IType findType(String fqName) { - return classpath.findType(fqName); - } - - @Override - public Flux> fuzzySearchTypes(String searchTerm, Predicate typeFilter) { - return classpath.fuzzySearchType(searchTerm, typeFilter); - } - - @Override - public Flux> fuzzySearchPackages(String searchTerm) { - return classpath.fuzzySearchPackages(searchTerm); - } - - @Override - public Flux allSubtypesOf(IType type) { - return classpath.allSubtypesOf(type); + public MavenJavaProject(MavenCore maven, File pom) { + this.classpath = new MavenProjectClasspath(maven, pom); } @Override @@ -79,8 +34,4 @@ public class MavenJavaProject implements IJavaProject { return classpath; } - public Path getOutputFolder() { - return Paths.get(new File(classpath.getOutputFolder()).toURI()); - } - } diff --git a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectClasspath.java b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectClasspath.java index 0147bbde2..07400d374 100644 --- a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectClasspath.java +++ b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectClasspath.java @@ -19,17 +19,14 @@ import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.function.Predicate; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.maven.artifact.Artifact; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.DirectoryScanner; +import org.springframework.ide.vscode.commons.jandex.JandexClasspath; import org.springframework.ide.vscode.commons.jandex.JandexIndex; -import org.springframework.ide.vscode.commons.java.IClasspath; import org.springframework.ide.vscode.commons.java.IJavadocProvider; -import org.springframework.ide.vscode.commons.java.IType; import org.springframework.ide.vscode.commons.java.parser.ParserJavadocProvider; import org.springframework.ide.vscode.commons.javadoc.HtmlJavadocProvider; import org.springframework.ide.vscode.commons.javadoc.SourceUrlProviderFromSourceContainer; @@ -40,58 +37,30 @@ import org.springframework.ide.vscode.commons.util.Log; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; -import reactor.core.publisher.Flux; -import reactor.util.function.Tuple2; - /** * Classpath for a maven project * * @author Alex Boyko * */ -public class MavenProjectClasspath implements IClasspath { - - public static JavadocProviderTypes providerType = JavadocProviderTypes.HTML; - - public enum JavadocProviderTypes { - JAVA_PARSER, -// ROASTER, - HTML - } +public class MavenProjectClasspath extends JandexClasspath { private MavenCore maven; private File pom; private Supplier projectSupplier; - private Supplier javaIndex; - public MavenProjectClasspath(File pom) { - this(pom, MavenCore.getDefault()); - } - - MavenProjectClasspath(File pom, MavenCore maven) { + MavenProjectClasspath(MavenCore maven, File pom) { + super(); this.maven = maven; this.pom = pom; this.projectSupplier = Suppliers.memoize(() -> createMavenProject()); - this.javaIndex = Suppliers.memoize(() -> { - Stream classpathEntries = Stream.empty(); - try { - classpathEntries = getClasspathEntries(); - } catch (Exception e) { - Log.log(e); - } - return new JandexIndex(classpathEntries.map(p -> p.toFile()).collect(Collectors.toList()), jarFile -> findIndexFile(jarFile), classpathResource -> { - switch (providerType) { - case JAVA_PARSER: - return createParserJavadocProvider(classpathResource); -// case ROASTER: -// return createRoasterJavadocProvider(classpathResource); - default: - return createHtmlJavdocProvider(classpathResource); - } - }, maven.getJavaIndexForJreLibs()); - }); } + @Override + protected JandexIndex[] getBaseIndices() { + return new JandexIndex[] { maven.getJavaIndexForJreLibs() }; + } + private final MavenProject createMavenProject() { try { // Read with resolved dependencies @@ -139,29 +108,9 @@ public class MavenProjectClasspath implements IClasspath { } } - public String getOutputFolder() { + public Path getOutputFolder() { MavenProject project = projectSupplier.get(); - return project == null ? null : project.getBuild().getOutputDirectory(); - } - - public IType findType(String fqName) { - return javaIndex.get().findType(fqName); - } - - public Flux> fuzzySearchType(String searchTerm, Predicate typeFilter) { - return javaIndex.get().fuzzySearchTypes(searchTerm, typeFilter); - } - - public Flux> fuzzySearchPackages(String searchTerm) { - return javaIndex.get().fuzzySearchPackages(searchTerm); - } - - public Flux allSubtypesOf(IType type) { - return javaIndex.get().allSubtypesOf(type); - } - - private File findIndexFile(File jarFile) { - return new File(maven.getIndexFolder().toString(), jarFile.getName() + "-" + jarFile.lastModified() + ".jdx"); + return project == null ? null : new File(project.getBuild().getOutputDirectory()).toPath(); } private Optional getArtifactFromJarFile(File file) throws MavenException { @@ -226,7 +175,7 @@ public class MavenProjectClasspath implements IClasspath { // } // } - private IJavadocProvider createParserJavadocProvider(File classpathResource) { + protected IJavadocProvider createParserJavadocProvider(File classpathResource) { MavenProject project = projectSupplier.get(); if (project == null) { return null; @@ -263,7 +212,7 @@ public class MavenProjectClasspath implements IClasspath { } } - private IJavadocProvider createHtmlJavdocProvider(File classpathResource) { + protected IJavadocProvider createHtmlJavdocProvider(File classpathResource) { MavenProject project = projectSupplier.get(); if (project == null) { return null; diff --git a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/FileClasspath.java b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/FileClasspath.java index c71005ded..2b2157ebe 100644 --- a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/FileClasspath.java +++ b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/FileClasspath.java @@ -10,12 +10,18 @@ *******************************************************************************/ package org.springframework.ide.vscode.commons.maven.java.classpathfile; +import java.nio.file.Files; import java.nio.file.Path; +import java.util.function.Predicate; import java.util.stream.Stream; import org.springframework.ide.vscode.commons.java.IClasspath; +import org.springframework.ide.vscode.commons.java.IType; import org.springframework.ide.vscode.commons.maven.MavenCore; +import reactor.core.publisher.Flux; +import reactor.util.function.Tuple2; + /** * Classpath for a project containing classpath text file * @@ -41,5 +47,41 @@ public class FileClasspath implements IClasspath { public Stream getClasspathResources() { return Stream.empty(); } + + @Override + public String getName() { + return classpathFilePath.toFile().getParentFile().getName(); + } + + @Override + public boolean exists() { + return Files.exists(classpathFilePath); + } + + @Override + public IType findType(String fqName) { + //TODO: implement + return null; + } + + @Override + public Flux> fuzzySearchTypes(String searchTerm, Predicate typeFilter) { + return Flux.empty(); + } + + @Override + public Flux> fuzzySearchPackages(String searchTerm) { + return Flux.empty(); + } + + @Override + public Flux allSubtypesOf(IType type) { + return Flux.empty(); + } + + @Override + public Path getOutputFolder() { + return null; + } } diff --git a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/JavaProjectWithClasspathFile.java b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/JavaProjectWithClasspathFile.java index 90725959d..808b80a9d 100644 --- a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/JavaProjectWithClasspathFile.java +++ b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/classpathfile/JavaProjectWithClasspathFile.java @@ -12,15 +12,9 @@ package org.springframework.ide.vscode.commons.maven.java.classpathfile; import java.io.File; import java.nio.file.Paths; -import java.util.function.Predicate; import org.springframework.ide.vscode.commons.java.IClasspath; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.java.IType; -import org.springframework.ide.vscode.commons.javadoc.IJavadoc; - -import reactor.core.publisher.Flux; -import reactor.util.function.Tuple2; /** * Java project that contains classpath text file @@ -38,42 +32,6 @@ public class JavaProjectWithClasspathFile implements IJavaProject { this.classpath = new FileClasspath(Paths.get(cpFile.toURI())); } - @Override - public String getElementName() { - return cpFile.getParentFile().getName(); - } - - @Override - public IJavadoc getJavaDoc() { - return null; - } - - @Override - public boolean exists() { - return cpFile.exists(); - } - - @Override - public IType findType(String fqName) { - //TODO: implement - return null; - } - - @Override - public Flux> fuzzySearchTypes(String searchTerm, Predicate typeFilter) { - return Flux.empty(); - } - - @Override - public Flux> fuzzySearchPackages(String searchTerm) { - return Flux.empty(); - } - - @Override - public Flux allSubtypesOf(IType type) { - return Flux.empty(); - } - @Override public IClasspath getClasspath() { return classpath; diff --git a/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/HtmlJavadocTest.java b/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/HtmlJavadocTest.java index 5995db438..ffcd2e6ba 100644 --- a/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/HtmlJavadocTest.java +++ b/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/HtmlJavadocTest.java @@ -21,13 +21,13 @@ import java.util.stream.Stream; import org.junit.Assume; import org.junit.Test; +import org.springframework.ide.vscode.commons.jandex.JandexClasspath; +import org.springframework.ide.vscode.commons.jandex.JandexClasspath.JavadocProviderTypes; import org.springframework.ide.vscode.commons.java.IField; import org.springframework.ide.vscode.commons.java.IMethod; import org.springframework.ide.vscode.commons.java.IType; import org.springframework.ide.vscode.commons.javadoc.IJavadoc; import org.springframework.ide.vscode.commons.maven.java.MavenJavaProject; -import org.springframework.ide.vscode.commons.maven.java.MavenProjectClasspath; -import org.springframework.ide.vscode.commons.maven.java.MavenProjectClasspath.JavadocProviderTypes; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; @@ -37,10 +37,10 @@ public class HtmlJavadocTest { private static Supplier projectSupplier = Suppliers.memoize(() -> { Path testProjectPath; try { - MavenProjectClasspath.providerType = JavadocProviderTypes.HTML; + JandexClasspath.providerType = JavadocProviderTypes.HTML; testProjectPath = Paths.get(HtmlJavadocTest.class.getResource("/gs-rest-service-cors-boot-1.4.1-with-classpath-file").toURI()); 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()); } catch (Exception e) { return null; } @@ -52,7 +52,7 @@ public class HtmlJavadocTest { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("java.util.Map"); + IType type = project.getClasspath().findType("java.util.Map"); assertNotNull(type); String expected = String.join("\n", "
An object that maps keys to values. A map cannot contain duplicate keys;", @@ -68,7 +68,7 @@ public class HtmlJavadocTest { Assume.assumeTrue(javaVersionHigherThan(6)); MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("java.util.ArrayList"); + IType type = project.getClasspath().findType("java.util.ArrayList"); assertNotNull(type); IMethod method = type.getMethod("", Stream.empty()); assertNotNull(method); @@ -86,7 +86,7 @@ public class HtmlJavadocTest { public void html_testEmptyJavadocClass() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("hello.Application"); + IType type = project.getClasspath().findType("hello.Application"); assertNotNull(type); assertNull(type.getJavaDoc()); } @@ -95,7 +95,7 @@ public class HtmlJavadocTest { public void html_testFieldAndMethodJavadocForJar() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("org.springframework.boot.SpringApplication"); + IType type = project.getClasspath().findType("org.springframework.boot.SpringApplication"); assertNotNull(type); IField field = type.getField("BANNER_LOCATION_PROPERTY_VALUE"); @@ -135,7 +135,7 @@ public class HtmlJavadocTest { public void html_testInnerClassJavadocForOutputFolder() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("hello.Greeting$TestInnerClass"); + IType type = project.getClasspath().findType("hello.Greeting$TestInnerClass"); assertNotNull(type); IJavadoc javaDoc = type.getJavaDoc(); assertNotNull(javaDoc); @@ -168,7 +168,7 @@ public class HtmlJavadocTest { public void html_testInnerClassLevel2_JavadocForOutputFolder() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("hello.Greeting$TestInnerClass$TestInnerClassLevel2"); + IType type = project.getClasspath().findType("hello.Greeting$TestInnerClass$TestInnerClassLevel2"); assertNotNull(type); IJavadoc javaDoc = type.getJavaDoc(); assertNotNull(javaDoc); @@ -200,7 +200,7 @@ public class HtmlJavadocTest { @Test public void html_testJavadocOutputFolder() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("hello.Greeting"); + IType type = project.getClasspath().findType("hello.Greeting"); assertNotNull(type); String expected = "
Comment for Greeting class
"; @@ -237,7 +237,7 @@ public class HtmlJavadocTest { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("java.util.ArrayList"); + IType type = project.getClasspath().findType("java.util.ArrayList"); assertNotNull(type); IMethod method = type.getMethod("size", Stream.empty()); assertNotNull(method); @@ -258,7 +258,7 @@ public class HtmlJavadocTest { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("java.util.Map$Entry"); + IType type = project.getClasspath().findType("java.util.Map$Entry"); assertNotNull(type); String expected = String.join("\n", "
A map entry (key-value pair). The Map.entrySet method returns", @@ -272,7 +272,7 @@ public class HtmlJavadocTest { public void html_testNoJavadocClass() throws Exception { MavenJavaProject project = projectSupplier.get();; - IType type = project.findType("hello.GreetingController"); + IType type = project.getClasspath().findType("hello.GreetingController"); assertNotNull(type); assertNull(type.getJavaDoc()); } @@ -281,7 +281,7 @@ public class HtmlJavadocTest { public void html_testNoJavadocField() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("hello.GreetingController"); + IType type = project.getClasspath().findType("hello.GreetingController"); assertNotNull(type); IField field = type.getField("template"); assertNotNull(field); @@ -302,7 +302,7 @@ public class HtmlJavadocTest { public void html_testNoJavadocMethod() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("hello.Application"); + IType type = project.getClasspath().findType("hello.Application"); assertNotNull(type); IMethod method = type.getMethod("corsConfigurer", Stream.empty()); assertNotNull(method); diff --git a/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java b/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java index d443adb4f..0fe710e24 100644 --- a/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java +++ b/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java @@ -45,7 +45,7 @@ public class JavaIndexTest { public MavenJavaProject load(String projectName) throws Exception { Path testProjectPath = Paths.get(DependencyTreeTest.class.getResource("/" + projectName).toURI()); 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()); } }); @@ -83,28 +83,28 @@ public class JavaIndexTest { @Test public void findClassInJar() throws Exception { MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file"); - IType type = project.findType("org.springframework.test.web.client.ExpectedCount"); + IType type = project.getClasspath().findType("org.springframework.test.web.client.ExpectedCount"); assertNotNull(type); } @Test public void findClassInOutputFolder() throws Exception { MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file"); - IType type = project.findType("hello.Greeting"); + IType type = project.getClasspath().findType("hello.Greeting"); assertNotNull(type); } @Test public void classNotFound() throws Exception { MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file"); - IType type = project.findType("hello.NonExistentClass"); + IType type = project.getClasspath().findType("hello.NonExistentClass"); assertNull(type); } @Test public void voidMethodNoParams() throws Exception { MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file"); - IType type = project.findType("java.util.ArrayList"); + IType type = project.getClasspath().findType("java.util.ArrayList"); assertNotNull(type); IMethod m = type.getMethod("clear", Stream.empty()); assertEquals("clear", m.getElementName()); @@ -115,7 +115,7 @@ public class JavaIndexTest { @Test public void voidConstructor() throws Exception { MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file"); - IType type = project.findType("java.util.ArrayList"); + IType type = project.getClasspath().findType("java.util.ArrayList"); assertNotNull(type); IMethod m = type.getMethod("", Stream.empty()); assertEquals(type.getElementName(), m.getElementName()); @@ -126,7 +126,7 @@ public class JavaIndexTest { @Test public void constructorMethodWithParams() throws Exception { MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file"); - IType type = project.findType("java.util.ArrayList"); + IType type = project.getClasspath().findType("java.util.ArrayList"); assertNotNull(type); IMethod m = type.getMethod("", Stream.of(IPrimitiveType.INT)); assertEquals(m.getDeclaringType().getElementName(), m.getElementName()); diff --git a/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/SourceJavadocTest.java b/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/SourceJavadocTest.java index f196b9d37..cffcb6301 100644 --- a/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/SourceJavadocTest.java +++ b/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/SourceJavadocTest.java @@ -19,12 +19,12 @@ import java.nio.file.Paths; import java.util.stream.Stream; import org.junit.Test; +import org.springframework.ide.vscode.commons.jandex.JandexClasspath; +import org.springframework.ide.vscode.commons.jandex.JandexClasspath.JavadocProviderTypes; import org.springframework.ide.vscode.commons.java.IField; import org.springframework.ide.vscode.commons.java.IMethod; import org.springframework.ide.vscode.commons.java.IType; import org.springframework.ide.vscode.commons.maven.java.MavenJavaProject; -import org.springframework.ide.vscode.commons.maven.java.MavenProjectClasspath; -import org.springframework.ide.vscode.commons.maven.java.MavenProjectClasspath.JavadocProviderTypes; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; @@ -34,9 +34,9 @@ public class SourceJavadocTest { private static Supplier projectSupplier = Suppliers.memoize(() -> { Path testProjectPath; try { - MavenProjectClasspath.providerType = JavadocProviderTypes.JAVA_PARSER; + JandexClasspath.providerType = JavadocProviderTypes.JAVA_PARSER; testProjectPath = Paths.get(SourceJavadocTest.class.getResource("/gs-rest-service-cors-boot-1.4.1-with-classpath-file").toURI()); - return new MavenJavaProject(testProjectPath.resolve(MavenCore.POM_XML).toFile()); + return new MavenJavaProject(MavenCore.getDefault(), testProjectPath.resolve(MavenCore.POM_XML).toFile()); } catch (Exception e) { return null; } @@ -46,7 +46,7 @@ public class SourceJavadocTest { public void parser_testClassJavadocForJar() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener"); + IType type = project.getClasspath().findType("org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener"); assertNotNull(type); String expected = String.join("\n", "/**", @@ -54,7 +54,7 @@ public class SourceJavadocTest { ); assertEquals(expected, type.getJavaDoc().raw().trim().substring(0, expected.length())); - type = project.findType("org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener$LiquibasePresent"); + type = project.getClasspath().findType("org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener$LiquibasePresent"); assertNotNull(type); expected = String.join("\n", "/**", @@ -67,7 +67,7 @@ public class SourceJavadocTest { @Test public void parser_testClassJavadocForOutputFolder() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("hello.Greeting"); + IType type = project.getClasspath().findType("hello.Greeting"); assertNotNull(type); String expected = String.join("\n", @@ -100,7 +100,7 @@ public class SourceJavadocTest { public void parser_testFieldAndMethodJavadocForJar() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("org.springframework.boot.SpringApplication"); + IType type = project.getClasspath().findType("org.springframework.boot.SpringApplication"); assertNotNull(type); IField field = type.getField("BANNER_LOCATION_PROPERTY_VALUE"); @@ -124,7 +124,7 @@ public class SourceJavadocTest { @Test public void parser_testInnerClassJavadocForOutputFolder() throws Exception { MavenJavaProject project = projectSupplier.get(); - IType type = project.findType("hello.Greeting$TestInnerClass"); + IType type = project.getClasspath().findType("hello.Greeting$TestInnerClass"); assertNotNull(type); assertEquals("/**\n * Comment for inner class\n */", type.getJavaDoc().raw().trim()); diff --git a/vscode-extensions/commons/pom.xml b/vscode-extensions/commons/pom.xml index 43dbed3a4..403e59596 100644 --- a/vscode-extensions/commons/pom.xml +++ b/vscode-extensions/commons/pom.xml @@ -18,8 +18,7 @@ java-properties commons-cf commons-maven - - + commons-gradle diff --git a/vscode-extensions/vscode-boot-java/pom.xml b/vscode-extensions/vscode-boot-java/pom.xml index 4457b0e29..bf2fdca88 100644 --- a/vscode-extensions/vscode-boot-java/pom.xml +++ b/vscode-extensions/vscode-boot-java/pom.xml @@ -38,6 +38,11 @@ commons-maven ${project.version} + + org.springframework.ide.vscode + commons-gradle + ${project.version} + org.springframework.ide.vscode commons-language-server diff --git a/vscode-extensions/vscode-boot-java/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java b/vscode-extensions/vscode-boot-java/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java index 59e1abd98..79efacdd4 100644 --- a/vscode-extensions/vscode-boot-java/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java +++ b/vscode-extensions/vscode-boot-java/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java @@ -15,6 +15,8 @@ import org.eclipse.lsp4j.ServerCapabilities; import org.eclipse.lsp4j.TextDocumentSyncKind; import org.springframework.ide.vscode.boot.java.completions.BootJavaCompletionEngine; import org.springframework.ide.vscode.boot.java.completions.BootJavaReconcileEngine; +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.java.DefaultJavaProjectFinder; @@ -24,6 +26,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.TextDocument; @@ -35,7 +38,8 @@ import org.springframework.ide.vscode.commons.util.text.TextDocument; public class BootJavaLanguageServer 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() }); diff --git a/vscode-extensions/vscode-boot-java/src/test/java/org/springframework/ide/vscode/project/harness/ProjectsHarness.java b/vscode-extensions/vscode-boot-java/src/test/java/org/springframework/ide/vscode/project/harness/ProjectsHarness.java index 7f56c7744..f7f95cf19 100644 --- a/vscode-extensions/vscode-boot-java/src/test/java/org/springframework/ide/vscode/project/harness/ProjectsHarness.java +++ b/vscode-extensions/vscode-boot-java/src/test/java/org/springframework/ide/vscode/project/harness/ProjectsHarness.java @@ -51,7 +51,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()); diff --git a/vscode-extensions/vscode-boot-properties/pom.xml b/vscode-extensions/vscode-boot-properties/pom.xml index 5c8aff563..badc4a90a 100644 --- a/vscode-extensions/vscode-boot-properties/pom.xml +++ b/vscode-extensions/vscode-boot-properties/pom.xml @@ -53,6 +53,11 @@ commons-maven ${project.version} + + org.springframework.ide.vscode + commons-gradle + ${project.version} + org.springframework.ide.vscode commons-language-server diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java index dd3132a00..89b3ebe6e 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java @@ -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() }); diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/ClassReferenceProvider.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/ClassReferenceProvider.java index 7a25628b2..2618837bc 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/ClassReferenceProvider.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/ClassReferenceProvider.java @@ -131,11 +131,11 @@ public class ClassReferenceProvider extends CachingValueProvider { @Override protected Flux 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 allSubclasses = javaProject + Set 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)) diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java index 6434fb19b..0e379d645 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java @@ -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 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) { diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/LoggerNameProvider.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/LoggerNameProvider.java index e3fd3ee6e..2f9886766 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/LoggerNameProvider.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/LoggerNameProvider.java @@ -37,10 +37,10 @@ public class LoggerNameProvider extends CachingValueProvider { @Override protected Flux 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())) ) diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/hints/StsValueHint.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/hints/StsValueHint.java index c3f088792..8845e0013 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/hints/StsValueHint.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/hints/StsValueHint.java @@ -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); } diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/types/TypeUtil.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/types/TypeUtil.java index 0a5377962..07bb5c158 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/types/TypeUtil.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/metadata/types/TypeUtil.java @@ -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); diff --git a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/metadata/TypeUtilTest.java b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/metadata/TypeUtilTest.java index 139e550e6..40f29fe16 100644 --- a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/metadata/TypeUtilTest.java +++ b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/metadata/TypeUtilTest.java @@ -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"); diff --git a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java index 5ea78f46f..0c6320e80 100644 --- a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java +++ b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java @@ -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", 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", 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", null, "Map with colors in its keys"); data("foo.color-data", "java.util.Map", 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", null, "map of atomic data"); data("objectmap", "java.util.Map", 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", null, "Ooh! nice colors!"); diff --git a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java index 860baf75d..f42afb166 100644 --- a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java +++ b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java @@ -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"); diff --git a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/project/harness/ProjectsHarness.java b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/project/harness/ProjectsHarness.java index 56fda5153..bde1c3f47 100644 --- a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/project/harness/ProjectsHarness.java +++ b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/project/harness/ProjectsHarness.java @@ -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());