@@ -6,7 +6,6 @@ import graphql.kickstart.tools.*
66import  graphql.kickstart.tools.SchemaParserOptions.GenericWrapper 
77import  graphql.kickstart.tools.util.JavaType 
88import  graphql.kickstart.tools.util.coroutineScope 
9- import  graphql.kickstart.tools.util.isTrivialDataFetcher 
109import  graphql.kickstart.tools.util.unwrap 
1110import  graphql.language.* 
1211import  graphql.schema.DataFetcher 
@@ -37,13 +36,9 @@ internal class MethodFieldResolver(
3736
3837    private  val  log =  LoggerFactory .getLogger(javaClass)
3938
40-     private  val  additionalLastArgument = 
41-         try  {
42-             (method.kotlinFunction?.valueParameters?.size
43-                 ? :  method.parameterCount) ==  (field.inputValueDefinitions.size +  getIndexOffset() +  1 )
44-         } catch  (e:  InternalError ) {
45-             method.parameterCount ==  (field.inputValueDefinitions.size +  getIndexOffset() +  1 )
46-         }
39+     private  val  isSuspendFunction =  method.isSuspendFunction()
40+     private  val  numberOfDeclaredParameters =  method.kotlinFunction?.valueParameters?.size ? :  method.parameterCount
41+     private  val  hasAdditionalParameter =  numberOfDeclaredParameters ==  (field.inputValueDefinitions.size +  getIndexOffset() +  1 )
4742
4843    override  fun  createDataFetcher (): DataFetcher <* > {
4944        val  args =  mutableListOf<ArgumentPlaceholder >()
@@ -100,7 +95,7 @@ internal class MethodFieldResolver(
10095        }
10196
10297        //  Add DataFetchingEnvironment/Context argument
103-         if  (this .additionalLastArgument ) {
98+         if  (this .hasAdditionalParameter ) {
10499            when  (this .method.parameterTypes.last()) {
105100                null  ->  throw  ResolverError (" Expected at least one argument but got none, this is most likely a bug with graphql-java-tools" 
106101                options.contextClass ->  args.add { environment -> 
@@ -123,10 +118,10 @@ internal class MethodFieldResolver(
123118            }
124119        }
125120
126-         return  if  (args.isEmpty()  &&  isTrivialDataFetcher( this .method) ) {
121+         return  if  (numberOfDeclaredParameters  ==   0   &&  ! isSuspendFunction ) {
127122            LightMethodFieldResolverDataFetcher (createSourceResolver(), this .method, options)
128123        } else  {
129-             MethodFieldResolverDataFetcher (createSourceResolver(), this .method, args, options)
124+             MethodFieldResolverDataFetcher (createSourceResolver(), this .method, args, options, isSuspendFunction )
130125        }
131126    }
132127
@@ -196,10 +191,9 @@ internal class MethodFieldResolverDataFetcher(
196191    private  val  method :  Method ,
197192    private  val  args :  List <ArgumentPlaceholder >,
198193    private  val  options :  SchemaParserOptions ,
194+     private  val  isSuspendFunction :  Boolean 
199195) : DataFetcher<Any> {
200196
201-     private  val  isSuspendFunction =  method.isSuspendFunction()
202- 
203197    override  fun  get (environment :  DataFetchingEnvironment ): Any?  {
204198        val  source =  sourceResolver.resolve(environment, null )
205199        val  args =  this .args.map { it(environment) }.toTypedArray()
@@ -223,27 +217,18 @@ internal class MethodFieldResolverDataFetcher(
223217}
224218
225219/* *
226-  * Similar to [MethodFieldResolverDataFetcher] but for light data fetchers which do not require the environment to be supplied unless suspend functions or 
227-  * generic wrappers are used. 
220+  * Similar to [MethodFieldResolverDataFetcher] but for light data fetchers which do not require the environment to be supplied unless generic wrappers are used. 
228221 */  
229222internal  class  LightMethodFieldResolverDataFetcher (
230223    private  val  sourceResolver :  SourceResolver ,
231224    private  val  method :  Method ,
232225    private  val  options :  SchemaParserOptions ,
233226) : LightDataFetcher<Any?> {
234227
235-     private  val  isSuspendFunction =  method.isSuspendFunction()
236- 
237-     override  fun  get (fieldDefinition :  GraphQLFieldDefinition , sourceObject :  Any , environmentSupplier :  Supplier <DataFetchingEnvironment >): Any?  {
228+     override  fun  get (fieldDefinition :  GraphQLFieldDefinition , sourceObject :  Any? , environmentSupplier :  Supplier <DataFetchingEnvironment >): Any?  {
238229        val  source =  sourceResolver.resolve(null , sourceObject)
239230
240-         return  if  (isSuspendFunction) {
241-             environmentSupplier.get().coroutineScope().future(options.coroutineContextProvider.provide()) {
242-                 invokeSuspend(source, method, emptyArray())?.transformWithGenericWrapper(options.genericWrappers, environmentSupplier)
243-             }
244-         } else  {
245-             invoke(method, source, emptyArray())?.transformWithGenericWrapper(options.genericWrappers, environmentSupplier)
246-         }
231+         return  invoke(method, source, emptyArray())?.transformWithGenericWrapper(options.genericWrappers, environmentSupplier)
247232    }
248233
249234    override  fun  get (environment :  DataFetchingEnvironment ): Any?  {
0 commit comments