diff --git a/src/main/java/graphql/execution/DataFetcherResult.java b/src/main/java/graphql/execution/DataFetcherResult.java index cbf0a03639..08032460b4 100644 --- a/src/main/java/graphql/execution/DataFetcherResult.java +++ b/src/main/java/graphql/execution/DataFetcherResult.java @@ -6,6 +6,8 @@ import graphql.Internal; import graphql.PublicApi; import graphql.schema.DataFetcher; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -32,14 +34,15 @@ * @param The type of the data fetched */ @PublicApi +@NullMarked public class DataFetcherResult { - private final T data; + private final @Nullable T data; private final List errors; - private final Object localContext; - private final Map extensions; + private final @Nullable Object localContext; + private final @Nullable Map extensions; - private DataFetcherResult(T data, List errors, Object localContext, Map extensions) { + private DataFetcherResult(@Nullable T data, List errors, @Nullable Object localContext, @Nullable Map extensions) { this.data = data; this.errors = ImmutableList.copyOf(assertNotNull(errors)); this.localContext = localContext; @@ -49,7 +52,7 @@ private DataFetcherResult(T data, List errors, Object localContext /** * @return The data fetched. May be null. */ - public T getData() { + public @Nullable T getData() { return data; } @@ -72,7 +75,7 @@ public boolean hasErrors() { * * @return a local context object */ - public Object getLocalContext() { + public @Nullable Object getLocalContext() { return localContext; } @@ -88,7 +91,7 @@ public Object getLocalContext() { * @see graphql.extensions.ExtensionsBuilder * @see graphql.extensions.ExtensionsMerger */ - public Map getExtensions() { + public @Nullable Map getExtensions() { return extensions; } @@ -115,7 +118,7 @@ public DataFetcherResult transform(Consumer> builderConsumer) { * * @return a new instance with where the data value has been transformed */ - public DataFetcherResult map(Function transformation) { + public DataFetcherResult map(Function<@Nullable T, @Nullable R> transformation) { return new Builder<>(transformation.apply(this.data)) .errors(this.errors) .extensions(this.extensions) @@ -135,10 +138,10 @@ public static Builder newResult() { } public static class Builder { - private T data; - private Object localContext; + private @Nullable T data; + private @Nullable Object localContext; private final List errors = new ArrayList<>(); - private Map extensions; + private @Nullable Map extensions; public Builder(DataFetcherResult existing) { data = existing.getData(); @@ -147,14 +150,14 @@ public Builder(DataFetcherResult existing) { extensions = existing.extensions; } - public Builder(T data) { + public Builder(@Nullable T data) { this.data = data; } public Builder() { } - public Builder data(T data) { + public Builder data(@Nullable T data) { this.data = data; return this; } @@ -181,12 +184,12 @@ public boolean hasErrors() { return !errors.isEmpty(); } - public Builder localContext(Object localContext) { + public Builder localContext(@Nullable Object localContext) { this.localContext = localContext; return this; } - public Builder extensions(Map extensions) { + public Builder extensions(@Nullable Map extensions) { this.extensions = extensions; return this; }