From f6a625584c9b9f153e1375748a3480e523abd2e3 Mon Sep 17 00:00:00 2001 From: Paulius Dambrauskas Date: Fri, 25 Jul 2025 11:25:06 +0300 Subject: [PATCH] Allow value nullability for ValueCache --- src/main/java/org/dataloader/ValueCache.java | 3 ++- src/test/kotlin/org/dataloader/KotlinExamples.kt | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/dataloader/ValueCache.java b/src/main/java/org/dataloader/ValueCache.java index 80c8402..b06fdb8 100644 --- a/src/main/java/org/dataloader/ValueCache.java +++ b/src/main/java/org/dataloader/ValueCache.java @@ -3,6 +3,7 @@ import org.dataloader.annotations.PublicSpi; import org.dataloader.impl.CompletableFutureKit; import org.dataloader.impl.NoOpValueCache; +import org.jspecify.annotations.Nullable; import org.jspecify.annotations.NullMarked; import java.util.ArrayList; @@ -40,7 +41,7 @@ */ @PublicSpi @NullMarked -public interface ValueCache { +public interface ValueCache { /** * Creates a new value cache, using the default no-op implementation. diff --git a/src/test/kotlin/org/dataloader/KotlinExamples.kt b/src/test/kotlin/org/dataloader/KotlinExamples.kt index 480a965..f53faf4 100644 --- a/src/test/kotlin/org/dataloader/KotlinExamples.kt +++ b/src/test/kotlin/org/dataloader/KotlinExamples.kt @@ -1,8 +1,10 @@ package org.dataloader +import java.util.concurrent.CompletableFuture import org.junit.jupiter.api.Test import reactor.core.publisher.Flux import java.util.concurrent.CompletableFuture.completedFuture +import org.dataloader.impl.NoOpValueCache /** * Some Kotlin code to prove that are JSpecify annotations work here @@ -81,6 +83,19 @@ class KotlinExamples { standardNullableAsserts(dataLoader) } + @Test + fun `basic kotlin test of nullable value types in value cache`() { + val valueCache = object : ValueCache by NoOpValueCache() { + override fun get(key: String): CompletableFuture = if (key == "null") + completedFuture(null) + else + completedFuture(key) + } + + assert(valueCache["key"].get() == "key") + assert(valueCache["null"].get() == null) + } + private fun standardNullableAsserts(dataLoader: DataLoader) { val cfA = dataLoader.load("A") val cfB = dataLoader.load("B")