Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java2
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties1
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenPreferencePage.java7
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java4
-rw-r--r--org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/BuildPathManager.java42
-rw-r--r--org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/DownloadSourcesJob.java35
6 files changed, 61 insertions, 30 deletions
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java
index 53dccf56..f3985066 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java
@@ -709,6 +709,8 @@ public class Messages extends NLS {
public static String preferencesDownloadSources;
+ public static String preferencesDownloadSourcesTooltip;
+
public static String preferencesDownloadJavadoc;
public static String artifactComponentArtifact;
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties
index 917af0b0..d32f5352 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties
@@ -405,6 +405,7 @@ pomEditorDefaultPage=Open XML page in the POM editor by default
preferencesDebugOutput=Debu&g Output
preferencesDownloadJavadoc=Download Artifact &JavaDoc
preferencesDownloadSources=Do&wnload Artifact Sources
+preferencesDownloadSourcesTooltip=If sources are unavailable, JavaDoc will be downloaded as a fall back.
preferencesGlobalUpdateNever=Do not automatically update dependencies from remote repositories
preferencesOffline=&Offline
preferencesGlobalChecksumPolicy=Global Checksum Policy\:
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenPreferencePage.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenPreferencePage.java
index ec256cdc..1aa6774f 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenPreferencePage.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenPreferencePage.java
@@ -68,8 +68,11 @@ public class MavenPreferencePage extends FieldEditorPreferencePage implements IW
// Messages.getString( "preferences.updateSnapshots" ), //$NON-NLS-1$
// getFieldEditorParent() ) );
- addField(new BooleanFieldEditor(MavenPreferenceConstants.P_DOWNLOAD_SOURCES, //
- Messages.preferencesDownloadSources, getFieldEditorParent()));
+ BooleanFieldEditor downloadSourcesField = new BooleanFieldEditor(MavenPreferenceConstants.P_DOWNLOAD_SOURCES, //
+ Messages.preferencesDownloadSources, getFieldEditorParent());
+ downloadSourcesField.getDescriptionControl(getFieldEditorParent())
+ .setToolTipText(Messages.preferencesDownloadSourcesTooltip);
+ addField(downloadSourcesField);
addField(new BooleanFieldEditor(MavenPreferenceConstants.P_DOWNLOAD_JAVADOC, //
Messages.preferencesDownloadJavadoc, getFieldEditorParent()));
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java
index 79fa263e..f6db5c01 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java
@@ -116,6 +116,10 @@ public class MavenConfigurationImpl implements IMavenConfiguration, IPreferenceC
preferencesLookup[0].putBoolean(MavenPreferenceConstants.P_DOWNLOAD_SOURCES, downloadSources);
}
+ public void setDownloadJavadoc(boolean downloadJavadoc) {
+ preferencesLookup[0].putBoolean(MavenPreferenceConstants.P_DOWNLOAD_JAVADOC, downloadJavadoc);
+ }
+
public boolean isHideFoldersOfNestedProjects() {
return Boolean.parseBoolean(preferenceStore.get(MavenPreferenceConstants.P_HIDE_FOLDERS_OF_NESTED_PROJECTS, null,
preferencesLookup));
diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/BuildPathManager.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/BuildPathManager.java
index de0d25ba..25da83b0 100644
--- a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/BuildPathManager.java
+++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/BuildPathManager.java
@@ -785,28 +785,34 @@ public class BuildPathManager implements IMavenProjectChangedListener, IResource
}
}
+ /**
+ * Returns an array of {@link ArtifactKey}s. ArtifactKey[0], holds the sources {@link ArtifactKey}, if source download
+ * was requested and sources are available. ArtifactKey[1], holds the javadoc {@link ArtifactKey}, if javadoc download
+ * was requested, or requested sources are unavailable, and javadoc is available
+ */
ArtifactKey[] getAttachedSourcesAndJavadoc(ArtifactKey a, List<ArtifactRepository> repositories,
boolean downloadSources, boolean downloadJavaDoc) throws CoreException {
- ArtifactKey sourcesArtifact = new ArtifactKey(a.getGroupId(), a.getArtifactId(), a.getVersion(),
- getSourcesClassifier(a.getClassifier()));
- ArtifactKey javadocArtifact = new ArtifactKey(a.getGroupId(), a.getArtifactId(), a.getVersion(),
- CLASSIFIER_JAVADOC);
-
- if(repositories != null) {
- downloadSources = downloadSources && !isUnavailable(sourcesArtifact, repositories);
- downloadJavaDoc = downloadJavaDoc && !isUnavailable(javadocArtifact, repositories);
- }
-
ArtifactKey[] result = new ArtifactKey[2];
-
- if(downloadSources) {
- result[0] = sourcesArtifact;
- }
-
- if(downloadJavaDoc) {
- result[1] = javadocArtifact;
+ if(repositories != null) {
+ ArtifactKey sourcesArtifact = new ArtifactKey(a.getGroupId(), a.getArtifactId(), a.getVersion(),
+ getSourcesClassifier(a.getClassifier()));
+ ArtifactKey javadocArtifact = new ArtifactKey(a.getGroupId(), a.getArtifactId(), a.getVersion(),
+ CLASSIFIER_JAVADOC);
+ if(downloadSources) {
+ if(isUnavailable(sourcesArtifact, repositories)) {
+ // 501553: fall back to requesting JavaDoc, if requested sources are missing,
+ // but only if it doesn't exist locally
+ if(getAttachedArtifactFile(a, CLASSIFIER_JAVADOC) == null) {
+ downloadJavaDoc = true;
+ }
+ } else {
+ result[0] = sourcesArtifact;
+ }
+ }
+ if(downloadJavaDoc && !isUnavailable(javadocArtifact, repositories)) {
+ result[1] = javadocArtifact;
+ }
}
-
return result;
}
diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/DownloadSourcesJob.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/DownloadSourcesJob.java
index b1babf70..457607d1 100644
--- a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/DownloadSourcesJob.java
+++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/DownloadSourcesJob.java
@@ -158,9 +158,12 @@ class DownloadSourcesJob extends Job implements IBackgroundProcessingQueue {
}
IMavenProjectFacade projectFacade = projectManager.create(request.project, requestMonitor.split(1));
if(projectFacade != null) {
- downloadMaven(projectFacade, request.artifact, request.downloadSources, request.downloadJavaDoc,
- requestMonitor.split(2));
- mavenProjects.add(request.project);
+ boolean hasDownloadedFiles = downloadMaven(projectFacade, request.artifact, request.downloadSources,
+ request.downloadJavaDoc, requestMonitor.split(2));
+ if(hasDownloadedFiles) {
+ //only perform later classpath update if something changed
+ mavenProjects.add(request.project);
+ }
} else if(request.artifact != null) {
List<ArtifactRepository> repositories = maven.getArtifactRepositories();
File[] files = downloadAttachments(request.artifact, repositories, request.downloadSources,
@@ -208,19 +211,27 @@ class DownloadSourcesJob extends Job implements IBackgroundProcessingQueue {
return Status.OK_STATUS;
}
- private void downloadMaven(IMavenProjectFacade projectFacade, ArtifactKey artifact, boolean downloadSources,
+ private boolean downloadMaven(IMavenProjectFacade projectFacade, ArtifactKey artifact, boolean downloadSources,
boolean downloadJavadoc, IProgressMonitor monitor) throws CoreException {
MavenProject mavenProject = projectFacade.getMavenProject(monitor);
List<ArtifactRepository> repositories = mavenProject.getRemoteArtifactRepositories();
-
+ boolean hasDownloadedFiles = false;
+ File[] files = null;
if(artifact != null) {
- downloadAttachments(artifact, repositories, downloadSources, downloadJavadoc, monitor);
+ files = downloadAttachments(artifact, repositories, downloadSources, downloadJavadoc, monitor);
+ hasDownloadedFiles = isNotEmpty(files);
} else {
for(Artifact a : mavenProject.getArtifacts()) {
ArtifactKey aKey = new ArtifactKey(a.getGroupId(), a.getArtifactId(), a.getBaseVersion(), a.getClassifier());
- downloadAttachments(aKey, repositories, downloadSources, downloadJavadoc, monitor);
+ files = downloadAttachments(aKey, repositories, downloadSources, downloadJavadoc, monitor);
+ hasDownloadedFiles = hasDownloadedFiles || isNotEmpty(files);
}
}
+ return hasDownloadedFiles;
+ }
+
+ private boolean isNotEmpty(File[] files) {
+ return files != null && (files[0] != null || files[1] != null);
}
private File[] downloadAttachments(ArtifactKey artifact, List<ArtifactRepository> repositories,
@@ -246,16 +257,20 @@ class DownloadSourcesJob extends Job implements IBackgroundProcessingQueue {
log.error("Could not download sources for " + artifact.toString(), e); //$NON-NLS-1$
}
}
-
+ if(monitor != null) {
+ monitor.worked(1);
+ }
if(attached[1] != null) {
try {
files[1] = download(attached[1], repositories, monitor);
log.info("Downloaded javadoc for " + artifact.toString());
} catch(CoreException e) {
- log.error("Could not download sources for " + artifact.toString(), e); //$NON-NLS-1$
+ log.error("Could not download javadoc for " + artifact.toString(), e); //$NON-NLS-1$
}
}
-
+ if(monitor != null) {
+ monitor.worked(1);
+ }
return files;
}

Back to the top