From eb5a83ab6acec5d577fe840e71c9d3da5494d535 Mon Sep 17 00:00:00 2001 From: James Bodkin Date: Thu, 3 Apr 2025 16:02:36 +0100 Subject: [PATCH] Reduce allocations for empty ArgumentValue Closes gh-1175 Signed-off-by: James Bodkin [brian.clozel@broadcom.com: apply code conventions] Signed-off-by: Brian Clozel --- .../org/springframework/graphql/data/ArgumentValue.java | 7 +++++-- .../springframework/graphql/data/ArgumentValueTests.java | 1 - 2 files changed, 5 insertions(+), 3 deletions(-) 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 5defd64d..5ce87f2f 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,8 @@ import org.springframework.util.ObjectUtils; */ public final class ArgumentValue { + private static final ArgumentValue EMPTY = new ArgumentValue<>(null, false); + private static final ArgumentValue OMITTED = new ArgumentValue<>(null, true); @@ -118,7 +120,7 @@ public final class ArgumentValue { @Override public boolean equals(Object other) { - // This covers OMITTED constant + // This covers EMPTY and OMITTED constant if (this == other) { return true; } @@ -142,8 +144,9 @@ public final class ArgumentValue { * @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) ? new ArgumentValue<>(value, false) : (ArgumentValue) EMPTY; } /** 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 9cba03ec..fdfa4f0a 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 @@ class ArgumentValueTests { } @Test - void ifPresentShouldSkipWhenOmitted() { AtomicBoolean called = new AtomicBoolean(); ArgumentValue.omitted().ifPresent(value -> called.set(true));