From 5a24626e03bba2eefee322b80cf8cb81faead057 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 22 Feb 2024 00:46:38 +0400 Subject: [PATCH] add proper wildcards for evictionListener GitOrigin-RevId: ef7935a01801e338697ac67bc2d3afe83ea23b02 --- .../ContainerUtilCollectionsTest.java | 18 ++++++++++++++++-- .../util/containers/CollectionFactory.java | 4 ++-- .../containers/ConcurrentRefValueHashMap.java | 4 ++-- .../containers/ConcurrentSoftValueHashMap.java | 2 +- .../containers/ConcurrentWeakValueHashMap.java | 2 +- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/util/containers/ContainerUtilCollectionsTest.java b/platform/platform-tests/testSrc/com/intellij/util/containers/ContainerUtilCollectionsTest.java index d2933046e400..7780729b0b29 100644 --- a/platform/platform-tests/testSrc/com/intellij/util/containers/ContainerUtilCollectionsTest.java +++ b/platform/platform-tests/testSrc/com/intellij/util/containers/ContainerUtilCollectionsTest.java @@ -842,7 +842,7 @@ public class ContainerUtilCollectionsTest extends Assert { } @Test - public void testEvictionListenerWorks() { + public void testKeyEvictionListenerWorks() { AtomicReference evicted = new AtomicReference<>(); Map map = CollectionFactory.createConcurrentSoftMap(value -> { assertTrue(evicted.compareAndSet(null, value)); @@ -850,8 +850,22 @@ public class ContainerUtilCollectionsTest extends Assert { Object value = new Object(); map.put(new Object(), value); - GCUtil.tryGcSoftlyReachableObjects(() -> map.remove("")!=null/*to call processQueue()*/ || map.isEmpty()); + GCUtil.tryGcSoftlyReachableObjects(() -> map.remove("") != null/*to call processQueue()*/ || map.isEmpty()); map.remove(""); // to call processQueue() assertSame(value, evicted.get()); } + + @Test + public void testValueEvictionListenerWorks() { + AtomicReference evicted = new AtomicReference<>(); + Map map = CollectionFactory.createConcurrentSoftValueMap(key -> { + assertTrue(evicted.compareAndSet(null, key)); + }); + Object key = new Object(); + map.put(key, new Object()); + + GCUtil.tryGcSoftlyReachableObjects(() -> map.remove("") != null/*to call processQueue()*/ || map.isEmpty()); + map.remove(""); // to call processQueue() + assertSame(key, evicted.get()); + } } diff --git a/platform/util/base/src/com/intellij/util/containers/CollectionFactory.java b/platform/util/base/src/com/intellij/util/containers/CollectionFactory.java index 3e2264632350..090986b33112 100644 --- a/platform/util/base/src/com/intellij/util/containers/CollectionFactory.java +++ b/platform/util/base/src/com/intellij/util/containers/CollectionFactory.java @@ -41,13 +41,13 @@ public final class CollectionFactory { @Contract(value = "_ -> new", pure = true) public static @NotNull ConcurrentMap<@NotNull K, @NotNull V> createConcurrentWeakValueMap( - @NotNull Consumer evictionListener) { + @NotNull Consumer evictionListener) { return new ConcurrentWeakValueHashMap<>(evictionListener); } @Contract(value = "_ -> new", pure = true) public static @NotNull ConcurrentMap<@NotNull K, @NotNull V> createConcurrentSoftValueMap( - @NotNull Consumer evictionListener) { + @NotNull Consumer evictionListener) { return new ConcurrentSoftValueHashMap<>(evictionListener); } diff --git a/platform/util/base/src/com/intellij/util/containers/ConcurrentRefValueHashMap.java b/platform/util/base/src/com/intellij/util/containers/ConcurrentRefValueHashMap.java index da2fe4e55708..3ec793a3e28a 100644 --- a/platform/util/base/src/com/intellij/util/containers/ConcurrentRefValueHashMap.java +++ b/platform/util/base/src/com/intellij/util/containers/ConcurrentRefValueHashMap.java @@ -20,10 +20,10 @@ import java.util.function.Consumer; abstract class ConcurrentRefValueHashMap implements ConcurrentMap { private final ConcurrentMap> myMap = new ConcurrentHashMap<>(); - private final Consumer myEvictionListener; + private final Consumer myEvictionListener; protected final ReferenceQueue myQueue = new ReferenceQueue<>(); - ConcurrentRefValueHashMap(@Nullable Consumer evictionListener) { + ConcurrentRefValueHashMap(@Nullable Consumer evictionListener) { myEvictionListener = evictionListener; } diff --git a/platform/util/base/src/com/intellij/util/containers/ConcurrentSoftValueHashMap.java b/platform/util/base/src/com/intellij/util/containers/ConcurrentSoftValueHashMap.java index 042d936f47ab..ee4fd39e5f88 100644 --- a/platform/util/base/src/com/intellij/util/containers/ConcurrentSoftValueHashMap.java +++ b/platform/util/base/src/com/intellij/util/containers/ConcurrentSoftValueHashMap.java @@ -16,7 +16,7 @@ import java.util.function.Consumer; */ final class ConcurrentSoftValueHashMap extends ConcurrentRefValueHashMap { - ConcurrentSoftValueHashMap(@Nullable Consumer evictionListener) { + ConcurrentSoftValueHashMap(@Nullable Consumer evictionListener) { super(evictionListener); } diff --git a/platform/util/base/src/com/intellij/util/containers/ConcurrentWeakValueHashMap.java b/platform/util/base/src/com/intellij/util/containers/ConcurrentWeakValueHashMap.java index 82198fde5ec6..4ebe924f0522 100644 --- a/platform/util/base/src/com/intellij/util/containers/ConcurrentWeakValueHashMap.java +++ b/platform/util/base/src/com/intellij/util/containers/ConcurrentWeakValueHashMap.java @@ -17,7 +17,7 @@ import java.util.function.Consumer; */ final class ConcurrentWeakValueHashMap extends ConcurrentRefValueHashMap { - ConcurrentWeakValueHashMap(@Nullable Consumer evictionListener) { + ConcurrentWeakValueHashMap(@Nullable Consumer evictionListener) { super(evictionListener); }