@@ -30,7 +30,7 @@ internal class MethodFieldResolver(
30
30
field : FieldDefinition ,
31
31
search : FieldResolverScanner .Search ,
32
32
options : SchemaParserOptions ,
33
- val method : Method
33
+ val method : Method ,
34
34
) : FieldResolver(field, search, options, search.type) {
35
35
36
36
private val log = LoggerFactory .getLogger(javaClass)
@@ -53,6 +53,7 @@ internal class MethodFieldResolver(
53
53
54
54
args.add { environment ->
55
55
val source = environment.getSource<Any >()
56
+ ? : throw ResolverError (" Expected source object to not be null!" )
56
57
if (! expectedType.isAssignableFrom(source.javaClass)) {
57
58
throw ResolverError (" Source type (${source.javaClass.name} ) is not expected type (${expectedType.name} )!" )
58
59
}
@@ -114,6 +115,7 @@ internal class MethodFieldResolver(
114
115
environment.getContext() // TODO: remove deprecated use in next major release
115
116
}
116
117
}
118
+
117
119
GraphQLContext ::class .java -> args.add { environment -> environment.graphQlContext }
118
120
else -> args.add { environment -> environment }
119
121
}
@@ -139,19 +141,23 @@ internal class MethodFieldResolver(
139
141
return when (type) {
140
142
is ListType -> List ::class .java.isAssignableFrom(this .genericType.getRawClass(genericParameterType))
141
143
&& isConcreteScalarType(environment, type.type, this .genericType.unwrapGenericType(genericParameterType))
144
+
142
145
is TypeName -> environment.graphQLSchema?.getType(type.name)?.let { isScalar(it) && type.name != " ID" }
143
146
? : false
147
+
144
148
is NonNullType -> isConcreteScalarType(environment, type.type, genericParameterType)
145
149
else -> false
146
150
}
147
151
}
148
152
149
153
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
+ )
155
161
val returnValueMatch = TypeClassMatcher .PotentialMatch .returnValue(field.type, unwrappedGenericType, genericType, SchemaClassScanner .ReturnValueReference (method))
156
162
157
163
return field.inputValueDefinitions.mapIndexed { i, inputDefinition ->
@@ -187,7 +193,7 @@ internal open class MethodFieldResolverDataFetcher(
187
193
private val sourceResolver : SourceResolver ,
188
194
method : Method ,
189
195
private val args : List <ArgumentPlaceholder >,
190
- private val options : SchemaParserOptions
196
+ private val options : SchemaParserOptions ,
191
197
) : DataFetcher<Any> {
192
198
193
199
private val resolverMethod = method
@@ -238,11 +244,12 @@ internal open class MethodFieldResolverDataFetcher(
238
244
}
239
245
}
240
246
247
+ // TODO use graphql.schema.LightDataFetcher
241
248
internal class TrivialMethodFieldResolverDataFetcher (
242
249
sourceResolver : SourceResolver ,
243
250
method : Method ,
244
251
args : List <ArgumentPlaceholder >,
245
- options : SchemaParserOptions
252
+ options : SchemaParserOptions ,
246
253
) : MethodFieldResolverDataFetcher(sourceResolver, method, args, options),
247
254
TrivialDataFetcher <Any > // just to mark it for tracing and optimizations
248
255
@@ -256,7 +263,7 @@ private fun invoke(method: Method, instance: Any, args: Array<Any?>): Any? {
256
263
try {
257
264
return method.invoke(instance, * args)
258
265
} 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" )
260
267
}
261
268
}
262
269
0 commit comments