@@ -2,7 +2,6 @@ package graphql.kickstart.tools
22
33import com.fasterxml.jackson.core.type.TypeReference
44import graphql.TrivialDataFetcher
5- import graphql.execution.batched.Batched
65import graphql.kickstart.tools.SchemaParserOptions.GenericWrapper
76import graphql.kickstart.tools.util.JavaType
87import graphql.kickstart.tools.util.coroutineScope
@@ -32,19 +31,6 @@ internal class MethodFieldResolver(
3231 val method : Method
3332) : FieldResolver(field, search, options, search.type) {
3433
35- companion object {
36- fun isBatched (method : Method , search : FieldResolverScanner .Search ): Boolean {
37- if (method.getAnnotation(Batched ::class .java) != null ) {
38- if (! search.allowBatched) {
39- throw ResolverError (" The @Batched annotation is only allowed on non-root resolver methods, but it was found on ${search.type.unwrap().name} #${method.name} !" )
40- }
41-
42- return true
43- }
44- return false
45- }
46- }
47-
4834 private val additionalLastArgument =
4935 try {
5036 method.kotlinFunction?.valueParameters?.size ? : method.parameterCount == (field.inputValueDefinitions.size + getIndexOffset() + 1 )
@@ -53,17 +39,16 @@ internal class MethodFieldResolver(
5339 }
5440
5541 override fun createDataFetcher (): DataFetcher <* > {
56- val batched = isBatched(method, search)
5742 val args = mutableListOf<ArgumentPlaceholder >()
5843 val mapper = options.objectMapperProvider.provide(field)
5944
6045 // Add source argument if this is a resolver (but not a root resolver)
6146 if (this .search.requiredFirstParameterType != null ) {
62- val expectedType = if (batched) Iterable :: class .java else this .search.requiredFirstParameterType
47+ val expectedType = this .search.requiredFirstParameterType
6348
6449 args.add { environment ->
6550 val source = environment.getSource<Any >()
66- if (! ( expectedType.isAssignableFrom(source.javaClass) )) {
51+ if (! expectedType.isAssignableFrom(source.javaClass)) {
6752 throw ResolverError (" Source type (${source.javaClass.name} ) is not expected type (${expectedType.name} )!" )
6853 }
6954
@@ -117,14 +102,10 @@ internal class MethodFieldResolver(
117102 }
118103 }
119104
120- return if (batched ) {
121- BatchedMethodFieldResolverDataFetcher (getSourceResolver(), this .method, args, options)
105+ return if (args.isEmpty() && isTrivialDataFetcher( this .method) ) {
106+ TrivialMethodFieldResolverDataFetcher (getSourceResolver(), this .method, args, options)
122107 } else {
123- if (args.isEmpty() && isTrivialDataFetcher(this .method)) {
124- TrivialMethodFieldResolverDataFetcher (getSourceResolver(), this .method, args, options)
125- } else {
126- MethodFieldResolverDataFetcher (getSourceResolver(), this .method, args, options)
127- }
108+ MethodFieldResolverDataFetcher (getSourceResolver(), this .method, args, options)
128109 }
129110 }
130111
@@ -146,16 +127,15 @@ internal class MethodFieldResolver(
146127 }
147128
148129 override fun scanForMatches (): List <TypeClassMatcher .PotentialMatch > {
149- val batched = isBatched(method, search)
150130 val unwrappedGenericType = genericType.unwrapGenericType(try {
151131 method.kotlinFunction?.returnType?.javaType ? : method.genericReturnType
152132 } catch (e: InternalError ) {
153133 method.genericReturnType
154134 })
155- val returnValueMatch = TypeClassMatcher .PotentialMatch .returnValue(field.type, unwrappedGenericType, genericType, SchemaClassScanner .ReturnValueReference (method), batched )
135+ val returnValueMatch = TypeClassMatcher .PotentialMatch .returnValue(field.type, unwrappedGenericType, genericType, SchemaClassScanner .ReturnValueReference (method))
156136
157137 return field.inputValueDefinitions.mapIndexed { i, inputDefinition ->
158- TypeClassMatcher .PotentialMatch .parameterType(inputDefinition.type, getJavaMethodParameterType(i)!! , genericType, SchemaClassScanner .MethodParameterReference (method, i), batched )
138+ TypeClassMatcher .PotentialMatch .parameterType(inputDefinition.type, getJavaMethodParameterType(i)!! , genericType, SchemaClassScanner .MethodParameterReference (method, i))
159139 } + listOf (returnValueMatch)
160140 }
161141
@@ -238,12 +218,13 @@ internal open class MethodFieldResolverDataFetcher(
238218 }
239219}
240220
241- internal open class TrivialMethodFieldResolverDataFetcher (
221+ internal class TrivialMethodFieldResolverDataFetcher (
242222 sourceResolver : SourceResolver ,
243223 method : Method ,
244224 args : List <ArgumentPlaceholder >,
245225 options : SchemaParserOptions
246- ) : MethodFieldResolverDataFetcher(sourceResolver, method, args, options), TrivialDataFetcher<Any>
226+ ) : MethodFieldResolverDataFetcher(sourceResolver, method, args, options),
227+ TrivialDataFetcher <Any > // just to mark it for tracing and optimizations
247228
248229private suspend inline fun invokeSuspend (target : Any , resolverMethod : Method , args : Array <Any ?>): Any? {
249230 return suspendCoroutineUninterceptedOrReturn { continuation ->
@@ -268,15 +249,5 @@ private inline fun invoke(method: Method, instance: Any, args: Array<Any?>): Any
268249 }
269250}
270251
271- internal class BatchedMethodFieldResolverDataFetcher (
272- sourceResolver : SourceResolver ,
273- method : Method ,
274- args : List <ArgumentPlaceholder >,
275- options : SchemaParserOptions
276- ) : MethodFieldResolverDataFetcher(sourceResolver, method, args, options) {
277- @Batched
278- override fun get (environment : DataFetchingEnvironment ) = super .get(environment)
279- }
280-
281252internal typealias ArgumentPlaceholder = (DataFetchingEnvironment ) -> Any?
282253
0 commit comments