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