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


Reply via email to