You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2019/02/05 00:49:18 UTC
[maven] branch master updated: [MNG-6571] cache VersionRange
instances, they are immutable
This is an automated email from the ASF dual-hosted git repository.
hboutemy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push:
new 8f9075d [MNG-6571] cache VersionRange instances, they are immutable
8f9075d is described below
commit 8f9075d3ad9a787f0c8ffd4d0e24a9c4339ace1d
Author: Hervé Boutemy <hb...@apache.org>
AuthorDate: Wed Jan 23 11:01:18 2019 +0100
[MNG-6571] cache VersionRange instances, they are immutable
---
.../org/apache/maven/artifact/ArtifactUtils.java | 2 +-
.../maven/artifact/versioning/VersionRange.java | 29 +++++++++++++++++++---
2 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java b/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
index cf7d27d..a0f18ad 100644
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
@@ -138,7 +138,7 @@ public final class ArtifactUtils
range = VersionRange.createFromVersion( artifact.getVersion() );
}
- DefaultArtifact clone = new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), range.cloneOf(),
+ DefaultArtifact clone = new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), range,
artifact.getScope(), artifact.getType(), artifact.getClassifier(),
artifact.getArtifactHandler(), artifact.isOptional() );
clone.setRelease( artifact.isRelease() );
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
index e919621..5d7b254 100644
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
@@ -23,6 +23,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
import org.apache.maven.artifact.Artifact;
@@ -33,6 +35,9 @@ import org.apache.maven.artifact.Artifact;
*/
public class VersionRange
{
+ private static final Map<String, VersionRange> CACHE =
+ Collections.<String, VersionRange>synchronizedMap( new WeakHashMap<String, VersionRange>() );
+
private final ArtifactVersion recommendedVersion;
private final List<Restriction> restrictions;
@@ -54,6 +59,11 @@ public class VersionRange
return restrictions;
}
+ /**
+ * @deprecated VersionRange is immutable, cloning is not useful and even more an issue against the cache
+ * @return a clone
+ */
+ @Deprecated
public VersionRange cloneOf()
{
List<Restriction> copiedRestrictions = null;
@@ -97,6 +107,12 @@ public class VersionRange
return null;
}
+ VersionRange cached = CACHE.get( spec );
+ if ( cached != null )
+ {
+ return cached;
+ }
+
List<Restriction> restrictions = new ArrayList<>();
String process = spec;
ArtifactVersion version = null;
@@ -159,7 +175,9 @@ public class VersionRange
}
}
- return new VersionRange( version, restrictions );
+ cached = new VersionRange( version, restrictions );
+ CACHE.put( spec, cached );
+ return cached;
}
private static Restriction parseRestriction( String spec )
@@ -218,8 +236,13 @@ public class VersionRange
public static VersionRange createFromVersion( String version )
{
- List<Restriction> restrictions = Collections.emptyList();
- return new VersionRange( new DefaultArtifactVersion( version ), restrictions );
+ VersionRange cached = CACHE.get( version );
+ if ( cached == null )
+ {
+ List<Restriction> restrictions = Collections.emptyList();
+ cached = new VersionRange( new DefaultArtifactVersion( version ), restrictions );
+ }
+ return cached;
}
/**