Skip to content

Commit 949edb4

Browse files
author
abhi_rao
committed
This closes #331.
1 parent 471adcf commit 949edb4

File tree

2 files changed

+43
-9
lines changed

2 files changed

+43
-9
lines changed

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,8 @@ internal class NormalResolverInfo(val resolver: GraphQLResolver<*>, private val
1919
override val dataClassType = findDataClass()
2020

2121
private fun findDataClass(): Class<out Any> {
22-
// Grab the parent interface with type GraphQLResolver from our resolver and get its first type argument.
23-
val interfaceType = GenericType(resolverType, options).getGenericInterface(GraphQLResolver::class.java)
24-
if (interfaceType == null || interfaceType !is ParameterizedType) {
25-
error("${GraphQLResolver::class.java.simpleName} interface was not parameterized for: ${resolverType.name}")
26-
}
2722

28-
val type = TypeUtils.determineTypeArguments(resolverType, interfaceType)[GraphQLResolver::class.java.typeParameters[0]]
23+
val type = TypeUtils.getTypeArguments(resolverType, GraphQLResolver::class.java)[GraphQLResolver::class.java.typeParameters[0]]
2924

3025
if (type == null || type !is Class<*>) {
3126
throw ResolverError("Unable to determine data class for resolver '${resolverType.name}' from generic interface! This is most likely a bug with graphql-java-tools.")

src/test/groovy/com/coxautodev/graphql/tools/GenericResolverSpec.groovy

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ class GenericResolverSpec extends Specification {
1616
value: String
1717
}
1818
''')
19-
.resolvers(new QueryResolver(), new BarResolver())
19+
.resolvers(new QueryResolver1(), new BarResolver())
2020
.build()
2121
.makeExecutableSchema()
2222

2323
then:
2424
noExceptionThrown()
2525
}
2626

27-
class QueryResolver implements GraphQLQueryResolver {
27+
class QueryResolver1 implements GraphQLQueryResolver {
2828
Bar getBar() {
2929
return new Bar()
3030
}
@@ -33,7 +33,7 @@ class GenericResolverSpec extends Specification {
3333
class Bar {
3434
}
3535

36-
abstract class FooResolver<T> {
36+
abstract class FooResolver<T> implements GraphQLResolver<T> {
3737
String getValue(T foo) {
3838
return "value"
3939
}
@@ -42,4 +42,43 @@ class GenericResolverSpec extends Specification {
4242
class BarResolver extends FooResolver<Bar> implements GraphQLResolver<Bar> {
4343

4444
}
45+
46+
47+
def "methods from generic inherited resolvers are resolved"() {
48+
when:
49+
SchemaParser.newParser().schemaString('''\
50+
type Query {
51+
car: Car!
52+
}
53+
type Car {
54+
value: String
55+
}
56+
''')
57+
.resolvers(new QueryResolver2(), new CarResolver())
58+
.build()
59+
.makeExecutableSchema()
60+
61+
then:
62+
noExceptionThrown()
63+
}
64+
65+
66+
class QueryResolver2 implements GraphQLQueryResolver {
67+
Car getCar() {
68+
return new Car()
69+
}
70+
}
71+
72+
abstract class FooGraphQLResolver<T> implements GraphQLResolver<T> {
73+
String getValue(T foo) {
74+
return "value"
75+
}
76+
}
77+
78+
class Car {
79+
}
80+
81+
class CarResolver extends FooGraphQLResolver<Car> {
82+
83+
}
4584
}

0 commit comments

Comments
 (0)