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

reschke pushed a commit to branch OAK-11656
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/OAK-11656 by this push:
     new 5cadb779e7 OAK-11656: Remove usage of Guava Suppliers.memoize
5cadb779e7 is described below

commit 5cadb779e760a9f479478ff209b80d3e60f2feba
Author: Julian Reschke <[email protected]>
AuthorDate: Mon Aug 18 15:11:10 2025 +0100

    OAK-11656: Remove usage of Guava Suppliers.memoize
---
 .../oak/commons/pconcurrent/Suppliers.java         | 13 ++++++--
 .../oak/commons/pconcurrent/package-info.java      |  4 +++
 .../oak/commons/pconcurrent/SuppliersTest.java}    | 36 +++++++++-------------
 3 files changed, 29 insertions(+), 24 deletions(-)

diff --git 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/Suppliers.java
 
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/Suppliers.java
index b300faa420..095ed49955 100644
--- 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/Suppliers.java
+++ 
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/Suppliers.java
@@ -20,6 +20,9 @@ package org.apache.jackrabbit.oak.commons.pconcurrent;
 
 import java.util.function.Supplier;
 
+/**
+ * Utility methods for {@link java.util.function.Supplier} handling.
+ */
 public class Suppliers {
 
     private Suppliers() {
@@ -34,12 +37,16 @@ public class Suppliers {
      */
     public static <T> Supplier<T> memoize(final Supplier<T> computeOnce) {
         return new Supplier<>() {
-            T result = null;
+            volatile T result = null;
 
             @Override
-            public synchronized T get() {
+            public T get() {
                 if (result == null) {
-                    result = computeOnce.get();
+                    synchronized (this) {
+                        if (result == null) {
+                            result = computeOnce.get();
+                        }
+                    }
                 }
                 return result;
             }
diff --git 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/package-info.java
 
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/package-info.java
index a8f2e9ced2..75f2033854 100644
--- 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/package-info.java
+++ 
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/package-info.java
@@ -14,6 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+/**
+ * Oak-internal Utilities for concurrency related topics.
+ */
 @Version("1.0.0")
 @Internal
 package org.apache.jackrabbit.oak.commons.pconcurrent;
diff --git 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/Suppliers.java
 
b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/pconcurrent/SuppliersTest.java
similarity index 57%
copy from 
oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/Suppliers.java
copy to 
oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/pconcurrent/SuppliersTest.java
index b300faa420..9faa9a5f85 100644
--- 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/pconcurrent/Suppliers.java
+++ 
b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/pconcurrent/SuppliersTest.java
@@ -18,31 +18,25 @@
  */
 package org.apache.jackrabbit.oak.commons.pconcurrent;
 
+import org.junit.Test;
+
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Supplier;
 
-public class Suppliers {
+import static org.junit.Assert.assertEquals;
 
-    private Suppliers() {
-    }
+public class SuppliersTest {
+
+    @Test
+    public void computeOnce() {
+        AtomicInteger count = new AtomicInteger(0);
 
-    /**
-     * Transforms a {@code Supplier} based on a wrapper around a lazily and 
only-tine
-     * single time evaluation of the given {@code Supplier}.
-     *
-     * @param <T> return type
-     * @return Supplier based on the given Supplier
-     */
-    public static <T> Supplier<T> memoize(final Supplier<T> computeOnce) {
-        return new Supplier<>() {
-            T result = null;
+        Supplier<Integer> mem = Suppliers.memoize(() -> 
count.incrementAndGet());
 
-            @Override
-            public synchronized T get() {
-                if (result == null) {
-                    result = computeOnce.get();
-                }
-                return result;
-            }
-        };
+        assertEquals(0, count.get());
+        int c = mem.get();
+        assertEquals(1, c);
+        c = mem.get();
+        assertEquals(1, c);
     }
 }

Reply via email to