From 71ffa2ae05855a795fb52e4edba32ff6ae6a1d0b Mon Sep 17 00:00:00 2001
From: Tobias Pietzsch <tobias.pietzsch@gmail.com>
Date: Thu, 9 Feb 2017 15:17:05 -0500
Subject: [PATCH] Avoid polymorphic Entry.ref

Always use CacheSoftReference, even for initial null referent. Simply do
not enqueue the CacheSoftReference in this case.
---
 src/main/java/bdv/cache/revised/SoftRefCache.java | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/main/java/bdv/cache/revised/SoftRefCache.java b/src/main/java/bdv/cache/revised/SoftRefCache.java
index 095815de..a8d1774e 100644
--- a/src/main/java/bdv/cache/revised/SoftRefCache.java
+++ b/src/main/java/bdv/cache/revised/SoftRefCache.java
@@ -21,6 +21,12 @@ public class SoftRefCache< K, V > implements Cache< K, V >
 	{
 		private final Entry entry;
 
+		public CacheSoftReference( final V referent )
+		{
+			super( referent );
+			this.entry = null;
+		}
+
 		public CacheSoftReference( final V referent, final Entry entry )
 		{
 			super( referent, queue );
@@ -75,7 +81,7 @@ public class SoftRefCache< K, V > implements Cache< K, V >
 	{
 		final K key;
 
-		private SoftReference< V > ref;
+		private CacheSoftReference ref;
 
 		private CachePhantomReference< V > phantomRef;
 
@@ -86,7 +92,7 @@ public class SoftRefCache< K, V > implements Cache< K, V >
 		public Entry( final K key )
 		{
 			this.key = key;
-			this.ref = new SoftReference<>( null );
+			this.ref = new CacheSoftReference( null );
 			this.phantomRef = null;
 			this.remover = null;
 			this.loaded = false;
-- 
GitLab