From ec749ff566364e52ce63b9dd013118de95e81761 Mon Sep 17 00:00:00 2001 From: Tobias Kammerer Date: Thu, 11 Jan 2018 22:37:24 +0100 Subject: [PATCH 1/3] Quick and dirty warning fix for Spring-proxies. --- src/main/kotlin/com/coxautodev/graphql/tools/ResolverInfo.kt | 2 +- .../kotlin/com/coxautodev/graphql/tools/SchemaClassScanner.kt | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/coxautodev/graphql/tools/ResolverInfo.kt b/src/main/kotlin/com/coxautodev/graphql/tools/ResolverInfo.kt index beb0d932..914b609e 100644 --- a/src/main/kotlin/com/coxautodev/graphql/tools/ResolverInfo.kt +++ b/src/main/kotlin/com/coxautodev/graphql/tools/ResolverInfo.kt @@ -6,7 +6,7 @@ import java.lang.reflect.ParameterizedType internal abstract class ResolverInfo { abstract fun getFieldSearches(): List - protected fun getRealResolverClass(resolver: GraphQLResolver<*>, options: SchemaParserOptions) = + fun getRealResolverClass(resolver: GraphQLResolver<*>, options: SchemaParserOptions) = options.proxyHandlers.find { it.canHandle(resolver) }?.getTargetClass(resolver) ?: resolver.javaClass } diff --git a/src/main/kotlin/com/coxautodev/graphql/tools/SchemaClassScanner.kt b/src/main/kotlin/com/coxautodev/graphql/tools/SchemaClassScanner.kt index 14cbb0c7..6ae59fd9 100644 --- a/src/main/kotlin/com/coxautodev/graphql/tools/SchemaClassScanner.kt +++ b/src/main/kotlin/com/coxautodev/graphql/tools/SchemaClassScanner.kt @@ -169,9 +169,8 @@ internal class SchemaClassScanner(initialDictionary: BiMap>, al } val observedRootTypes = fieldResolvers.filter { it.resolverInfo is RootResolverInfo && it.resolverInfo == rootType.resolverInfo }.map { it.search.type }.toSet() - rootType.resolvers.forEach { resolver -> - if(resolver.javaClass !in observedRootTypes) { + if(rootType.resolverInfo.getRealResolverClass(resolver, options) !in observedRootTypes) { log.warn("Root ${rootType.name} resolver was provided but no methods on it were used in data fetchers for GraphQL type '${rootType.type.name}'! Either remove the ${rootType.resolverInterface.name} interface from the resolver or remove the resolver entirely: $resolver") } } From 657907461bd80f321f3dcbd22451b1c900fbfe74 Mon Sep 17 00:00:00 2001 From: Tobias Kammerer Date: Tue, 16 Jan 2018 17:24:42 +0100 Subject: [PATCH 2/3] Fix for #107. There might be a better option to detect guice proxies. --- .../graphql/tools/GuiceAopProxyHandler.java | 22 +++++++++++++++++++ .../graphql/tools/SchemaParserBuilder.kt | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/com/coxautodev/graphql/tools/GuiceAopProxyHandler.java diff --git a/src/main/kotlin/com/coxautodev/graphql/tools/GuiceAopProxyHandler.java b/src/main/kotlin/com/coxautodev/graphql/tools/GuiceAopProxyHandler.java new file mode 100644 index 00000000..e5cccfde --- /dev/null +++ b/src/main/kotlin/com/coxautodev/graphql/tools/GuiceAopProxyHandler.java @@ -0,0 +1,22 @@ +package com.coxautodev.graphql.tools; + +public class GuiceAopProxyHandler implements ProxyHandler { + @Override + public boolean canHandle(GraphQLResolver resolver) { + return isGuiceProxy(resolver); + } + + @Override + public Class getTargetClass(GraphQLResolver resolver) { + Class targetClass = resolver.getClass(); + if (isGuiceProxy(resolver)) { + return resolver.getClass().getSuperclass(); + } else { + return targetClass; + } + } + + private boolean isGuiceProxy(GraphQLResolver resolver) { + return resolver.getClass().getName().contains("$$EnhancerByGuice$$"); + } +} diff --git a/src/main/kotlin/com/coxautodev/graphql/tools/SchemaParserBuilder.kt b/src/main/kotlin/com/coxautodev/graphql/tools/SchemaParserBuilder.kt index d74165ac..08c4aa8a 100644 --- a/src/main/kotlin/com/coxautodev/graphql/tools/SchemaParserBuilder.kt +++ b/src/main/kotlin/com/coxautodev/graphql/tools/SchemaParserBuilder.kt @@ -234,7 +234,7 @@ data class SchemaParserOptions internal constructor(val genericWrappers: List } - private val proxyHandlers: MutableList = mutableListOf(Spring4AopProxyHandler()) + private val proxyHandlers: MutableList = mutableListOf(Spring4AopProxyHandler(), GuiceAopProxyHandler()) fun genericWrappers(genericWrappers: List) = this.apply { this.genericWrappers.addAll(genericWrappers) From e90441964e0f571999fdca9a473e7535331b2c3e Mon Sep 17 00:00:00 2001 From: Tobias Kammerer Date: Tue, 16 Jan 2018 18:21:11 +0100 Subject: [PATCH 3/3] #107 removed unnecessary second 'canHandle' check. --- .../com/coxautodev/graphql/tools/GuiceAopProxyHandler.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/kotlin/com/coxautodev/graphql/tools/GuiceAopProxyHandler.java b/src/main/kotlin/com/coxautodev/graphql/tools/GuiceAopProxyHandler.java index e5cccfde..d0d023c5 100644 --- a/src/main/kotlin/com/coxautodev/graphql/tools/GuiceAopProxyHandler.java +++ b/src/main/kotlin/com/coxautodev/graphql/tools/GuiceAopProxyHandler.java @@ -8,12 +8,7 @@ public boolean canHandle(GraphQLResolver resolver) { @Override public Class getTargetClass(GraphQLResolver resolver) { - Class targetClass = resolver.getClass(); - if (isGuiceProxy(resolver)) { - return resolver.getClass().getSuperclass(); - } else { - return targetClass; - } + return resolver.getClass().getSuperclass(); } private boolean isGuiceProxy(GraphQLResolver resolver) {