From bcefc614f7875df96326ca10287665b645476993 Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Wed, 27 May 2020 14:53:42 +0300 Subject: [PATCH 1/4] Create extension point for IBuildSupport. Add extension with build support. Implement build support extension point. Signed-off-by: Siarhei Leanavets --- org.eclipse.jdt.ls.core/plugin.xml | 25 +++++ .../org.eclipse.jdt.ls.core.buildSupport.exsd | 101 ++++++++++++++++++ .../managers/DefaultProjectBuildSupport.java | 9 +- .../internal/managers/GradleBuildSupport.java | 10 ++ .../core/internal/managers/IBuildSupport.java | 7 ++ .../internal/managers/MavenBuildSupport.java | 8 ++ .../managers/StandardProjectsManager.java | 24 ++++- 7 files changed, 173 insertions(+), 11 deletions(-) create mode 100644 org.eclipse.jdt.ls.core/schema/org.eclipse.jdt.ls.core.buildSupport.exsd diff --git a/org.eclipse.jdt.ls.core/plugin.xml b/org.eclipse.jdt.ls.core/plugin.xml index 9188d895a8..6a152bf046 100644 --- a/org.eclipse.jdt.ls.core/plugin.xml +++ b/org.eclipse.jdt.ls.core/plugin.xml @@ -4,6 +4,7 @@ + @@ -115,4 +116,28 @@ order="1500" class="org.eclipse.jdt.ls.core.internal.managers.InvisibleProjectImporter" /> + + + + + + + diff --git a/org.eclipse.jdt.ls.core/schema/org.eclipse.jdt.ls.core.buildSupport.exsd b/org.eclipse.jdt.ls.core/schema/org.eclipse.jdt.ls.core.buildSupport.exsd new file mode 100644 index 0000000000..d69bb15f3d --- /dev/null +++ b/org.eclipse.jdt.ls.core/schema/org.eclipse.jdt.ls.core.buildSupport.exsd @@ -0,0 +1,101 @@ + + + + + + + + + This extension point represents different kinds of project build supporters for the JDT LS. +Each extension must implement <code>org.eclipse.jdt.ls.core.internal.managers.IBuildSupport</code>. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The following is an example of a language server content provider extension: + +<pre> + <extension + id="buildSupport" + point="org.eclipse.jdt.ls.core.buildSupport"> + <buildSupport + id="someBuildSupport" + order="200" + class="com.example.SomeBuildSupport" /> + </extension> +</pre> + + + + + + + diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/DefaultProjectBuildSupport.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/DefaultProjectBuildSupport.java index c3cb493683..1690fa02c2 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/DefaultProjectBuildSupport.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/DefaultProjectBuildSupport.java @@ -13,18 +13,13 @@ package org.eclipse.jdt.ls.core.internal.managers; import org.eclipse.core.resources.IProject; +import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; public class DefaultProjectBuildSupport extends EclipseBuildSupport implements IBuildSupport { - private ProjectsManager projectManager; - - public DefaultProjectBuildSupport(ProjectsManager projectManager) { - this.projectManager = projectManager; - } - @Override public boolean applies(IProject project) { - return projectManager.getDefaultProject().equals(project); + return JavaLanguageServerPlugin.getProjectsManager().getDefaultProject().equals(project); } } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java index c4d15b1341..639127d6fb 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java @@ -14,6 +14,8 @@ import java.io.File; import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; import java.util.Optional; import org.eclipse.buildship.core.BuildConfiguration; @@ -45,6 +47,8 @@ public class GradleBuildSupport implements IBuildSupport { public static final String GRADLE_SUFFIX = ".gradle"; public static final String GRADLE_PROPERTIES = "gradle.properties"; + public static final String GRADLE_SUFFIX_PATTERN = "**/*.gradle"; + public static final String GRADLE_PROPERTIES_PATTERN = "**/gradle.properties"; @Override public boolean applies(IProject project) { @@ -131,4 +135,10 @@ public static void saveModels() { public ILaunchConfiguration getLaunchConfiguration(IJavaProject javaProject, String scope) throws CoreException { return new JavaApplicationLaunchConfiguration(javaProject.getProject(), scope, GradleClasspathProvider.ID); } + + @Override + public List getBasicWatchers() { + return Arrays.asList(GRADLE_SUFFIX_PATTERN, GRADLE_PROPERTIES_PATTERN); + } + } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/IBuildSupport.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/IBuildSupport.java index 25491fdbb0..fcabf47be8 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/IBuildSupport.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/IBuildSupport.java @@ -12,6 +12,9 @@ *******************************************************************************/ package org.eclipse.jdt.ls.core.internal.managers; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; @@ -109,4 +112,8 @@ default ILaunchConfiguration getLaunchConfiguration(IJavaProject javaProject, St return new JavaApplicationLaunchConfiguration(javaProject.getProject(), scope, null); } + default List getBasicWatchers() { + return new ArrayList<>(); + } + } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupport.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupport.java index 255fdffaa8..91d32bc473 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupport.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupport.java @@ -13,6 +13,7 @@ package org.eclipse.jdt.ls.core.internal.managers; import java.nio.file.Path; +import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; @@ -57,6 +58,7 @@ public class MavenBuildSupport implements IBuildSupport { private static final int MAX_TIME_MILLIS = 3000; + private static final String POM_FILE_PATTERN = "**/pom.xml"; private static Cache downloadRequestsCache = CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite(1, TimeUnit.HOURS).build(); private IProjectConfigurationManager configurationManager; @@ -185,4 +187,10 @@ public void discoverSource(IClassFile classFile, IProgressMonitor monitor) throw public ILaunchConfiguration getLaunchConfiguration(IJavaProject javaProject, String scope) throws CoreException { return new JavaApplicationLaunchConfiguration(javaProject.getProject(), scope, MavenRuntimeClasspathProvider.MAVEN_CLASSPATH_PROVIDER); } + + @Override + public List getBasicWatchers() { + return Arrays.asList(POM_FILE_PATTERN); + } + } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java index af0ccac75d..2def5423b3 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java @@ -28,8 +28,10 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.TreeMap; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -42,11 +44,14 @@ import org.eclipse.core.resources.ISaveContext; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.Job; @@ -55,6 +60,7 @@ import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ls.core.internal.ActionableNotification; +import org.eclipse.jdt.ls.core.internal.IConstants; import org.eclipse.jdt.ls.core.internal.JDTUtils; import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; import org.eclipse.jdt.ls.core.internal.JobHelpers; @@ -72,14 +78,12 @@ import org.eclipse.lsp4j.WatchKind; public class StandardProjectsManager extends ProjectsManager { + private static final String BUILD_SUPPORT_EXTENSION_POINT_ID = "buildSupport"; private static final Set watchers = new LinkedHashSet<>(); private PreferenceManager preferenceManager; //@formatter:off private static final List basicWatchers = Arrays.asList( "**/*.java", - "**/pom.xml", - "**/*.gradle", - "**/gradle.properties", "**/.project", "**/.classpath", "**/.settings/*.prefs", @@ -273,7 +277,18 @@ public Optional getBuildSupport(IProject project) { } private Stream buildSupports() { - return Stream.of(new GradleBuildSupport(), new MavenBuildSupport(), new InvisibleProjectBuildSupport(), new DefaultProjectBuildSupport(this), new EclipseBuildSupport()); + Map supporters = new TreeMap<>(); + IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(IConstants.PLUGIN_ID, BUILD_SUPPORT_EXTENSION_POINT_ID); + IConfigurationElement[] configs = extensionPoint.getConfigurationElements(); + for (int i = 0; i < configs.length; i++) { + try { + Integer order = Integer.valueOf(configs[i].getAttribute("order")); + supporters.put(order, (IBuildSupport) configs[i].createExecutableExtension("class")); //$NON-NLS-1$ + } catch (CoreException e) { + JavaLanguageServerPlugin.log(e.getStatus()); + } + } + return supporters.values().stream(); } @Override @@ -302,6 +317,7 @@ public List registerWatchers() { logInfo(">> registerFeature 'workspace/didChangeWatchedFiles'"); if (preferenceManager.getClientPreferences().isWorkspaceChangeWatchedFilesDynamicRegistered()) { Set patterns = new LinkedHashSet<>(basicWatchers); + buildSupports().forEach(e -> e.getBasicWatchers().forEach(p -> patterns.add(p))); Set sources = new HashSet<>(); IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); try { From 888b75a2156a4fac2739da1a28d81dea37813fd6 Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Mon, 1 Jun 2020 15:10:50 +0300 Subject: [PATCH 2/4] Add description of build support extension point. Code refactoring. Signed-off-by: Siarhei Leanavets --- org.eclipse.jdt.ls.core/plugin.xml | 2 +- .../schema/org.eclipse.jdt.ls.core.buildSupport.exsd | 12 ++++++------ .../core/internal/managers/GradleBuildSupport.java | 7 +++---- .../jdt/ls/core/internal/managers/IBuildSupport.java | 6 +++--- .../ls/core/internal/managers/MavenBuildSupport.java | 8 ++++---- .../internal/managers/StandardProjectsManager.java | 10 +++++----- 6 files changed, 22 insertions(+), 23 deletions(-) diff --git a/org.eclipse.jdt.ls.core/plugin.xml b/org.eclipse.jdt.ls.core/plugin.xml index 6a152bf046..4de51d6e89 100644 --- a/org.eclipse.jdt.ls.core/plugin.xml +++ b/org.eclipse.jdt.ls.core/plugin.xml @@ -117,7 +117,7 @@ class="org.eclipse.jdt.ls.core.internal.managers.InvisibleProjectImporter" /> - + a fully qualified identifier of the target extension point - + an optional identifier of the extension instance - + an optional name of the extension instance @@ -50,14 +50,14 @@ Each extension must implement <code>org.eclipse.jdt.ls.core.internal.manag - + A unique identifier that can be used to reference this IBuildSupport. - + The class that implements this build support. The class must implement IBuildSupport. @@ -67,7 +67,7 @@ Each extension must implement <code>org.eclipse.jdt.ls.core.internal.manag - + The query order of the build support. Lowest value has the highest priority. diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java index 639127d6fb..d6d29791a2 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java @@ -47,8 +47,7 @@ public class GradleBuildSupport implements IBuildSupport { public static final String GRADLE_SUFFIX = ".gradle"; public static final String GRADLE_PROPERTIES = "gradle.properties"; - public static final String GRADLE_SUFFIX_PATTERN = "**/*.gradle"; - public static final String GRADLE_PROPERTIES_PATTERN = "**/gradle.properties"; + public static final List WATCH_FILE_PATTERNS = Arrays.asList("**/*.gradle", "**/gradle.properties"); @Override public boolean applies(IProject project) { @@ -137,8 +136,8 @@ public ILaunchConfiguration getLaunchConfiguration(IJavaProject javaProject, Str } @Override - public List getBasicWatchers() { - return Arrays.asList(GRADLE_SUFFIX_PATTERN, GRADLE_PROPERTIES_PATTERN); + public List getWatchPatterns() { + return WATCH_FILE_PATTERNS; } } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/IBuildSupport.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/IBuildSupport.java index fcabf47be8..c27f605f97 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/IBuildSupport.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/IBuildSupport.java @@ -12,7 +12,7 @@ *******************************************************************************/ package org.eclipse.jdt.ls.core.internal.managers; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.eclipse.core.resources.IProject; @@ -112,8 +112,8 @@ default ILaunchConfiguration getLaunchConfiguration(IJavaProject javaProject, St return new JavaApplicationLaunchConfiguration(javaProject.getProject(), scope, null); } - default List getBasicWatchers() { - return new ArrayList<>(); + default List getWatchPatterns() { + return Collections.emptyList(); } } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupport.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupport.java index 91d32bc473..7ab89e7965 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupport.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupport.java @@ -13,8 +13,8 @@ package org.eclipse.jdt.ls.core.internal.managers; import java.nio.file.Path; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -58,7 +58,7 @@ public class MavenBuildSupport implements IBuildSupport { private static final int MAX_TIME_MILLIS = 3000; - private static final String POM_FILE_PATTERN = "**/pom.xml"; + private static final List WATCH_FILE_PATTERNS = Collections.singletonList("**/pom.xml"); private static Cache downloadRequestsCache = CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite(1, TimeUnit.HOURS).build(); private IProjectConfigurationManager configurationManager; @@ -189,8 +189,8 @@ public ILaunchConfiguration getLaunchConfiguration(IJavaProject javaProject, Str } @Override - public List getBasicWatchers() { - return Arrays.asList(POM_FILE_PATTERN); + public List getWatchPatterns() { + return WATCH_FILE_PATTERNS; } } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java index 2def5423b3..2a0f119302 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java @@ -280,12 +280,12 @@ private Stream buildSupports() { Map supporters = new TreeMap<>(); IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(IConstants.PLUGIN_ID, BUILD_SUPPORT_EXTENSION_POINT_ID); IConfigurationElement[] configs = extensionPoint.getConfigurationElements(); - for (int i = 0; i < configs.length; i++) { + for (IConfigurationElement config : configs) { try { - Integer order = Integer.valueOf(configs[i].getAttribute("order")); - supporters.put(order, (IBuildSupport) configs[i].createExecutableExtension("class")); //$NON-NLS-1$ + Integer order = Integer.valueOf(config.getAttribute("order")); + supporters.put(order, (IBuildSupport) config.createExecutableExtension("class")); //$NON-NLS-1$ } catch (CoreException e) { - JavaLanguageServerPlugin.log(e.getStatus()); + JavaLanguageServerPlugin.logError(config.getAttribute("class") + " implementation was skipped \n" + e.getStatus()); } } return supporters.values().stream(); @@ -317,7 +317,7 @@ public List registerWatchers() { logInfo(">> registerFeature 'workspace/didChangeWatchedFiles'"); if (preferenceManager.getClientPreferences().isWorkspaceChangeWatchedFilesDynamicRegistered()) { Set patterns = new LinkedHashSet<>(basicWatchers); - buildSupports().forEach(e -> e.getBasicWatchers().forEach(p -> patterns.add(p))); + buildSupports().forEach(e -> e.getWatchPatterns().forEach(p -> patterns.add(p))); Set sources = new HashSet<>(); IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); try { From 5d7c238e3e2a193037f9d9531020c767cd083c85 Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Mon, 1 Jun 2020 17:50:04 +0300 Subject: [PATCH 3/4] Add test for check order loading build support from extension point. Signed-off-by: Siarhei Leanavets --- .../managers/StandardProjectsManager.java | 4 +- .../StandardProjectsManagerDummy.java | 37 ++++++++++++++++ .../managers/StandartProjectManagerTest.java | 43 +++++++++++++++++++ 3 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManagerDummy.java create mode 100644 org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandartProjectManagerTest.java diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java index 2a0f119302..4111d5ee16 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java @@ -78,7 +78,7 @@ import org.eclipse.lsp4j.WatchKind; public class StandardProjectsManager extends ProjectsManager { - private static final String BUILD_SUPPORT_EXTENSION_POINT_ID = "buildSupport"; + protected static final String BUILD_SUPPORT_EXTENSION_POINT_ID = "buildSupport"; private static final Set watchers = new LinkedHashSet<>(); private PreferenceManager preferenceManager; //@formatter:off @@ -276,7 +276,7 @@ public Optional getBuildSupport(IProject project) { return buildSupports().filter(bs -> bs.applies(project)).findFirst(); } - private Stream buildSupports() { + protected Stream buildSupports() { Map supporters = new TreeMap<>(); IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(IConstants.PLUGIN_ID, BUILD_SUPPORT_EXTENSION_POINT_ID); IConfigurationElement[] configs = extensionPoint.getConfigurationElements(); diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManagerDummy.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManagerDummy.java new file mode 100644 index 0000000000..031a0b2b7e --- /dev/null +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManagerDummy.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.jdt.ls.core.internal.managers; + +import java.util.stream.Stream; + +import org.eclipse.jdt.ls.core.internal.preferences.PreferenceManager; + +/** + * @author siarhei_leanavets1 + * + */ +public class StandardProjectsManagerDummy extends StandardProjectsManager { + + /** + * @param preferenceManager + */ + public StandardProjectsManagerDummy(PreferenceManager preferenceManager) { + super(preferenceManager); + } + + @Override + public Stream buildSupports() { + return super.buildSupports(); + } + +} diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandartProjectManagerTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandartProjectManagerTest.java new file mode 100644 index 0000000000..8afa62f244 --- /dev/null +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandartProjectManagerTest.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.jdt.ls.core.internal.managers; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.eclipse.jdt.ls.core.internal.preferences.PreferenceManager; +import org.eclipse.jdt.ls.core.internal.preferences.StandardPreferenceManager; +import org.junit.Test; + +/** + * @author siarhei_leanavets1 + * + */ +public class StandartProjectManagerTest { + + @Test + public void testCheckBuildSupportOrder() { + PreferenceManager preferenceManager = mock(StandardPreferenceManager.class); + StandardProjectsManagerDummy projectsManagerDummy = new StandardProjectsManagerDummy(preferenceManager); + List expectedList = Arrays.asList(new GradleBuildSupport(), new MavenBuildSupport(), new InvisibleProjectBuildSupport(), new DefaultProjectBuildSupport(), new EclipseBuildSupport()); + List actualList = projectsManagerDummy.buildSupports().collect(Collectors.toList()); + for (int i = 0; i < expectedList.size(); i++) { + assertTrue(actualList.get(i).getClass().isInstance(expectedList.get(i))); + } + } + +} From c0450532aedd5d3e6e458ac1d26fb01875510546 Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Wed, 3 Jun 2020 17:33:57 +0300 Subject: [PATCH 4/4] Code refactoring. Signed-off-by: Siarhei Leanavets --- .../managers/StandardProjectsManager.java | 2 +- ...t.java => StandardProjectManagerTest.java} | 23 ++++++++++-- .../StandardProjectsManagerDummy.java | 37 ------------------- 3 files changed, 20 insertions(+), 42 deletions(-) rename org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/{StandartProjectManagerTest.java => StandardProjectManagerTest.java} (64%) delete mode 100644 org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManagerDummy.java diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java index 4111d5ee16..180c52e866 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java @@ -317,7 +317,7 @@ public List registerWatchers() { logInfo(">> registerFeature 'workspace/didChangeWatchedFiles'"); if (preferenceManager.getClientPreferences().isWorkspaceChangeWatchedFilesDynamicRegistered()) { Set patterns = new LinkedHashSet<>(basicWatchers); - buildSupports().forEach(e -> e.getWatchPatterns().forEach(p -> patterns.add(p))); + buildSupports().forEach(e -> e.getWatchPatterns().forEach(patterns::add)); Set sources = new HashSet<>(); IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); try { diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandartProjectManagerTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectManagerTest.java similarity index 64% rename from org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandartProjectManagerTest.java rename to org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectManagerTest.java index 8afa62f244..6fca84102a 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandartProjectManagerTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectManagerTest.java @@ -12,12 +12,13 @@ *******************************************************************************/ package org.eclipse.jdt.ls.core.internal.managers; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.eclipse.jdt.ls.core.internal.preferences.PreferenceManager; import org.eclipse.jdt.ls.core.internal.preferences.StandardPreferenceManager; @@ -27,16 +28,30 @@ * @author siarhei_leanavets1 * */ -public class StandartProjectManagerTest { +public class StandardProjectManagerTest { + + private class StandardProjectsManagerDummy extends StandardProjectsManager { + /** + * @param preferenceManager + */ + public StandardProjectsManagerDummy(PreferenceManager preferenceManager) { + super(preferenceManager); + } + + @Override + public Stream buildSupports() { + return super.buildSupports(); + } + } @Test public void testCheckBuildSupportOrder() { PreferenceManager preferenceManager = mock(StandardPreferenceManager.class); StandardProjectsManagerDummy projectsManagerDummy = new StandardProjectsManagerDummy(preferenceManager); - List expectedList = Arrays.asList(new GradleBuildSupport(), new MavenBuildSupport(), new InvisibleProjectBuildSupport(), new DefaultProjectBuildSupport(), new EclipseBuildSupport()); + List> expectedList = Arrays.asList(GradleBuildSupport.class, MavenBuildSupport.class, InvisibleProjectBuildSupport.class, DefaultProjectBuildSupport.class, EclipseBuildSupport.class); List actualList = projectsManagerDummy.buildSupports().collect(Collectors.toList()); for (int i = 0; i < expectedList.size(); i++) { - assertTrue(actualList.get(i).getClass().isInstance(expectedList.get(i))); + assertEquals(expectedList.get(i), actualList.get(i).getClass()); } } diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManagerDummy.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManagerDummy.java deleted file mode 100644 index 031a0b2b7e..0000000000 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManagerDummy.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Red Hat Inc. and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat Inc. - initial API and implementation - *******************************************************************************/ -package org.eclipse.jdt.ls.core.internal.managers; - -import java.util.stream.Stream; - -import org.eclipse.jdt.ls.core.internal.preferences.PreferenceManager; - -/** - * @author siarhei_leanavets1 - * - */ -public class StandardProjectsManagerDummy extends StandardProjectsManager { - - /** - * @param preferenceManager - */ - public StandardProjectsManagerDummy(PreferenceManager preferenceManager) { - super(preferenceManager); - } - - @Override - public Stream buildSupports() { - return super.buildSupports(); - } - -}