diff --git a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java index 57069a5e6a9a..0fce71a68e77 100644 --- a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java +++ b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java @@ -111,10 +111,6 @@ public class MavenProject private Set resolvedArtifacts; - private ArtifactFilter artifactFilter; - - private Set artifacts; - private Artifact parentArtifact; private Set pluginArtifacts; @@ -151,8 +147,8 @@ public class MavenProject private Artifact artifact; - // calculated. - private Map artifactMap; + private final ThreadLocal threadLocalArtifactsHolder = + ThreadLocal.withInitial( ArtifactsHolder::new ); private Model originalModel; @@ -695,10 +691,11 @@ public void addLicense( License license ) public void setArtifacts( Set artifacts ) { - this.artifacts = artifacts; + ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get(); + artifactsHolder.artifacts = artifacts; // flush the calculated artifactMap - artifactMap = null; + artifactsHolder.artifactMap = null; } /** @@ -711,34 +708,36 @@ public void setArtifacts( Set artifacts ) */ public Set getArtifacts() { - if ( artifacts == null ) + ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get(); + if ( artifactsHolder.artifacts == null ) { - if ( artifactFilter == null || resolvedArtifacts == null ) + if ( artifactsHolder.artifactFilter == null || resolvedArtifacts == null ) { - artifacts = new LinkedHashSet<>(); + artifactsHolder.artifacts = new LinkedHashSet<>(); } else { - artifacts = new LinkedHashSet<>( resolvedArtifacts.size() * 2 ); + artifactsHolder.artifacts = new LinkedHashSet<>( resolvedArtifacts.size() * 2 ); for ( Artifact artifact : resolvedArtifacts ) { - if ( artifactFilter.include( artifact ) ) + if ( artifactsHolder.artifactFilter.include( artifact ) ) { - artifacts.add( artifact ); + artifactsHolder.artifacts.add( artifact ); } } } } - return artifacts; + return artifactsHolder.artifacts; } public Map getArtifactMap() { - if ( artifactMap == null ) + ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get(); + if ( artifactsHolder.artifactMap == null ) { - artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() ); + artifactsHolder.artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() ); } - return artifactMap; + return artifactsHolder.artifactMap; } public void setPluginArtifacts( Set pluginArtifacts ) @@ -1428,8 +1427,9 @@ public DependencyFilter getExtensionDependencyFilter() public void setResolvedArtifacts( Set artifacts ) { this.resolvedArtifacts = ( artifacts != null ) ? artifacts : Collections.emptySet(); - this.artifacts = null; - this.artifactMap = null; + ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get(); + artifactsHolder.artifacts = null; + artifactsHolder.artifactMap = null; } /** @@ -1442,9 +1442,10 @@ public void setResolvedArtifacts( Set artifacts ) */ public void setArtifactFilter( ArtifactFilter artifactFilter ) { - this.artifactFilter = artifactFilter; - this.artifacts = null; - this.artifactMap = null; + ArtifactsHolder artifactsHolder = threadLocalArtifactsHolder.get(); + artifactsHolder.artifactFilter = artifactFilter; + artifactsHolder.artifacts = null; + artifactsHolder.artifactMap = null; } /** @@ -1839,7 +1840,6 @@ public Map getReportArtifactMap() { reportArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getReportArtifacts() ); } - return reportArtifactMap; } @@ -1864,7 +1864,6 @@ public Map getExtensionArtifactMap() { extensionArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getExtensionArtifacts() ); } - return extensionArtifactMap; } @@ -1986,4 +1985,11 @@ public void setProjectBuildingRequest( ProjectBuildingRequest projectBuildingReq { this.projectBuilderConfiguration = projectBuildingRequest; } + + private static class ArtifactsHolder + { + private ArtifactFilter artifactFilter; + private Set artifacts; + private Map artifactMap; + } }