diff --git a/src/main/kotlin/com/coxautodev/graphql/tools/DictionaryTypeResolver.kt b/src/main/kotlin/com/coxautodev/graphql/tools/DictionaryTypeResolver.kt index 98add995..02398bb0 100644 --- a/src/main/kotlin/com/coxautodev/graphql/tools/DictionaryTypeResolver.kt +++ b/src/main/kotlin/com/coxautodev/graphql/tools/DictionaryTypeResolver.kt @@ -12,10 +12,21 @@ import graphql.schema.TypeResolver * @author Andrew Potter */ abstract class DictionaryTypeResolver(private val dictionary: BiMap, TypeDefinition<*>>, private val types: Map) : TypeResolver { + private fun getTypeName(clazz: Class): String? { + val name = dictionary[clazz]?.name + + if (name == null && clazz.superclass != null) { + return getTypeName(clazz.superclass) + } + + return name + } override fun getType(env: TypeResolutionEnvironment): GraphQLObjectType? { val clazz = env.getObject().javaClass - val name = dictionary[clazz]?.name ?: clazz.simpleName + val name = clazz.interfaces.fold(getTypeName(clazz), { name, interfaceClazz -> + name ?: getTypeName(interfaceClazz) + }) ?: clazz.simpleName return types[name] ?: throw TypeResolverError(getError(name)) }