Author: xavier
Date: Tue Dec 30 02:12:32 2008
New Revision: 730083
URL: http://svn.apache.org/viewvc?rev=730083&view=rev
Log:
FIX: source and javadoc attachment regression (IVYDE-146)
Modified:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt
URL:
http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt?rev=730083&r1=730082&r2=730083&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt Tue Dec 30
02:12:32 2008
@@ -7,6 +7,7 @@
- FIX: The retrieve configuration doesn't support '*' as accepted types
(IVYDE-137) (thanks to Daniel Becheanu)
- FIX: NPE when a project:/// path is used and path does not exist (IVYDE-144)
- FIX: project://[projectname]/ scheme for settings only work with java
projects, not simple projects (IVYDE-145)
+- FIX: source and javadoc attachment regression (IVYDE-146)
version 2.0.0 beta1
==========================
Modified:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java
URL:
http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java?rev=730083&r1=730082&r2=730083&view=diff
==============================================================================
---
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java
(original)
+++
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java
Tue Dec 30 02:12:32 2008
@@ -48,6 +48,7 @@
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.core.report.ArtifactDownloadReport;
import org.apache.ivy.core.report.ResolveReport;
+import org.apache.ivy.core.resolve.DownloadOptions;
import org.apache.ivy.core.resolve.IvyNode;
import org.apache.ivy.core.resolve.ResolveOptions;
import org.apache.ivy.core.retrieve.RetrieveOptions;
@@ -174,13 +175,11 @@
}
}
- private Map listDependencies(ResolveReport r) {
+ private Map dependenciesAsMap(ResolveReport r) {
Map result = new HashMap();
- Iterator it = r.getDependencies().iterator();
- while (it.hasNext()) {
+ for (Iterator it = r.getDependencies().iterator(); it.hasNext();) {
IvyNode node = (IvyNode) it.next();
- ModuleRevisionId moduleId = node.getId();
- result.put(moduleId.getName(), moduleId);
+ result.put(node.getId(), node);
}
return result;
}
@@ -216,7 +215,7 @@
Thread.currentThread().setContextClassLoader(
IvyResolveJob.class.getClassLoader());
try {
- Map dependencies = Collections.EMPTY_MAP;
+ Map/*<ModuleRevisionId, IvyNode>*/ dependencies =
Collections.EMPTY_MAP;
if (usePreviousResolveIfExist) {
if (conf.confs.size() == 1 &&
"*".equals(conf.confs.get(0))) {
confs = md.getConfigurationsNames();
@@ -262,7 +261,7 @@
ResolveReport r = ivy.resolve(md,
resolveOption);
all.addAll(Arrays.asList(r.getArtifactsReports(null, false)));
confs = r.getConfigurations();
- dependencies = listDependencies(r);
+ dependencies = dependenciesAsMap(r);
problemMessages.addAll(r.getAllProblemMessages());
maybeRetrieve(md);
@@ -281,7 +280,7 @@
false)));
confs = report.getConfigurations();
- dependencies = listDependencies(report);
+ dependencies = dependenciesAsMap(report);
if (monitor.isCanceled()) {
status[0] = Status.CANCEL_STATUS;
@@ -459,7 +458,8 @@
}
}
- private IClasspathEntry[] artifacts2ClasspathEntries(Collection all, Map
dependencies) {
+ private IClasspathEntry[] artifacts2ClasspathEntries(
+ Collection all, Map/*<ModuleRevisionId, IvyNode>*/ dependencies) {
IClasspathEntry[] classpathEntries;
Collection paths = new LinkedHashSet();
@@ -487,25 +487,21 @@
boolean usedProject = false;
if (conf.isResolveInWorkspace()) {
ModuleId moduleId =
artifact.getArtifact().getModuleRevisionId().getModuleId();
- String moduleName = moduleId.getName();
- ModuleRevisionId moduleRevisionId = (ModuleRevisionId)
dependencies.get(moduleName);
- if (moduleRevisionId != null) {
- IJavaProject project = (IJavaProject)
idToJProject.get(moduleId);
- if (project != null && project.exists()) {
- IClasspathEntry entry =
JavaCore.newProjectEntry(project.getPath());
- if (entry != null && !paths.contains(entry)) {
- paths.add(entry);
- }
- usedProject = true;
+ IJavaProject project = (IJavaProject)
idToJProject.get(moduleId);
+ if (project != null && project.exists()) {
+ IClasspathEntry entry =
JavaCore.newProjectEntry(project.getPath());
+ if (entry != null && !paths.contains(entry)) {
+ paths.add(entry);
}
+ usedProject = true;
}
}
if (!usedProject) {
if (artifact.getLocalFile() != null &&
accept(artifact.getArtifact())) {
Path classpathArtifact = new
Path(artifact.getLocalFile().getAbsolutePath());
- Path sourcesArtifact = getSourcesArtifactPath(artifact,
all);
- Path javadocArtifact = getJavadocArtifactPath(artifact,
all);
+ Path sourcesArtifact = getSourcesArtifactPath(artifact,
all, dependencies);
+ Path javadocArtifact = getJavadocArtifactPath(artifact,
all, dependencies);
paths.add(JavaCore.newLibraryEntry(classpathArtifact,
getSourceAttachment(
classpathArtifact, sourcesArtifact),
getSourceAttachmentRoot(
classpathArtifact, sourcesArtifact), null,
getExtraAttribute(
@@ -537,7 +533,8 @@
return null;
}
- private Path getSourcesArtifactPath(ArtifactDownloadReport adr, Collection
all) {
+ private Path getSourcesArtifactPath(ArtifactDownloadReport adr, Collection
all,
+ Map/*<ModuleRevisionId, IvyNode>*/ dependencies) {
Artifact artifact = adr.getArtifact();
monitor.subTask("searching sources for " + artifact);
for (Iterator iter = all.iterator(); iter.hasNext();) {
@@ -550,10 +547,29 @@
return new Path(otherAdr.getLocalFile().getAbsolutePath());
}
}
+ // we haven't found source artifact in resolved artifacts,
+ // let's look in the module declaring the artifact
+ IvyNode node = (IvyNode)
dependencies.get(artifact.getId().getModuleRevisionId());
+ if (node != null) {
+ Artifact[] artifacts = node.getDescriptor().getAllArtifacts();
+ for (int i = 0; i < artifacts.length; i++) {
+ Artifact metaArtifact = artifacts[i];
+ if (isSourceArtifactName(artifact.getName(),
metaArtifact.getName())
+ && isSources(metaArtifact)) {
+ // we've found the source artifact, let's provision it
+ ArtifactDownloadReport metaAdr =
ivy.getResolveEngine().download(
+ metaArtifact, new DownloadOptions());
+ if (metaAdr.getLocalFile() != null &&
metaAdr.getLocalFile().exists()) {
+ return new
Path(metaAdr.getLocalFile().getAbsolutePath());
+ }
+ }
+ }
+ }
return null;
}
- private Path getJavadocArtifactPath(ArtifactDownloadReport adr, Collection
all) {
+ private Path getJavadocArtifactPath(ArtifactDownloadReport adr, Collection
all,
+ Map/*<ModuleRevisionId, IvyNode>*/ dependencies) {
Artifact artifact = adr.getArtifact();
monitor.subTask("searching javadoc for " + artifact);
for (Iterator iter = all.iterator(); iter.hasNext();) {
@@ -566,6 +582,24 @@
return new Path(otherAdr.getLocalFile().getAbsolutePath());
}
}
+ // we haven't found javadoc artifact in resolved artifacts,
+ // let's look in the module declaring the artifact
+ IvyNode node = (IvyNode)
dependencies.get(artifact.getId().getModuleRevisionId());
+ if (node != null) {
+ Artifact[] artifacts = node.getDescriptor().getAllArtifacts();
+ for (int i = 0; i < artifacts.length; i++) {
+ Artifact metaArtifact = artifacts[i];
+ if (isJavadocArtifactName(artifact.getName(),
metaArtifact.getName())
+ && isJavadoc(metaArtifact)) {
+ // we've found the javadoc artifact, let's provision it
+ ArtifactDownloadReport metaAdr =
ivy.getResolveEngine().download(
+ metaArtifact, new DownloadOptions());
+ if (metaAdr.getLocalFile() != null &&
metaAdr.getLocalFile().exists()) {
+ return new
Path(metaAdr.getLocalFile().getAbsolutePath());
+ }
+ }
+ }
+ }
return null;
}