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);
}
}