From 8acb669b6948dedd73d924ab44619e30d8c63342 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Fri, 18 Oct 2019 16:13:32 +0200 Subject: [PATCH] Stuck on '5% Update project ...' for a long time Signed-off-by: Snjezana Peco --- .../internal/managers/MavenBuildSupport.java | 5 ++- .../internal/preferences/Preferences.java | 17 +++++++++ .../projects/maven/salut3/pom.xml | 20 ++++++++++ .../managers/MavenBuildSupportTest.java | 38 +++++++++++++++++++ 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 org.eclipse.jdt.ls.tests/projects/maven/salut3/pom.xml 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 f3498f4a91..fc98596744 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 @@ -81,14 +81,15 @@ public void update(IProject project, boolean force, IProgressMonitor monitor) th Path pomPath = project.getFile("pom.xml").getLocation().toFile().toPath(); if (digestStore.updateDigest(pomPath) || force) { JavaLanguageServerPlugin.logInfo("Starting Maven update for " + project.getName()); + boolean updateSnapshots = JavaLanguageServerPlugin.getPreferencesManager() == null ? false : JavaLanguageServerPlugin.getPreferencesManager().getPreferences().isMavenUpdateSnapshots(); if (shouldCollectProjects()) { Set projectSet = new LinkedHashSet<>(); collectProjects(projectSet, project, monitor); IProject[] projects = projectSet.toArray(new IProject[0]); - MavenUpdateRequest request = new MavenUpdateRequest(projects, MavenPlugin.getMavenConfiguration().isOffline(), true); + MavenUpdateRequest request = new MavenUpdateRequest(projects, MavenPlugin.getMavenConfiguration().isOffline(), updateSnapshots); ((ProjectConfigurationManager) configurationManager).updateProjectConfiguration(request, true, true, monitor); } else { - MavenUpdateRequest request = new MavenUpdateRequest(project, MavenPlugin.getMavenConfiguration().isOffline(), true); + MavenUpdateRequest request = new MavenUpdateRequest(project, MavenPlugin.getMavenConfiguration().isOffline(), updateSnapshots); configurationManager.updateProjectConfiguration(request, monitor); } } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/preferences/Preferences.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/preferences/Preferences.java index 7edce3e19e..4265adee49 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/preferences/Preferences.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/preferences/Preferences.java @@ -90,6 +90,10 @@ public class Preferences { * Preference key to enable/disable downloading Maven source artifacts. */ public static final String MAVEN_DOWNLOAD_SOURCES = "java.maven.downloadSources"; + /** + * Preference key to force update of Snapshots/Releases. + */ + public static final String MAVEN_UPDATE_SNAPSHOTS = "java.maven.updateSnapshots"; /** * Preference key to enable/disable reference code lenses. */ @@ -316,6 +320,7 @@ public class Preferences { private String gradleHome; private boolean importMavenEnabled; private boolean mavenDownloadSources; + private boolean mavenUpdateSnapshots; private boolean implementationsCodeLensEnabled; private boolean javaFormatEnabled; private boolean javaFormatOnTypeEnabled; @@ -433,6 +438,7 @@ public Preferences() { gradleHome = null; importMavenEnabled = true; mavenDownloadSources = false; + mavenUpdateSnapshots = false; referencesCodeLensEnabled = true; implementationsCodeLensEnabled = false; javaFormatEnabled = true; @@ -499,6 +505,8 @@ public static Preferences createFrom(Map configuration) { prefs.setImportMavenEnabled(importMavenEnabled); boolean downloadSources = getBoolean(configuration, MAVEN_DOWNLOAD_SOURCES, false); prefs.setMavenDownloadSources(downloadSources); + boolean updateSnapshots = getBoolean(configuration, MAVEN_UPDATE_SNAPSHOTS, false); + prefs.setMavenUpdateSnapshots(updateSnapshots); boolean referenceCodelensEnabled = getBoolean(configuration, REFERENCES_CODE_LENS_ENABLED_KEY, true); prefs.setReferencesCodelensEnabled(referenceCodelensEnabled); boolean implementationCodeLensEnabled = getBoolean(configuration, IMPLEMENTATIONS_CODE_LENS_ENABLED_KEY, false); @@ -692,6 +700,11 @@ public Preferences setMavenDownloadSources(boolean enabled) { return this; } + public Preferences setMavenUpdateSnapshots(boolean enabled) { + this.mavenUpdateSnapshots = enabled; + return this; + } + private Preferences setSignatureHelpEnabled(boolean enabled) { this.signatureHelpEnabled = enabled; return this; @@ -895,6 +908,10 @@ public boolean isMavenDownloadSources() { return mavenDownloadSources; } + public boolean isMavenUpdateSnapshots() { + return mavenUpdateSnapshots; + } + public boolean isImplementationsCodeLensEnabled() { return implementationsCodeLensEnabled; } diff --git a/org.eclipse.jdt.ls.tests/projects/maven/salut3/pom.xml b/org.eclipse.jdt.ls.tests/projects/maven/salut3/pom.xml new file mode 100644 index 0000000000..78d354be65 --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/maven/salut3/pom.xml @@ -0,0 +1,20 @@ + + 4.0.0 + foo.bar + salut3 + 0.0.1-SNAPSHOT + + + + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + \ No newline at end of file diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupportTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupportTest.java index d5269bb7b7..e562df8795 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupportTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/MavenBuildSupportTest.java @@ -42,8 +42,10 @@ import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.internal.core.BinaryType; import org.eclipse.jdt.ls.core.internal.DependencyUtil; +import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; import org.eclipse.jdt.ls.core.internal.JobHelpers; import org.eclipse.jdt.ls.core.internal.ProjectUtils; +import org.eclipse.jdt.ls.core.internal.ResourceUtils; import org.eclipse.jdt.ls.core.internal.SourceContentProvider; import org.eclipse.jdt.ls.core.internal.WorkspaceHelper; import org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.CHANGE_TYPE; @@ -177,6 +179,42 @@ public void testDownloadSources() throws Exception { assertNotNull(source); } + @Test + public void testUpdateSnapshots() throws Exception { + boolean updateSnapshots = JavaLanguageServerPlugin.getPreferencesManager().getPreferences().isMavenUpdateSnapshots(); + FeatureStatus status = preferenceManager.getPreferences().getUpdateBuildConfigurationStatus(); + try { + IProject project = importMavenProject("salut3"); + waitForBackgroundJobs(); + IJavaProject javaProject = JavaCore.create(project); + IType type = javaProject.findType("org.apache.commons.lang3.StringUtils"); + assertNull(type); + JavaLanguageServerPlugin.getPreferencesManager().getPreferences().setMavenUpdateSnapshots(false); + JavaLanguageServerPlugin.getPreferencesManager().getPreferences().setUpdateBuildConfigurationStatus(FeatureStatus.automatic); + IFile pom = project.getFile("pom.xml"); + String content = ResourceUtils.getContent(pom); + //@formatter:off + content = content.replace("", + "\n" + + "\n" + + " org.apache.commons\n" + + " commons-lang3\n" + + " 3.9\n" + + "" + + ""); + //@formatter:on + ResourceUtils.setContent(pom, content); + URI uri = pom.getRawLocationURI(); + projectsManager.fileChanged(uri.toString(), CHANGE_TYPE.CHANGED); + waitForBackgroundJobs(); + type = javaProject.findType("org.apache.commons.lang3.StringUtils"); + assertNotNull(type); + } finally { + JavaLanguageServerPlugin.getPreferencesManager().getPreferences().setMavenUpdateSnapshots(updateSnapshots); + JavaLanguageServerPlugin.getPreferencesManager().getPreferences().setUpdateBuildConfigurationStatus(status); + } + } + @Test public void testBatchImport() throws Exception { IProject project = importMavenProject("batch");