diff options
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; } |