From 965d0bb64d43e00afe886c5ff195d6366f13a8d9 Mon Sep 17 00:00:00 2001 From: Ciaran Liedeman Date: Sat, 26 Oct 2019 17:09:45 +0200 Subject: [PATCH] Add the TrivialDataFetcher interface to MethodFieldResolver so that it can be excluded from tracing --- .../graphql/tools/MethodFieldResolver.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/coxautodev/graphql/tools/MethodFieldResolver.kt b/src/main/kotlin/com/coxautodev/graphql/tools/MethodFieldResolver.kt index 2b26e009..967a50b9 100644 --- a/src/main/kotlin/com/coxautodev/graphql/tools/MethodFieldResolver.kt +++ b/src/main/kotlin/com/coxautodev/graphql/tools/MethodFieldResolver.kt @@ -3,6 +3,7 @@ package com.coxautodev.graphql.tools import com.coxautodev.graphql.tools.SchemaParserOptions.GenericWrapper import com.esotericsoftware.reflectasm.MethodAccess import com.fasterxml.jackson.core.type.TypeReference +import graphql.TrivialDataFetcher import graphql.execution.batched.Batched import graphql.language.FieldDefinition import graphql.language.NonNullType @@ -105,7 +106,17 @@ internal class MethodFieldResolver(field: FieldDefinition, search: FieldResolver return if (batched) { BatchedMethodFieldResolverDataFetcher(getSourceResolver(), this.method, args, options) } else { - MethodFieldResolverDataFetcher(getSourceResolver(), this.method, args, options) + if (args.size == 0 + && this.method.parameterCount == 0 + && this.method.name.startsWith("get") + && this.search.type is java.lang.Class<*> + && (this.search.type as java.lang.Class<*>).getMethod(this.method.getName()) != null + ) { + TrivialMethodFieldResolverDataFetcher(getSourceResolver(), this.method, args, options) + } else { + MethodFieldResolverDataFetcher(getSourceResolver(), this.method, args, options) + } + } } @@ -191,6 +202,10 @@ open class MethodFieldResolverDataFetcher(private val sourceResolver: SourceReso } } +open class TrivialMethodFieldResolverDataFetcher(private val sourceResolver: SourceResolver, method: Method, private val args: List, private val options: SchemaParserOptions) : MethodFieldResolverDataFetcher(sourceResolver, method, args, options), TrivialDataFetcher { + +} + private suspend inline fun MethodAccess.invokeSuspend(target: Any, methodIndex: Int, args: Array): Any? { return suspendCoroutineUninterceptedOrReturn { continuation -> invoke(target, methodIndex, *args + continuation)