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


Reply via email to