You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/04/13 11:37:52 UTC

[maven-resolver] branch master updated: [MRESOLVER-250] Wrap descriptors into weak refs (#166)

This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git


The following commit(s) were added to refs/heads/master by this push:
     new 6dda6998 [MRESOLVER-250] Wrap descriptors into weak refs (#166)
6dda6998 is described below

commit 6dda69980cf4c13228a4f6561bfa0d8384a0be68
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Wed Apr 13 13:37:47 2022 +0200

    [MRESOLVER-250] Wrap descriptors into weak refs (#166)
    
    The DataPool.descriptors in case of "good" descriptor references it's own key, hence prevents collection of it. Fixing by wrapping the value (descriptor) with WeakReference, as proposed user on related JIRA.
---
 .../org/eclipse/aether/internal/impl/collect/DataPool.java   | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
index 04ebdf41..a9f5aa86 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
@@ -19,6 +19,7 @@ package org.eclipse.aether.internal.impl.collect;
  * under the License.
  */
 
+import java.lang.ref.WeakReference;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -66,7 +67,7 @@ public final class DataPool
 
     private ObjectPool<Dependency> dependencies;
 
-    private Map<Object, Descriptor> descriptors;
+    private Map<Object, WeakReference<Descriptor>> descriptors;
 
     private final Map<Object, Constraint> constraints = new HashMap<>();
 
@@ -81,7 +82,7 @@ public final class DataPool
         {
             artifacts = (ObjectPool<Artifact>) cache.get( session, ARTIFACT_POOL );
             dependencies = (ObjectPool<Dependency>) cache.get( session, DEPENDENCY_POOL );
-            descriptors = (Map<Object, Descriptor>) cache.get( session, DESCRIPTORS );
+            descriptors = (Map<Object, WeakReference<Descriptor>>) cache.get( session, DESCRIPTORS );
         }
 
         if ( artifacts == null )
@@ -129,7 +130,8 @@ public final class DataPool
 
     public ArtifactDescriptorResult getDescriptor( Object key, ArtifactDescriptorRequest request )
     {
-        Descriptor descriptor = descriptors.get( key );
+        WeakReference<Descriptor> descriptorRef = descriptors.get( key );
+        Descriptor descriptor = descriptorRef != null ? descriptorRef.get() : null;
         if ( descriptor != null )
         {
             return descriptor.toResult( request );
@@ -139,12 +141,12 @@ public final class DataPool
 
     public void putDescriptor( Object key, ArtifactDescriptorResult result )
     {
-        descriptors.put( key, new GoodDescriptor( result ) );
+        descriptors.put( key, new WeakReference<>( new GoodDescriptor( result ) ) );
     }
 
     public void putDescriptor( Object key, ArtifactDescriptorException e )
     {
-        descriptors.put( key, BadDescriptor.INSTANCE );
+        descriptors.put( key, new WeakReference<>( BadDescriptor.INSTANCE ) );
     }
 
     public Object toKey( VersionRangeRequest request )