You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/09/19 22:17:14 UTC

svn commit: r697220 - in /maven/shared/trunk/maven-common-artifact-filters/src: main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java test/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilterTest.java

Author: jdcasey
Date: Fri Sep 19 13:17:14 2008
New Revision: 697220

URL: http://svn.apache.org/viewvc?rev=697220&view=rev
Log:
Fix NPE for Artifact.getId() when artifact uses a version range instead of a single version...this is triggered when an artifact is excluded from the ScopeArtifactFilter.include() method.

Modified:
    maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java
    maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilterTest.java

Modified: maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java?rev=697220&r1=697219&r2=697220&view=diff
==============================================================================
--- maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java (original)
+++ maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilter.java Fri Sep 19 13:17:14 2008
@@ -139,7 +139,19 @@
 
         if ( !result )
         {
-            filteredArtifactIds.add( artifact.getId() );
+            // We have to be very careful with artifacts that have ranges, 
+            // because artifact.getId() will throw a NPE if a range is specified.
+            String id;
+            if ( artifact.getVersionRange() != null )
+            {
+                id = artifact.getDependencyConflictId() + ":" + artifact.getVersionRange();
+            }
+            else
+            {
+                id = artifact.getId();
+            }
+            
+            filteredArtifactIds.add( id );
         }
 
         return result;

Modified: maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilterTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilterTest.java?rev=697220&r1=697219&r2=697220&view=diff
==============================================================================
--- maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilterTest.java (original)
+++ maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/ScopeArtifactFilterTest.java Fri Sep 19 13:17:14 2008
@@ -18,16 +18,29 @@
  */
 package org.apache.maven.shared.artifact.filter;
 
-import junit.framework.TestCase;
-
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.shared.tools.easymock.MockManager;
+import org.codehaus.plexus.PlexusTestCase;
 import org.easymock.MockControl;
 
 public class ScopeArtifactFilterTest
-    extends TestCase
+    extends PlexusTestCase
 {
+    
+    public void testExcludedArtifactWithRangeShouldNotCauseNPE()
+        throws Exception
+    {
+        ArtifactFactory factory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+        
+        Artifact excluded = factory.createDependencyArtifact( "group", "artifact", VersionRange.createFromVersionSpec( "[1.2.3]" ), "jar", null, Artifact.SCOPE_PROVIDED );
+        
+        ArtifactFilter filter = new ScopeArtifactFilter( Artifact.SCOPE_RUNTIME );
+        
+        assertFalse( filter.include( excluded ) );
+    }
 
     private MockManager mockManager = new MockManager();
 
@@ -148,31 +161,21 @@
 
         MockControl control;
 
-        private final String scope;
-
         ArtifactMockAndControl( String scope )
         {
-            this.scope = scope;
-
             control = MockControl.createControl( Artifact.class );
             mockManager.add( control );
 
             artifact = (Artifact) control.getMock();
 
-            enableGetScope();
-            enableGetId();
-        }
-
-        void enableGetScope()
-        {
             artifact.getScope();
-            control.setReturnValue( scope, MockControl.ONE_OR_MORE );
-        }
-
-        void enableGetId()
-        {
+            control.setReturnValue( scope, MockControl.ZERO_OR_MORE );
+            
             artifact.getId();
             control.setReturnValue( "group:artifact:type:version", MockControl.ZERO_OR_MORE );
+            
+            artifact.getVersionRange();
+            control.setReturnValue( null, MockControl.ZERO_OR_MORE );
         }
     }