diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/ArgumentValue.java b/spring-graphql/src/main/java/org/springframework/graphql/data/ArgumentValue.java index 5defd64db..4ca9f14a8 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/data/ArgumentValue.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/data/ArgumentValue.java @@ -49,6 +49,7 @@ */ public final class ArgumentValue { + private static final ArgumentValue EMPTY = new ArgumentValue<>(null, false); private static final ArgumentValue OMITTED = new ArgumentValue<>(null, true); @@ -118,7 +119,7 @@ public void ifPresent(Consumer action) { @Override public boolean equals(Object other) { - // This covers OMITTED constant + // This covers EMPTY and OMITTED constant if (this == other) { return true; } @@ -142,8 +143,9 @@ public int hashCode() { * @param the type of value * @param value the value to hold in the instance */ + @SuppressWarnings("unchecked") public static ArgumentValue ofNullable(@Nullable T value) { - return new ArgumentValue<>(value, false); + return value == null ? (ArgumentValue) EMPTY : new ArgumentValue<>(value, false); } /** diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/ArgumentValueTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/ArgumentValueTests.java index 9cba03ec8..fdfa4f0ac 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/ArgumentValueTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/ArgumentValueTests.java @@ -74,7 +74,6 @@ void ifPresentShouldSkipWhenNull() { } @Test - void ifPresentShouldSkipWhenOmitted() { AtomicBoolean called = new AtomicBoolean(); ArgumentValue.omitted().ifPresent(value -> called.set(true));