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} *