This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git


The following commit(s) were added to refs/heads/master by this push:
     new a05dbc0  Improve performance of BannedPlugins and RequireReleaseDeps
a05dbc0 is described below

commit a05dbc0936222ec5c81713a738aa7fbda9e83b8b
Author: Ric Harris <harris_...@hotmail.com>
AuthorDate: Mon Jun 9 21:49:35 2025 +0100

    Improve performance of BannedPlugins and RequireReleaseDeps
---
 .../apache/maven/enforcer/rules/BannedPlugins.java   | 11 ++++-------
 .../rules/dependency/RequireReleaseDeps.java         | 10 +++++++---
 .../maven/enforcer/rules/utils/ArtifactUtils.java    | 20 +-------------------
 3 files changed, 12 insertions(+), 29 deletions(-)

diff --git 
a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/BannedPlugins.java
 
b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/BannedPlugins.java
index b9a48e4..f9fb8ff 100644
--- 
a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/BannedPlugins.java
+++ 
b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/BannedPlugins.java
@@ -23,6 +23,7 @@ import javax.inject.Named;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.function.Predicate;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
@@ -66,9 +67,10 @@ public final class BannedPlugins extends 
AbstractStandardEnforcerRule {
 
     @Override
     public void execute() throws EnforcerRuleException {
-
+        Predicate<Artifact> shouldExclude = 
ArtifactUtils.prepareDependencyArtifactMatcher(excludes);
+        Predicate<Artifact> shouldInclude = 
ArtifactUtils.prepareDependencyArtifactMatcher(includes);
         String result = 
session.getCurrentProject().getPluginArtifacts().stream()
-                .filter(a -> !validate(a))
+                .filter(a -> !(!shouldExclude.test(a) || 
shouldInclude.test(a)))
                 .collect(
                         StringBuilder::new,
                         (messageBuilder, node) ->
@@ -80,11 +82,6 @@ public final class BannedPlugins extends 
AbstractStandardEnforcerRule {
         }
     }
 
-    private boolean validate(Artifact artifact) {
-        return !ArtifactUtils.matchDependencyArtifact(artifact, excludes)
-                || ArtifactUtils.matchDependencyArtifact(artifact, includes);
-    }
-
     @Override
     public String toString() {
         return String.format("BannedPlugins[excludes=%s, includes=%s]", 
excludes, includes);
diff --git 
a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/RequireReleaseDeps.java
 
b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/RequireReleaseDeps.java
index 48d4e33..0b0490d 100644
--- 
a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/RequireReleaseDeps.java
+++ 
b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/RequireReleaseDeps.java
@@ -23,6 +23,7 @@ import javax.inject.Named;
 
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
@@ -30,7 +31,6 @@ import org.apache.maven.enforcer.rules.utils.ArtifactUtils;
 import org.apache.maven.execution.MavenSession;
 
 import static java.util.Optional.ofNullable;
-import static 
org.apache.maven.enforcer.rules.utils.ArtifactUtils.matchDependencyArtifact;
 
 /**
  * This rule checks that no snapshots are included.
@@ -50,6 +50,9 @@ public final class RequireReleaseDeps extends 
BannedDependenciesBase {
      */
     private boolean failWhenParentIsSnapshot = true;
 
+    private Predicate<Artifact> shouldExclude;
+    private Predicate<Artifact> shouldInclude;
+
     @Inject
     public RequireReleaseDeps(MavenSession session, ResolverUtil resolverUtil) 
{
         super(session, resolverUtil);
@@ -67,6 +70,8 @@ public final class RequireReleaseDeps extends 
BannedDependenciesBase {
         }
 
         if (callSuper) {
+            shouldExclude = 
ArtifactUtils.prepareDependencyArtifactMatcher(getExcludes());
+            shouldInclude = 
ArtifactUtils.prepareDependencyArtifactMatcher(getIncludes());
             super.execute();
             if (failWhenParentIsSnapshot) {
 
@@ -97,8 +102,7 @@ public final class RequireReleaseDeps extends 
BannedDependenciesBase {
     protected boolean validate(Artifact artifact) {
         // only check isSnapshot() if the artifact does not match (excludes 
minus includes)
         // otherwise true
-        return (matchDependencyArtifact(artifact, getExcludes()) && 
!matchDependencyArtifact(artifact, getIncludes()))
-                || !artifact.isSnapshot();
+        return shouldExclude.test(artifact) && !shouldInclude.test(artifact) 
|| !artifact.isSnapshot();
     }
 
     /**
diff --git 
a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/utils/ArtifactUtils.java
 
b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/utils/ArtifactUtils.java
index 5c7bc42..2ab6723 100644
--- 
a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/utils/ArtifactUtils.java
+++ 
b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/utils/ArtifactUtils.java
@@ -91,7 +91,7 @@ public final class ArtifactUtils {
      * This can improve efficiency where there are lots of patterns and/or 
artifacts to match.
      *
      * @param patterns the patterns to use for the predicate
-     * @return a re-usable predicate equivalent to that which would be created 
in {@link #matchDependencyArtifact(Artifact, Collection)}.
+     * @return a re-usable predicate.
      */
     public static Predicate<Artifact> 
prepareDependencyArtifactMatcher(Collection<String> patterns) {
         return cleansePatterns(patterns)
@@ -101,24 +101,6 @@ public final class ArtifactUtils {
                 .orElse(test -> false);
     }
 
-    /**
-     * Checks if the given dependency artifact matches the given collection of 
patterns
-     *
-     * @param artifact dependency artifact to match against patterns
-     * @param patterns patterns to match against the artifacts
-     * @return {@code true} if the given artifact matches the set of patterns
-     */
-    public static boolean matchDependencyArtifact(Artifact artifact, 
Collection<String> patterns) {
-        try {
-            return cleansePatterns(patterns).anyMatch(pattern -> 
compareDependency(pattern, artifact));
-        } catch (IllegalArgumentException e) {
-            if (e.getCause() instanceof InvalidVersionSpecificationException) {
-                throw new IllegalArgumentException(e.getMessage());
-            }
-            throw e;
-        }
-    }
-
     /**
      * Cleans the patterns provided ready for use in {@link 
ArtifactMatcher.Pattern}
      *

Reply via email to