[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ivy-commits
Subject:    [jira] Issue Comment Edited: (IVY-590) NullPointerException whilst
From:       Jarosław_Wypychowski_(JIRA) <jira () apache ! org>
Date:       2007-08-30 8:54:30
Message-ID: 23269988.1188464070779.JavaMail.jira () brutus
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/IVY-590?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12523795 \
] 

jarwyp edited comment on IVY-590 at 8/30/07 1:53 AM:
-------------------------------------------------------------------

I met the same problem with to current SVN head. I hunted it down in the code.
in ResolveEngine.getDependencies:
...
                    if (allEvicted) {
                        Message.verbose("all callers are evicted for " + node + ": \
evicting too");  node.markEvicted(confs[i], null, null, null);
                    } else {
                        if (settings.debugConflictResolution()) {
                            Message.debug(node.getId()
                                  + " isn't transitively evicted, at least one caller \
was"   + " not evicted");
                        }
                    }
...
the line with markEvicted can be traced to  the default constructor of \
IvyNodeEviction.EvictionData where there is no check against null arguments. A simple \
                fix:
Index: src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java
===================================================================
--- src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java   (wersja 571054)
+++ src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java   (kopia robocza)
@@ -45,13 +45,15 @@
             this.parent = parent;
             this.conflictManager = conflictManager;
             this.selected = selected;
-            for (Iterator iter = selected.iterator(); iter.hasNext();) {
-                Object o = (Object) iter.next();
-                if (!(o instanceof IvyNode)) {
-                    throw new IllegalArgumentException(
-                            "selected nodes must be instance of IvyNode. Found: "
-                                    + o.getClass().getName());
-                }
+            if(selected!=null){
+                   for (Iterator iter = selected.iterator(); iter.hasNext();) {
+                       Object o = (Object) iter.next();
+                       if (!(o instanceof IvyNode)) {
+                           throw new IllegalArgumentException(
+                                   "selected nodes must be instance of IvyNode. \
Found: " +                                           + o.getClass().getName());
+                       }
+                   }
             }
         }

solved the issue for me.

* God bless wiki systems and emoticons - I will include the patch in attachments

      was (Author: jarwyp):
    I met the same problem with to current SVN head. I hunted it down in the code.
in ResolveEngine.getDependencies:
...
                    if (allEvicted) {
                        Message.verbose("all callers are evicted for " + node + ": \
evicting too");  node.markEvicted(confs[i], null, null, null);
                    } else {
                        if (settings.debugConflictResolution()) {
                            Message.debug(node.getId()
                                  + " isn't transitively evicted, at least one caller \
was"   + " not evicted");
                        }
                    }
...
the line with markEvicted can be traced to  the default constructor of \
IvyNodeEviction.EvictionData where there is no check against null arguments. A simple \
                fix:
Index: src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java
===================================================================
--- src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java   (wersja 571054)
+++ src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java   (kopia robocza)
@@ -45,13 +45,15 @@
             this.parent = parent;
             this.conflictManager = conflictManager;
             this.selected = selected;
-            for (Iterator iter = selected.iterator(); iter.hasNext();) {
-                Object o = (Object) iter.next();
-                if (!(o instanceof IvyNode)) {
-                    throw new IllegalArgumentException(
-                            "selected nodes must be instance of IvyNode. Found: "
-                                    + o.getClass().getName());
-                }
+            if(selected!=null){
+                   for (Iterator iter = selected.iterator(); iter.hasNext();) {
+                       Object o = (Object) iter.next();
+                       if (!(o instanceof IvyNode)) {
+                           throw new IllegalArgumentException(
+                                   "selected nodes must be instance of IvyNode. \
Found: " +                                           + o.getClass().getName());
+                       }
+                   }
             }
         }

solved the issue for me.

  
> NullPointerException whilst resolving transitive dependencies.
> --------------------------------------------------------------
> 
> Key: IVY-590
> URL: https://issues.apache.org/jira/browse/IVY-590
> Project: Ivy
> Issue Type: Bug
> Affects Versions: 2.0.0-alpha-2
> Reporter: Ross Clewley
> Assignee: Maarten Coene
> 
> During a resolve of a transitive configuration we see 
> java.lang.NullPointerException
> at org.apache.ivy.core.resolve.IvyNodeEviction$EvictionData.<init>(IvyNodeEviction.java:48)
>  at org.apache.ivy.core.resolve.IvyNodeEviction.markEvicted(IvyNodeEviction.java:266)
>  at org.apache.ivy.core.resolve.IvyNode.markEvicted(IvyNode.java:1101)
> at org.apache.ivy.core.resolve.ResolveEngine.getDependencies(ResolveEngine.java:523)
>  at org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:236)
> at org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:194)
> at org.apache.ivy.Ivy.resolve(Ivy.java:256)
> at org.apache.ivy.ant.IvyResolve.doExecute(IvyResolve.java:207)
> at org.apache.ivy.ant.IvyTask.execute(IvyTask.java:281)
> at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
> at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>  at java.lang.reflect.Method.invoke(Method.java:585)
> at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
> at org.apache.tools.ant.Task.perform(Task.java:348)
> at org.apache.tools.ant.Target.execute(Target.java:357)
> at org.apache.tools.ant.Target.performTasks(Target.java:385)
> at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
> at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
> at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
>  at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
> at org.apache.tools.ant.Main.runBuild(Main.java:698)
> at org.apache.tools.ant.Main.startAnt(Main.java:199)
> at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
> at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
> It's difficult to provide a simple testcase for this as I've only seen it in our \
> large modular build system and it's sensitive to things like the order of the \
> dependencies.  The modules use the following configurations
> <conf name="default"   extends="package" transitive="true"/>
> <conf name="compile"   extends="default" visibility="private" transitive="false"/>
> <conf name="runtime"   extends="default" visibility="public"  transitive="true"/>
> <conf name="test"      extends="runtime" transitive="true"/>
> The error occurs when resolving the transitive test conf. 
> Another factor that may or not be relevant is that none of our resolvers have a \
> version in the pattern.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic