You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/05/31 07:22:12 UTC
[maven-enforcer] branch master updated: [MENFORCER-420] Cache the results of getDependenciesToCheck across rules.
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 f087e8e [MENFORCER-420] Cache the results of getDependenciesToCheck across rules.
f087e8e is described below
commit f087e8e832a36917dedaf959bef5a34e0193bd4e
Author: Joseph Walton <jw...@atlassian.com>
AuthorDate: Sun May 29 22:57:31 2022 +1000
[MENFORCER-420] Cache the results of getDependenciesToCheck across rules.
Use an execution-scoped cache to store the results of the expensive call
to getDependenciesToCheck so that it's not recomputed for each rule.
Signed-off-by: Joseph Walton <jw...@atlassian.com>
---
.../maven/enforcer/rule/api/EnforcerRuleHelper.java | 10 ++++++++++
.../maven/plugins/enforcer/AbstractBanDependencies.java | 16 ++++++++++++++--
.../plugins/enforcer/DefaultEnforcementRuleHelper.java | 13 +++++++++++++
3 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java
index 403be73..727faef 100644
--- a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java
+++ b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java
@@ -21,6 +21,7 @@ package org.apache.maven.enforcer.rule.api;
import java.util.List;
import java.util.Map;
+import java.util.function.Supplier;
import javax.annotation.Nonnull;
@@ -131,4 +132,13 @@ public interface EnforcerRuleHelper
* @return the container
*/
PlexusContainer getContainer();
+
+ /**
+ * Gets a cached value, or uses the provided producer to compute it.
+ *
+ * @param key a key to identify the value stored
+ * @param producer a supplier for the value if it's not already present
+ * @return a previously-cached or freshly-computed value
+ */
+ Object getCache( String key, Supplier<?> producer );
}
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
index 8a9735d..4148c6f 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
@@ -77,7 +77,7 @@ public abstract class AbstractBanDependencies
try
{
- graphBuilder = (DependencyGraphBuilder) helper.getComponent( DependencyGraphBuilder.class );
+ graphBuilder = helper.getComponent( DependencyGraphBuilder.class );
}
catch ( ComponentLookupException e )
{
@@ -89,7 +89,7 @@ public abstract class AbstractBanDependencies
buildingRequest.setProject( project );
// get the correct list of dependencies
- Set<Artifact> dependencies = getDependenciesToCheck( buildingRequest );
+ Set<Artifact> dependencies = getDependenciesToCheck( helper, buildingRequest );
// look for banned dependencies
Set<Artifact> foundExcludes = checkDependencies( dependencies, helper.getLog() );
@@ -120,6 +120,18 @@ public abstract class AbstractBanDependencies
return "Found Banned Dependency: " + artifact.getId() + System.lineSeparator();
}
+ private Set<Artifact> getDependenciesToCheck( EnforcerRuleHelper helper,
+ ProjectBuildingRequest buildingRequest )
+ {
+ String cacheKey = buildingRequest.getProject().getId() + "_" + searchTransitive;
+
+ // check in the cache
+ Set<Artifact> dependencies =
+ (Set<Artifact>) helper.getCache( cacheKey, () -> getDependenciesToCheck( buildingRequest ) );
+
+ return dependencies;
+ }
+
protected Set<Artifact> getDependenciesToCheck( ProjectBuildingRequest buildingRequest )
{
Set<Artifact> dependencies = null;
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DefaultEnforcementRuleHelper.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DefaultEnforcementRuleHelper.java
index e1c8858..7f80748 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DefaultEnforcementRuleHelper.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DefaultEnforcementRuleHelper.java
@@ -20,8 +20,10 @@ package org.apache.maven.plugins.enforcer;
*/
import java.io.File;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.function.Supplier;
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
import org.apache.maven.execution.MavenSession;
@@ -50,6 +52,9 @@ public class DefaultEnforcementRuleHelper
/** The container. */
private PlexusContainer container;
+ /** A cache. */
+ private Map<String, Object> cache;
+
/**
* Instantiates a new default enforcement rule helper.
*
@@ -71,6 +76,8 @@ public class DefaultEnforcementRuleHelper
{
this.container = session.getContainer();
}
+
+ this.cache = new HashMap<>();
}
@Override
@@ -139,4 +146,10 @@ public class DefaultEnforcementRuleHelper
{
return container;
}
+
+ @Override
+ public Object getCache( String key, Supplier<?> producer )
+ {
+ return cache.computeIfAbsent( key, ( x ) -> producer.get() );
+ }
}