From 1f334f12386358139d03b0ef327028704c5bae7c Mon Sep 17 00:00:00 2001 From: Patrick Strawderman Date: Tue, 12 Apr 2022 10:23:06 -0700 Subject: [PATCH] Use delegation pattern in DgsDataFetchingEnvironment Some of the overridden methods such as getArguments were incorrectly returning mutable types, when the underlying DataFetchingEnvironment implementation was returning immutable types. Switching to the delegation pattern avoids this issue and gets rid of some boilerplate code. --- .../graphql/dgs/DgsDataFetchingEnvironment.kt | 137 +----------------- 1 file changed, 3 insertions(+), 134 deletions(-) diff --git a/graphql-dgs/src/main/kotlin/com/netflix/graphql/dgs/DgsDataFetchingEnvironment.kt b/graphql-dgs/src/main/kotlin/com/netflix/graphql/dgs/DgsDataFetchingEnvironment.kt index 85f500070..6338d1369 100644 --- a/graphql-dgs/src/main/kotlin/com/netflix/graphql/dgs/DgsDataFetchingEnvironment.kt +++ b/graphql-dgs/src/main/kotlin/com/netflix/graphql/dgs/DgsDataFetchingEnvironment.kt @@ -20,30 +20,14 @@ import com.netflix.graphql.dgs.context.DgsContext import com.netflix.graphql.dgs.exceptions.MultipleDataLoadersDefinedException import com.netflix.graphql.dgs.exceptions.NoDataLoaderFoundException import com.netflix.graphql.dgs.internal.utils.DataLoaderNameUtil -import graphql.GraphQLContext -import graphql.cachecontrol.CacheControl -import graphql.execution.ExecutionId -import graphql.execution.ExecutionStepInfo -import graphql.execution.MergedField -import graphql.execution.directives.QueryDirectives -import graphql.language.Document -import graphql.language.Field -import graphql.language.FragmentDefinition -import graphql.language.OperationDefinition import graphql.schema.DataFetchingEnvironment -import graphql.schema.DataFetchingFieldSelectionSet -import graphql.schema.GraphQLFieldDefinition -import graphql.schema.GraphQLOutputType -import graphql.schema.GraphQLSchema -import graphql.schema.GraphQLType import org.dataloader.DataLoader -import org.dataloader.DataLoaderRegistry -import java.util.* -class DgsDataFetchingEnvironment(private val dfe: DataFetchingEnvironment) : DataFetchingEnvironment { +class DgsDataFetchingEnvironment(private val dfe: DataFetchingEnvironment) : DataFetchingEnvironment by dfe { fun getDgsContext(): DgsContext { - val context = dfe.getContext() + @Suppress("deprecation") + val context = dfe.getContext() if (context is DgsContext) { return context } else { @@ -65,119 +49,4 @@ class DgsDataFetchingEnvironment(private val dfe: DataFetchingEnvironment) : Dat dfe.getDataLoader(loaderName) } } - - override fun getSource(): T { - return dfe.getSource() - } - - override fun getArguments(): MutableMap { - return dfe.arguments - } - - override fun containsArgument(name: String?): Boolean { - return dfe.containsArgument(name) - } - - override fun getArgument(name: String?): T { - return dfe.getArgument(name) - } - - override fun getArgumentOrDefault(name: String?, defaultValue: T): T { - return dfe.getArgumentOrDefault(name, defaultValue) - } - - @Deprecated(message = "Use getGraphQLContext() instead.", replaceWith = ReplaceWith(expression = "getGraphQLContext().get()")) - override fun getContext(): T { - return dfe.getContext() - } - - override fun getGraphQlContext(): GraphQLContext { - return dfe.graphQlContext - } - - override fun getLocalContext(): T { - return dfe.getLocalContext() - } - - override fun getRoot(): T { - return dfe.getRoot() - } - - override fun getFieldDefinition(): GraphQLFieldDefinition { - return dfe.fieldDefinition - } - - @Deprecated("Use getMergedField()") - override fun getFields(): MutableList { - @Suppress("DEPRECATION") - return dfe.fields - } - - override fun getMergedField(): MergedField { - return dfe.mergedField - } - - override fun getField(): Field { - return dfe.field - } - - override fun getFieldType(): GraphQLOutputType { - return dfe.fieldType - } - - override fun getExecutionStepInfo(): ExecutionStepInfo { - return dfe.executionStepInfo - } - - override fun getParentType(): GraphQLType { - return dfe.parentType - } - - override fun getGraphQLSchema(): GraphQLSchema { - return dfe.graphQLSchema - } - - override fun getFragmentsByName(): MutableMap { - return dfe.fragmentsByName - } - - override fun getExecutionId(): ExecutionId { - return dfe.executionId - } - - override fun getSelectionSet(): DataFetchingFieldSelectionSet { - return dfe.selectionSet - } - - override fun getQueryDirectives(): QueryDirectives { - return dfe.queryDirectives - } - - override fun getDataLoader(dataLoaderName: String?): DataLoader { - return dfe.getDataLoader(dataLoaderName) - } - - override fun getDataLoaderRegistry(): DataLoaderRegistry { - return dfe.dataLoaderRegistry - } - - override fun getCacheControl(): CacheControl { - return dfe.cacheControl - } - - override fun getLocale(): Locale { - return dfe.locale - } - - override fun getOperationDefinition(): OperationDefinition { - return dfe.operationDefinition - } - - override fun getDocument(): Document { - return dfe.document - } - - override fun getVariables(): MutableMap { - return dfe.variables - } }