Add caching for GenericVersion instances in GenericVersionScheme #1498
+229
−22
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR implements caching for
GenericVersion
instances inGenericVersionScheme
to improve performance when parsing identical version strings repeatedly, which is common in dependency resolution scenarios.Changes Made
Core Implementation
ConcurrentMap<String, GenericVersion>
cache inGenericVersionScheme
with initial capacity of 256parseVersion()
method to usecomputeIfAbsent()
for thread-safe cachingscheme.parseVersion()
for consistency with caching approachTest Improvements
GenericVersionSchemeTest
to verify same instances are returned for identical stringsGenericVersionSchemeCachingPerformanceTest
with tests for:GenericVersionRangeTest.newVersion()
now usesversionScheme.parseVersion()
UnionVersionRangeTest
uses shared scheme instance instead of creating new onesBenefits
GenericVersion
instanceConcurrentMap.computeIfAbsent()
for safe concurrent accessGenericVersion
is immutableTechnical Details
ConcurrentHashMap
withcomputeIfAbsent()
for thread-safe lazy initializationTesting
The implementation includes:
This optimization is particularly beneficial in dependency resolution scenarios where the same version strings are parsed multiple times during graph traversal and conflict resolution.
Files Changed
GenericVersionScheme.java
- Core caching implementationGenericVersionSchemeTest.java
- Added caching testsGenericVersionRangeTest.java
- Updated to use scheme consistentlyUnionVersionRangeTest.java
- Updated to use shared scheme instanceGenericVersionSchemeCachingPerformanceTest.java
- New performance test classPull Request opened by Augment Code with guidance from the PR author