Skip to content

Commit 067d976

Browse files
committed
WIP
1 parent f10dcac commit 067d976

File tree

4 files changed

+8
-8
lines changed

4 files changed

+8
-8
lines changed

junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionContext.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,6 @@ default <V> V getOrDefault(Object key, Class<V> requiredType, V defaultValue) {
615615
* @see AutoCloseable
616616
*/
617617
@API(status = STABLE, since = "5.1")
618-
@SuppressWarnings("NullAway")
619618
default <V> @Nullable V getOrComputeIfAbsent(Class<V> type) {
620619
return getOrComputeIfAbsent(type, ReflectionSupport::newInstance, type);
621620
}
@@ -650,7 +649,7 @@ default <V> V getOrDefault(Object key, Class<V> requiredType, V defaultValue) {
650649
* @see CloseableResource
651650
* @see AutoCloseable
652651
*/
653-
<K, V extends @Nullable Object> @Nullable Object getOrComputeIfAbsent(K key, Function<K, V> defaultCreator);
652+
<K, V extends @Nullable Object> @Nullable Object getOrComputeIfAbsent(K key, Function<? super K, ? extends V> defaultCreator);
654653

655654
/**
656655
* Get the value of the specified required type that is stored under the
@@ -681,7 +680,7 @@ default <V> V getOrDefault(Object key, Class<V> requiredType, V defaultValue) {
681680
* @see CloseableResource
682681
* @see AutoCloseable
683682
*/
684-
<K, V extends @Nullable Object> @Nullable V getOrComputeIfAbsent(K key, Function<K, V> defaultCreator,
683+
<K, V extends @Nullable Object> @Nullable V getOrComputeIfAbsent(K key, Function<? super K, ? extends V> defaultCreator,
685684
Class<V> requiredType);
686685

687686
/**

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/NamespaceAwareStore.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public NamespaceAwareStore(NamespacedHierarchicalStore<Namespace> valuesStore, N
5454
}
5555

5656
@Override
57-
public <K, V extends @Nullable Object> @Nullable Object getOrComputeIfAbsent(K key, Function<K, V> defaultCreator) {
57+
public <K, V extends @Nullable Object> @Nullable Object getOrComputeIfAbsent(K key, Function<? super K, ? extends V> defaultCreator) {
5858
Preconditions.notNull(key, "key must not be null");
5959
Preconditions.notNull(defaultCreator, "defaultCreator function must not be null");
6060
Supplier<@Nullable Object> action = () -> this.valuesStore.getOrComputeIfAbsent(this.namespace, key,
@@ -63,7 +63,7 @@ public NamespaceAwareStore(NamespacedHierarchicalStore<Namespace> valuesStore, N
6363
}
6464

6565
@Override
66-
public <K, V extends @Nullable Object> @Nullable V getOrComputeIfAbsent(K key, Function<K, V> defaultCreator,
66+
public <K, V extends @Nullable Object> @Nullable V getOrComputeIfAbsent(K key, Function<? super K, ? extends V> defaultCreator,
6767
Class<V> requiredType) {
6868
Preconditions.notNull(key, "key must not be null");
6969
Preconditions.notNull(defaultCreator, "defaultCreator function must not be null");

junit-platform-engine/src/main/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStore.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ public void close() {
191191
* closed
192192
*/
193193
public <K, V extends @Nullable Object> @Nullable Object getOrComputeIfAbsent(N namespace, K key,
194-
Function<K, V> defaultCreator) {
194+
Function<? super K, ? extends V> defaultCreator) {
195195
Preconditions.notNull(defaultCreator, "defaultCreator must not be null");
196196
CompositeKey<N> compositeKey = new CompositeKey<>(namespace, key);
197197
StoredValue storedValue = getStoredValue(compositeKey);
@@ -220,7 +220,7 @@ public void close() {
220220
* be cast to the required type, or if this store has already been closed
221221
*/
222222
public <K, V extends @Nullable Object> @Nullable V getOrComputeIfAbsent(N namespace, K key,
223-
Function<K, V> defaultCreator, Class<V> requiredType) throws NamespacedHierarchicalStoreException {
223+
Function<? super K, ? extends V> defaultCreator, Class<V> requiredType) throws NamespacedHierarchicalStoreException {
224224

225225
Object value = getOrComputeIfAbsent(namespace, key, defaultCreator);
226226
return castToRequiredType(key, value, requiredType);

platform-tests/src/test/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStoreTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.concurrent.atomic.AtomicInteger;
2929
import java.util.function.Function;
3030

31+
import org.jspecify.annotations.Nullable;
3132
import org.junit.jupiter.api.BeforeEach;
3233
import org.junit.jupiter.api.Nested;
3334
import org.junit.jupiter.api.Test;
@@ -319,7 +320,7 @@ void removeNullValueWithTypeSafety() {
319320
void simulateRaceConditionInGetOrComputeIfAbsent() throws Exception {
320321
int threads = 10;
321322
AtomicInteger counter = new AtomicInteger();
322-
List<Object> values;
323+
List<@Nullable Object> values;
323324

324325
try (var localStore = new NamespacedHierarchicalStore<>(null)) {
325326
values = executeConcurrently(threads, //

0 commit comments

Comments
 (0)