Skip to content

Commit 9914aad

Browse files
committed
Fixed couple of unit tests related to kotlinFunction
1 parent 804fb33 commit 9914aad

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

src/main/kotlin/com/coxautodev/graphql/tools/FieldResolverScanner.kt

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.apache.commons.lang3.reflect.FieldUtils
99
import org.slf4j.LoggerFactory
1010
import java.lang.reflect.Modifier
1111
import java.lang.reflect.ParameterizedType
12+
import java.lang.reflect.Type
1213
import kotlin.reflect.full.valueParameters
1314
import kotlin.reflect.jvm.javaType
1415
import kotlin.reflect.jvm.kotlinFunction
@@ -117,15 +118,31 @@ internal class FieldResolverScanner(val options: SchemaParserOptions) {
117118
true
118119
}
119120

120-
val methodParameterCount = method.kotlinFunction?.valueParameters?.size ?: method.parameterCount
121-
val methodLastParameter = method.kotlinFunction?.valueParameters?.lastOrNull()?.type?.javaType
122-
?: method.parameterTypes.lastOrNull()
121+
val methodParameterCount = getMethodParameterCount(method)
122+
val methodLastParameter = getMethodLastParameter(method)
123123

124124
val correctParameterCount = methodParameterCount == requiredCount ||
125125
(methodParameterCount == (requiredCount + 1) && allowedLastArgumentTypes.contains(methodLastParameter))
126126
return correctParameterCount && appropriateFirstParameter
127127
}
128128

129+
private fun getMethodParameterCount(method: java.lang.reflect.Method): Int {
130+
return try {
131+
method.kotlinFunction?.valueParameters?.size ?: method.parameterCount
132+
} catch (e: InternalError) {
133+
method.parameterCount
134+
}
135+
}
136+
137+
private fun getMethodLastParameter(method: java.lang.reflect.Method): Type? {
138+
return try {
139+
method.kotlinFunction?.valueParameters?.lastOrNull()?.type?.javaType
140+
?: method.parameterTypes.lastOrNull()
141+
} catch (e: InternalError) {
142+
method.parameterTypes.lastOrNull()
143+
}
144+
}
145+
129146
private fun verifyBatchedMethodFirstArgument(firstType: JavaType?, requiredFirstParameterType: Class<*>?): Boolean {
130147
if (firstType == null) {
131148
return false

src/main/kotlin/com/coxautodev/graphql/tools/MethodFieldResolver.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,12 @@ internal class MethodFieldResolver(field: FieldDefinition, search: FieldResolver
3535
}
3636
}
3737

38-
private val additionalLastArgument = method.kotlinFunction?.valueParameters?.size ?: method.parameterCount == (field.inputValueDefinitions.size + getIndexOffset() + 1)
38+
private val additionalLastArgument =
39+
try {
40+
method.kotlinFunction?.valueParameters?.size ?: method.parameterCount == (field.inputValueDefinitions.size + getIndexOffset() + 1)
41+
} catch (e: InternalError) {
42+
method.parameterCount == (field.inputValueDefinitions.size + getIndexOffset() + 1)
43+
}
3944

4045
override fun createDataFetcher(): DataFetcher<*> {
4146
val batched = isBatched(method, search)
@@ -103,7 +108,7 @@ internal class MethodFieldResolver(field: FieldDefinition, search: FieldResolver
103108

104109
override fun scanForMatches(): List<TypeClassMatcher.PotentialMatch> {
105110
val batched = isBatched(method, search)
106-
val unwrappedGenericType = genericType.unwrapGenericType(method.kotlinFunction?.returnType?.javaType ?: method.genericReturnType)
111+
val unwrappedGenericType = genericType.unwrapGenericType(try { method.kotlinFunction?.returnType?.javaType ?: method.genericReturnType } catch (e: InternalError) { method.genericReturnType })
107112
val returnValueMatch = TypeClassMatcher.PotentialMatch.returnValue(field.type, unwrappedGenericType, genericType, SchemaClassScanner.ReturnValueReference(method), batched)
108113

109114
return field.inputValueDefinitions.mapIndexed { i, inputDefinition ->
@@ -140,7 +145,7 @@ open class MethodFieldResolverDataFetcher(private val sourceResolver: SourceReso
140145
// Convert to reflactasm reflection
141146
private val methodAccess = MethodAccess.get(method.declaringClass)!!
142147
private val methodIndex = methodAccess.getIndex(method.name, *method.parameterTypes)
143-
private val isSuspendFunction = method.kotlinFunction?.isSuspend == true
148+
private val isSuspendFunction = try {method.kotlinFunction?.isSuspend == true } catch (e: InternalError) { false }
144149

145150
private class CompareGenericWrappers {
146151
companion object : Comparator<GenericWrapper> {

0 commit comments

Comments
 (0)