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/06 09:08:31 UTC
[maven] 01/01: [MNG-6571] separate caches for create from spec and
version
This is an automated email from the ASF dual-hosted git repository.
hboutemy pushed a commit to branch MNG-6571
in repository https://gitbox.apache.org/repos/asf/maven.git
commit 23861e69c197dd391c69fb3808e5ff6d2e07e444
Author: Hervé Boutemy <hb...@apache.org>
AuthorDate: Wed Feb 6 09:56:33 2019 +0100
[MNG-6571] separate caches for create from spec and version
test the little differences between the 2
---
.../maven/artifact/versioning/VersionRange.java | 12 ++++++++----
.../maven/artifact/versioning/VersionRangeTest.java | 19 +++++++++++++++++++
2 files changed, 27 insertions(+), 4 deletions(-)
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 5d7b254..c37eabb 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
@@ -35,9 +35,12 @@ import org.apache.maven.artifact.Artifact;
*/
public class VersionRange
{
- private static final Map<String, VersionRange> CACHE =
+ private static final Map<String, VersionRange> CACHE_SPEC =
Collections.<String, VersionRange>synchronizedMap( new WeakHashMap<String, VersionRange>() );
+ private static final Map<String, VersionRange> CACHE_VERSION =
+ Collections.<String, VersionRange>synchronizedMap( new WeakHashMap<String, VersionRange>() );
+
private final ArtifactVersion recommendedVersion;
private final List<Restriction> restrictions;
@@ -107,7 +110,7 @@ public class VersionRange
return null;
}
- VersionRange cached = CACHE.get( spec );
+ VersionRange cached = CACHE_SPEC.get( spec );
if ( cached != null )
{
return cached;
@@ -176,7 +179,7 @@ public class VersionRange
}
cached = new VersionRange( version, restrictions );
- CACHE.put( spec, cached );
+ CACHE_SPEC.put( spec, cached );
return cached;
}
@@ -236,11 +239,12 @@ public class VersionRange
public static VersionRange createFromVersion( String version )
{
- VersionRange cached = CACHE.get( version );
+ VersionRange cached = CACHE_VERSION.get( version );
if ( cached == null )
{
List<Restriction> restrictions = Collections.emptyList();
cached = new VersionRange( new DefaultArtifactVersion( version ), restrictions );
+ CACHE_VERSION.put( version, cached );
}
return cached;
}
diff --git a/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java b/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
index dc8d3d5..da5d758 100644
--- a/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
+++ b/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
@@ -727,4 +727,23 @@ public class VersionRangeTest
{
// assertTrue( new DefaultArtifactVersion( "1.0-alpha10" ).compareTo( new DefaultArtifactVersion( "1.0-alpha1" ) ) > 0 );
}
+
+ public void testCache()
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange range = VersionRange.createFromVersionSpec( "[1.0,1.2]" );
+ assertTrue( range == VersionRange.createFromVersionSpec( "[1.0,1.2]" ) ); // same instance from spec cache
+
+ VersionRange spec = VersionRange.createFromVersionSpec( "1.0" );
+ assertTrue( spec == VersionRange.createFromVersionSpec( "1.0" ) ); // same instance from spec cache
+ List<Restriction> restrictions = spec.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+
+ VersionRange version = VersionRange.createFromVersion( "1.0" );
+ assertTrue( version == VersionRange.createFromVersion( "1.0" ) ); // same instance from version cache
+ restrictions = version.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 0, restrictions.size() );
+
+ assertFalse( "check !VersionRange.createFromVersionSpec(x).equals(VersionRange.createFromVersion(x))", spec.equals( version ) );
+ }
}