@@ -30,7 +30,7 @@ internal class MethodFieldResolver(
3030 field : FieldDefinition ,
3131 search : FieldResolverScanner .Search ,
3232 options : SchemaParserOptions ,
33- val method : Method
33+ val method : Method ,
3434) : FieldResolver(field, search, options, search.type) {
3535
3636 private val log = LoggerFactory .getLogger(javaClass)
@@ -53,6 +53,7 @@ internal class MethodFieldResolver(
5353
5454 args.add { environment ->
5555 val source = environment.getSource<Any >()
56+ ? : throw ResolverError (" Expected source object to not be null!" )
5657 if (! expectedType.isAssignableFrom(source.javaClass)) {
5758 throw ResolverError (" Source type (${source.javaClass.name} ) is not expected type (${expectedType.name} )!" )
5859 }
@@ -114,6 +115,7 @@ internal class MethodFieldResolver(
114115 environment.getContext() // TODO: remove deprecated use in next major release
115116 }
116117 }
118+
117119 GraphQLContext ::class .java -> args.add { environment -> environment.graphQlContext }
118120 else -> args.add { environment -> environment }
119121 }
@@ -139,19 +141,23 @@ internal class MethodFieldResolver(
139141 return when (type) {
140142 is ListType -> List ::class .java.isAssignableFrom(this .genericType.getRawClass(genericParameterType))
141143 && isConcreteScalarType(environment, type.type, this .genericType.unwrapGenericType(genericParameterType))
144+
142145 is TypeName -> environment.graphQLSchema?.getType(type.name)?.let { isScalar(it) && type.name != " ID" }
143146 ? : false
147+
144148 is NonNullType -> isConcreteScalarType(environment, type.type, genericParameterType)
145149 else -> false
146150 }
147151 }
148152
149153 override fun scanForMatches (): List <TypeClassMatcher .PotentialMatch > {
150- val unwrappedGenericType = genericType.unwrapGenericType(try {
151- method.kotlinFunction?.returnType?.javaType ? : method.genericReturnType
152- } catch (e: InternalError ) {
153- method.genericReturnType
154- })
154+ val unwrappedGenericType = genericType.unwrapGenericType(
155+ try {
156+ method.kotlinFunction?.returnType?.javaType ? : method.genericReturnType
157+ } catch (e: InternalError ) {
158+ method.genericReturnType
159+ }
160+ )
155161 val returnValueMatch = TypeClassMatcher .PotentialMatch .returnValue(field.type, unwrappedGenericType, genericType, SchemaClassScanner .ReturnValueReference (method))
156162
157163 return field.inputValueDefinitions.mapIndexed { i, inputDefinition ->
@@ -187,7 +193,7 @@ internal open class MethodFieldResolverDataFetcher(
187193 private val sourceResolver : SourceResolver ,
188194 method : Method ,
189195 private val args : List <ArgumentPlaceholder >,
190- private val options : SchemaParserOptions
196+ private val options : SchemaParserOptions ,
191197) : DataFetcher<Any> {
192198
193199 private val resolverMethod = method
@@ -238,11 +244,12 @@ internal open class MethodFieldResolverDataFetcher(
238244 }
239245}
240246
247+ // TODO use graphql.schema.LightDataFetcher
241248internal class TrivialMethodFieldResolverDataFetcher (
242249 sourceResolver : SourceResolver ,
243250 method : Method ,
244251 args : List <ArgumentPlaceholder >,
245- options : SchemaParserOptions
252+ options : SchemaParserOptions ,
246253) : MethodFieldResolverDataFetcher(sourceResolver, method, args, options),
247254 TrivialDataFetcher <Any > // just to mark it for tracing and optimizations
248255
@@ -256,7 +263,7 @@ private fun invoke(method: Method, instance: Any, args: Array<Any?>): Any? {
256263 try {
257264 return method.invoke(instance, * args)
258265 } catch (e: InvocationTargetException ) {
259- throw e.cause ? : RuntimeException (" Unknown error occurred while invoking resolver method" )
266+ throw e.cause ? : RuntimeException (" Unknown error occurred while invoking resolver method" )
260267 }
261268}
262269
0 commit comments