[MSHARED-566] Support actTransitivily for Pattern(Include/Exclude)ArtifactFilter
git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1750584 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
index d0a0cb8..dc04a24 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
@@ -52,11 +52,13 @@
private boolean includeNullScope = true;
+ private boolean actTransitivelyPattern = false;
+
/**
* Used by {@link #transform(ScopeFilter)}
*
* When filtering on artifacts it is possible that the scope is unknown.
- * Decide if artifact should be included is its scoop is {@code null}, default is {@code true}
+ * Decide if artifact should be included if its scope is {@code null}, default is {@code true}
*
* @param includeNullScope set to {@code false} if {@code null}-scoped Artifacts should not be included
*/
@@ -64,6 +66,21 @@
{
this.includeNullScope = includeNullScope;
}
+
+ /**
+ * Used by {@link #transform(PatternExclusionsFilter)} and {@link #transform(PatternInclusionsFilter)} Determines
+ * whether the include/exclude patterns will be applied to the transitive path of a given artifact. If {@code true},
+ * and the current artifact is a transitive dependency brought in by another artifact which matches an inclusion or
+ * exclusion pattern, then the current artifact has the same inclusion/exclusion logic applied to it as well.
+ * Default is {@code false}
+ *
+ * @param actTransitivelyPattern set to {@code true} if this artifact should be included/excluded just like one of
+ * its ancestors.
+ */
+ public void setActTransitivelyPattern( boolean actTransitivelyPattern )
+ {
+ this.actTransitivelyPattern = actTransitivelyPattern;
+ }
@Override
public ArtifactFilter transform( final ScopeFilter scopeFilter )
@@ -154,13 +171,13 @@
@Override
public ArtifactFilter transform( PatternExclusionsFilter patternExclusionsFilter )
{
- return new PatternExcludesArtifactFilter( patternExclusionsFilter.getExcludes() );
+ return new PatternExcludesArtifactFilter( patternExclusionsFilter.getExcludes(), actTransitivelyPattern );
}
@Override
public ArtifactFilter transform( PatternInclusionsFilter patternInclusionsFilter )
{
- return new PatternIncludesArtifactFilter( patternInclusionsFilter.getIncludes() );
+ return new PatternIncludesArtifactFilter( patternInclusionsFilter.getIncludes(), actTransitivelyPattern );
}
@Override
diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
index 1efb98d..99074de 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
@@ -152,6 +152,31 @@
}
@Test
+ public void testTransformPatternExclusionsFilterActTransitivily()
+ throws Exception
+ {
+ PatternExclusionsFilter filter = new PatternExclusionsFilter( Collections.singletonList( "x:*" ) );
+
+ transformer.setActTransitivelyPattern( true );
+
+ Artifact parentArtifact = newArtifact( "x:a:v", null );
+
+ Artifact artifact = newArtifact( "g:a:v", null );
+
+ artifact.setDependencyTrail( Arrays.asList( parentArtifact.getId(), artifact.getId() ) );
+
+ PatternExcludesArtifactFilter dependencyFilter = (PatternExcludesArtifactFilter) filter.transform( transformer );
+
+ assertFalse( dependencyFilter.include( artifact ) );
+
+ transformer.setActTransitivelyPattern( false );
+
+ dependencyFilter = (PatternExcludesArtifactFilter) filter.transform( transformer );
+
+ assertTrue( dependencyFilter.include( artifact ) );
+ }
+
+ @Test
public void testTransformPatternInclusionsFilter()
throws Exception
{
@@ -165,6 +190,31 @@
}
@Test
+ public void testTransformPatternInclusionsFilterActTransitivily()
+ throws Exception
+ {
+ PatternInclusionsFilter filter = new PatternInclusionsFilter( Collections.singletonList( "x:*" ) );
+
+ transformer.setActTransitivelyPattern( true );
+
+ Artifact parentArtifact = newArtifact( "x:a:v", null );
+
+ Artifact artifact = newArtifact( "g:a:v", null );
+
+ artifact.setDependencyTrail( Arrays.asList( parentArtifact.getId(), artifact.getId() ) );
+
+ PatternIncludesArtifactFilter dependencyFilter = (PatternIncludesArtifactFilter) filter.transform( transformer );
+
+ assertTrue( dependencyFilter.include( artifact ) );
+
+ transformer.setActTransitivelyPattern( false );
+
+ dependencyFilter = (PatternIncludesArtifactFilter) filter.transform( transformer );
+
+ assertFalse( dependencyFilter.include( artifact ) );
+ }
+
+ @Test
public void testTransformAbstractFilter() throws Exception
{
AbstractFilter snapshotFilter = new AbstractFilter()