Skip to content

Commit cc0ed8c

Browse files
committed
Enhance type resolving for (super)interfaces, fixing #558
1 parent eeb11bb commit cc0ed8c

File tree

1 file changed

+5
-12
lines changed

1 file changed

+5
-12
lines changed

src/main/kotlin/graphql/kickstart/tools/DictionaryTypeResolver.kt

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,15 @@ internal abstract class DictionaryTypeResolver(
1616
private val dictionary: BiMap<JavaType, TypeDefinition<*>>,
1717
private val types: Map<String, GraphQLObjectType>
1818
) : TypeResolver {
19-
private fun <T> getTypeName(clazz: Class<T>): String? {
20-
val name = dictionary[clazz]?.name
21-
22-
if (name == null && clazz.superclass != null) {
23-
return getTypeName(clazz.superclass)
24-
}
25-
26-
return name
19+
private fun <T> getTypeDefinition(clazz: Class<T>): TypeDefinition<*>? {
20+
return dictionary[clazz]
21+
?: (if (clazz.superclass == null) null else getTypeDefinition(clazz.superclass))
22+
?: clazz.interfaces.mapNotNull { getTypeDefinition(it) }.firstOrNull()
2723
}
2824

2925
override fun getType(env: TypeResolutionEnvironment): GraphQLObjectType? {
3026
val clazz = env.getObject<Any>().javaClass
31-
val name = clazz.interfaces.fold(getTypeName(clazz), { name, interfaceClazz ->
32-
name ?: getTypeName(interfaceClazz)
33-
}) ?: clazz.simpleName
34-
27+
val name = getTypeDefinition(clazz)?.name ?: clazz.simpleName
3528
return types[name] ?: throw TypeResolverError(getError(name))
3629
}
3730

0 commit comments

Comments
 (0)