diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporter.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporter.java index d8f332613c..f7a6a88b10 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporter.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporter.java @@ -816,9 +816,13 @@ public String getProjectUri() { private class GradleCompatibilityInfo { + @SuppressWarnings("unused") private String projectUri; + @SuppressWarnings("unused") private String message; + @SuppressWarnings("unused") private String highestJavaVersion; + @SuppressWarnings("unused") private String recommendedGradleVersion; public GradleCompatibilityInfo(String projectPath, String message, String highestJavaVersion, String recommendedGradleVersion) { @@ -830,8 +834,11 @@ public GradleCompatibilityInfo(String projectPath, String message, String highes } private class UpgradeGradleWrapperInfo { + @SuppressWarnings("unused") private String projectUri; + @SuppressWarnings("unused") private String message; + @SuppressWarnings("unused") private String recommendedGradleVersion; public UpgradeGradleWrapperInfo(String projectUri, String message, String recommendedGradleVersion) { diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/ScalaGradleSupport.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/ScalaGradleSupport.java index 52114ab9aa..22036c9a79 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/ScalaGradleSupport.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/ScalaGradleSupport.java @@ -17,7 +17,6 @@ import java.io.File; import java.io.IOException; import java.io.StringReader; -import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -26,6 +25,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -55,6 +55,8 @@ import org.gradle.tooling.GradleConnector; import org.gradle.tooling.ProjectConnection; +import com.google.common.collect.ImmutableSet; + /** * @author snjeza * @@ -62,10 +64,9 @@ public class ScalaGradleSupport { public static final Path CONTAINER_PATH = new Path("org.eclipse.buildship.core.gradleclasspathcontainer"); - public static String[] EXCLUSIONS_PATTERNS = { "**" }; - // Gradle Tooling API removes several scala libraries and adds the Scala builder and container that aren't recognized by Java LS. // See https://github.com/gradle/gradle/blob/b3c5d40e82439da4627b38b4ced93121e551b0eb/platforms/ide/ide-plugins/src/main/java/org/gradle/plugins/ide/eclipse/EclipsePlugin.java#L375-L377 + public static final Set SCALA_LIBRARIES = ImmutableSet.of("scala-library", "scala-swing", "scala-dbc"); public void cleanScalaProjects(IProgressMonitor monitor) { PreferenceManager preferenceManager = JavaLanguageServerPlugin.getPreferencesManager(); if (preferenceManager == null || !preferenceManager.getPreferences().isScalaSupportEnabled()) { @@ -149,16 +150,7 @@ private void checkSourcePaths(IProject project, IProgressMonitor monitor) { if (Boolean.getBoolean("jdt.ls.debug")) { JavaLanguageServerPlugin.logException(e); } - } finally { - if (initScript != null) { - try { - Files.delete(initScript.toPath()); - } catch (IOException e) { - JavaLanguageServerPlugin.logException(e); - } - } } - return; } private File getInitScript() throws IOException { @@ -258,39 +250,23 @@ private static void configureClasspath(IJavaProject javaProject, List to } } // @formatter:off - IClasspathEntry[] newClasspath = Stream.concat(Arrays - .stream(classpath), entries.stream()) - .distinct() - .toArray(IClasspathEntry[]::new); - // @formatter:on - for (int i = 0; i < newClasspath.length; i++) { - IClasspathEntry entry = newClasspath[i]; - if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) { - Optional optional = resources.stream().filter(r -> Objects.equals(entry.getPath().removeFirstSegments(1), new Path(r).makeRelativeTo(javaProject.getProject().getLocation()))).findFirst(); - if (optional.isPresent()) { - IPath[] exclusions = entry.getExclusionPatterns(); - if (exclusions == null) { - exclusions = new IPath[0]; - } - List currentExclusions = new ArrayList<>(Arrays.asList(exclusions)); - for (String ext : EXCLUSIONS_PATTERNS) { - IPath newPath = new Path(ext); - boolean exists = currentExclusions.stream().anyMatch(existingPath -> existingPath.toString().equals(ext)); - if (!exists) { - currentExclusions.add(newPath); - } - } - IClasspathEntry newEntry = JavaCore.newSourceEntry(entry.getPath(), entry.getInclusionPatterns(), currentExclusions.toArray(new IPath[0]), entry.getOutputLocation(), entry.getExtraAttributes()); - newClasspath[i] = newEntry; - } - } - } + IClasspathEntry[] newClasspath = Stream.concat(Arrays + .stream(classpath), entries.stream()) + .distinct() + .toArray(IClasspathEntry[]::new); + // @formatter:on javaProject.setRawClasspath(newClasspath, monitor); } private static List getMissingPaths(IJavaProject javaProject, List paths) { List toAdd = new ArrayList<>(); - for (String path : paths) { + // @formatter:off + List scalaLibs = paths + .stream() + .filter(s -> SCALA_LIBRARIES.stream().anyMatch(s::contains)) + .collect(Collectors.toList()); + // @formatter:on + for (String path : scalaLibs) { try { IClasspathContainer container = JavaCore.getClasspathContainer(CONTAINER_PATH, javaProject); if (container != null) { diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/scala/app/src/main/resources/.readme b/org.eclipse.jdt.ls.tests/projects/gradle/scala/app/src/main/resources/.readme new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporterTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporterTest.java index 697bcb6b89..631bebd000 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporterTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporterTest.java @@ -866,6 +866,32 @@ public void testScalaSupportEnabled() throws Exception { } } + // https://github.com/redhat-developer/vscode-java/issues/4393#top + @Test + public void testResources() throws Exception { + boolean oldScalaSupported = this.preferences.isScalaSupportEnabled(); + try { + this.preferences.setScalaSupportEnabled(true); + importGradleProject("scala"); + waitForOtherLangs(); + IProject project = ProjectUtils.getProject("app"); + assertTrue(ProjectUtils.isGradleProject(project)); + assertNoErrors(project); + IJavaProject javaProject = JavaCore.create(project); + IClasspathEntry[] classpath = javaProject.getRawClasspath(); + for (IClasspathEntry entry : classpath) { + if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE && "/app/src/main/resources".equals(entry.getPath().toString())) { + IPath[] exclusions = entry.getExclusionPatterns(); + if (exclusions != null && exclusions.length > 0) { + fail("src/main/resources is excluded from classpath"); + } + } + } + } finally { + this.preferences.setScalaSupportEnabled(oldScalaSupported); + } + } + @Test public void testScalaSupportDisabled() throws Exception { boolean oldScalaSupported = this.preferences.isScalaSupportEnabled();