gnodet commented on code in PR #1200:
URL: https://github.com/apache/maven/pull/1200#discussion_r1264213883


##########
maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java:
##########
@@ -28,37 +30,120 @@
  * Filter to exclude from a list of artifact patterns.
  */
 public class ExclusionArtifactFilter implements ArtifactFilter {
-    private static final String WILDCARD = "*";
 
     private final List<Exclusion> exclusions;
+    private final List<Predicate<Artifact>> predicates;
 
     public ExclusionArtifactFilter(List<Exclusion> exclusions) {
         this.exclusions = exclusions;
+        this.predicates =
+                
exclusions.stream().map(ExclusionArtifactFilter::toPredicate).collect(Collectors.toList());
     }
 
-    private Predicate<Exclusion> sameArtifactId(Artifact artifact) {
-        return exclusion -> 
exclusion.getArtifactId().equals(artifact.getArtifactId());
+    @Override
+    public boolean include(Artifact artifact) {
+        return predicates.stream().noneMatch(p -> p.test(artifact));
     }
 
-    private Predicate<Exclusion> sameGroupId(Artifact artifact) {
-        return exclusion -> 
exclusion.getGroupId().equals(artifact.getGroupId());
+    private static Predicate<Artifact> toPredicate(Exclusion exclusion) {
+        Pattern groupId = 
Pattern.compile(convertGlobToRegex(exclusion.getGroupId()));
+        Pattern artifactId = 
Pattern.compile(convertGlobToRegex(exclusion.getArtifactId()));
+        Predicate<Artifact> predGroupId = a -> 
groupId.matcher(a.getGroupId()).matches();
+        Predicate<Artifact> predArtifactId =
+                a -> artifactId.matcher(a.getArtifactId()).matches();
+        return predGroupId.and(predArtifactId);
     }
 
-    private Predicate<Exclusion> groupIdIsWildcard = exclusion -> 
WILDCARD.equals(exclusion.getGroupId());
-
-    private Predicate<Exclusion> artifactIdIsWildcard = exclusion -> 
WILDCARD.equals(exclusion.getArtifactId());
-
-    private Predicate<Exclusion> groupIdAndArtifactIdIsWildcard = 
groupIdIsWildcard.and(artifactIdIsWildcard);
-
-    private Predicate<Exclusion> exclude(Artifact artifact) {
-        return groupIdAndArtifactIdIsWildcard
-                .or(groupIdIsWildcard.and(sameArtifactId(artifact)))
-                .or(artifactIdIsWildcard.and(sameGroupId(artifact)))
-                .or(sameGroupId(artifact).and(sameArtifactId(artifact)));
-    }
-
-    @Override
-    public boolean include(Artifact artifact) {
-        return !exclusions.stream().anyMatch(exclude(artifact));
+    /**
+     * Converts a standard POSIX Shell globbing pattern into a regular 
expression

Review Comment:
   `PathMatcher` is not really usable in this context, unless we want to 
implement a `Path` class just for that, but it looks worse to me. And I thought 
we wanted to avoid `maven-shared-utils` which is not a dependency in maven 
atm...



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to