Skip to content

Commit bb5c2d7

Browse files
committed
Move MissingFieldResolver to its own file
1 parent 9ed6ea1 commit bb5c2d7

15 files changed

+104
-61
lines changed

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

Lines changed: 0 additions & 46 deletions
This file was deleted.

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package graphql.kickstart.tools
22

3+
import graphql.kickstart.tools.resolver.FieldResolverScanner
34
import graphql.kickstart.tools.util.GraphQLRootResolver
45
import graphql.kickstart.tools.util.JavaType
56
import org.apache.commons.lang3.reflect.TypeUtils

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package graphql.kickstart.tools
22

3+
import graphql.kickstart.tools.resolver.FieldResolver
34
import graphql.kickstart.tools.util.BiMap
45
import graphql.kickstart.tools.util.JavaType
56
import graphql.language.FieldDefinition

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package graphql.kickstart.tools
22

3+
import graphql.kickstart.tools.resolver.FieldResolver
4+
import graphql.kickstart.tools.resolver.FieldResolverScanner
35
import graphql.kickstart.tools.util.*
46
import graphql.language.*
57
import graphql.schema.GraphQLScalarType
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package graphql.kickstart.tools.resolver
2+
3+
import graphql.kickstart.tools.*
4+
import graphql.kickstart.tools.GenericType
5+
import graphql.kickstart.tools.ResolverError
6+
import graphql.kickstart.tools.ResolverInfo
7+
import graphql.kickstart.tools.TypeClassMatcher
8+
import graphql.kickstart.tools.util.JavaType
9+
import graphql.language.FieldDefinition
10+
import graphql.schema.DataFetcher
11+
import graphql.schema.DataFetchingEnvironment
12+
13+
/**
14+
* @author Andrew Potter
15+
*/
16+
internal abstract class FieldResolver(
17+
val field: FieldDefinition,
18+
val search: FieldResolverScanner.Search,
19+
val options: SchemaParserOptions,
20+
relativeTo: JavaType
21+
) {
22+
val resolverInfo: ResolverInfo = search.resolverInfo
23+
val genericType = GenericType(search.type, options).relativeToPotentialParent(relativeTo)
24+
25+
abstract fun scanForMatches(): List<TypeClassMatcher.PotentialMatch>
26+
27+
abstract fun createDataFetcher(): DataFetcher<*>
28+
29+
/**
30+
* Add source resolver depending on whether or not this is a resolver method
31+
*/
32+
protected fun getSourceResolver(): SourceResolver {
33+
return if (this.search.source != null) {
34+
{ this.search.source }
35+
} else {
36+
{ environment ->
37+
val source = environment.getSource<Any>()
38+
39+
if (!this.genericType.isAssignableFrom(source.javaClass)) {
40+
throw ResolverError("Expected source object to be an instance of '${this.genericType.getRawClass().name}' but instead got '${source.javaClass.name}'")
41+
}
42+
43+
source
44+
}
45+
}
46+
}
47+
}
48+
49+
internal typealias SourceResolver = (DataFetchingEnvironment) -> Any

src/main/kotlin/graphql/kickstart/tools/FieldResolverScanner.kt renamed to src/main/kotlin/graphql/kickstart/tools/resolver/FieldResolverScanner.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
package graphql.kickstart.tools
1+
package graphql.kickstart.tools.resolver
22

33
import graphql.Scalars
4+
import graphql.kickstart.tools.ResolverInfo
5+
import graphql.kickstart.tools.RootResolverInfo
6+
import graphql.kickstart.tools.SchemaParserOptions
47
import graphql.kickstart.tools.util.GraphQLLangType
58
import graphql.kickstart.tools.util.JavaType
69
import graphql.kickstart.tools.util.declaredNonProxyMethods
@@ -12,7 +15,6 @@ import org.apache.commons.lang3.ClassUtils
1215
import org.apache.commons.lang3.reflect.FieldUtils
1316
import org.slf4j.LoggerFactory
1417
import java.lang.reflect.Modifier
15-
import java.lang.reflect.ParameterizedType
1618
import java.lang.reflect.Type
1719
import kotlin.reflect.full.valueParameters
1820
import kotlin.reflect.jvm.javaType
@@ -78,7 +80,7 @@ internal class FieldResolverScanner(val options: SchemaParserOptions) {
7880
}
7981

8082
if (java.util.Map::class.java.isAssignableFrom(search.type.unwrap())) {
81-
return PropertyMapResolver(field, search, options, search.type.unwrap())
83+
return MapFieldResolver(field, search, options, search.type.unwrap())
8284
}
8385

8486
return null

src/main/kotlin/graphql/kickstart/tools/PropertyMapResolver.kt renamed to src/main/kotlin/graphql/kickstart/tools/resolver/MapFieldResolver.kt

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
package graphql.kickstart.tools
1+
package graphql.kickstart.tools.resolver
22

33
import com.fasterxml.classmate.TypeResolver
4+
import graphql.kickstart.tools.SchemaClassScanner
5+
import graphql.kickstart.tools.SchemaParserOptions
6+
import graphql.kickstart.tools.TypeClassMatcher
47
import graphql.kickstart.tools.util.JavaType
58
import graphql.language.FieldDefinition
69
import graphql.schema.DataFetcher
@@ -9,9 +12,9 @@ import graphql.schema.DataFetchingEnvironment
912
/**
1013
* @author Nick Weedon
1114
*
12-
* The PropertyMapResolver implements the Map (i.e. property map) specific portion of the logic within the GraphQL PropertyDataFetcher class.
15+
* The MapFieldResolver implements the Map (i.e. property map) specific portion of the logic within the GraphQL PropertyDataFetcher class.
1316
*/
14-
internal class PropertyMapResolver(
17+
internal class MapFieldResolver(
1518
field: FieldDefinition,
1619
search: FieldResolverScanner.Search,
1720
options: SchemaParserOptions,
@@ -34,17 +37,17 @@ internal class PropertyMapResolver(
3437
}
3538

3639
override fun createDataFetcher(): DataFetcher<*> {
37-
return PropertyMapResolverDataFetcher(getSourceResolver(), field.name)
40+
return MapFieldResolverDataFetcher(getSourceResolver(), field.name)
3841
}
3942

4043
override fun scanForMatches(): List<TypeClassMatcher.PotentialMatch> {
4144
return listOf(TypeClassMatcher.PotentialMatch.returnValue(field.type, mapGenericValue, genericType, SchemaClassScanner.FieldTypeReference(field.name)))
4245
}
4346

44-
override fun toString() = "PropertyMapResolverDataFetcher{key=${field.name}}"
47+
override fun toString() = "MapFieldResolver{key=${field.name}}"
4548
}
4649

47-
internal class PropertyMapResolverDataFetcher(
50+
internal class MapFieldResolverDataFetcher(
4851
private val sourceResolver: SourceResolver,
4952
private val key: String
5053
) : DataFetcher<Any> {
@@ -54,7 +57,7 @@ internal class PropertyMapResolverDataFetcher(
5457
if (resolvedSourceObject is Map<*, *>) {
5558
return resolvedSourceObject[key]
5659
} else {
57-
throw RuntimeException("PropertyMapResolverDataFetcher attempt to fetch a field from an object instance that was not a map")
60+
throw RuntimeException("MapFieldResolver attempt to fetch a field from an object instance that was not a map")
5861
}
5962
}
6063
}

src/main/kotlin/graphql/kickstart/tools/MethodFieldResolver.kt renamed to src/main/kotlin/graphql/kickstart/tools/resolver/MethodFieldResolver.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
package graphql.kickstart.tools
1+
package graphql.kickstart.tools.resolver
22

33
import com.fasterxml.jackson.core.type.TypeReference
44
import graphql.TrivialDataFetcher
5+
import graphql.kickstart.tools.*
6+
import graphql.kickstart.tools.DataClassTypeResolverInfo
7+
import graphql.kickstart.tools.ResolverError
8+
import graphql.kickstart.tools.SchemaClassScanner
59
import graphql.kickstart.tools.SchemaParserOptions.GenericWrapper
10+
import graphql.kickstart.tools.TypeClassMatcher
611
import graphql.kickstart.tools.util.JavaType
712
import graphql.kickstart.tools.util.coroutineScope
813
import graphql.kickstart.tools.util.isTrivialDataFetcher
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package graphql.kickstart.tools.resolver
2+
3+
import graphql.kickstart.tools.MissingResolverInfo
4+
import graphql.kickstart.tools.SchemaParserOptions
5+
import graphql.kickstart.tools.TypeClassMatcher
6+
import graphql.language.FieldDefinition
7+
import graphql.schema.DataFetcher
8+
9+
internal class MissingFieldResolver(
10+
field: FieldDefinition,
11+
options: SchemaParserOptions
12+
) : FieldResolver(field, FieldResolverScanner.Search(Any::class.java, MissingResolverInfo(), null), options, Any::class.java) {
13+
14+
override fun scanForMatches(): List<TypeClassMatcher.PotentialMatch> = listOf()
15+
16+
override fun createDataFetcher(): DataFetcher<*> = DataFetcher<Any> { TODO("Schema resolver not implemented") }
17+
}

src/main/kotlin/graphql/kickstart/tools/PropertyFieldResolver.kt renamed to src/main/kotlin/graphql/kickstart/tools/resolver/PropertyFieldResolver.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
package graphql.kickstart.tools
1+
package graphql.kickstart.tools.resolver
22

3+
import graphql.kickstart.tools.SchemaClassScanner
4+
import graphql.kickstart.tools.SchemaParserOptions
5+
import graphql.kickstart.tools.TypeClassMatcher
36
import graphql.language.FieldDefinition
47
import graphql.schema.DataFetcher
58
import graphql.schema.DataFetchingEnvironment

0 commit comments

Comments
 (0)