package io.leangen.graphql.generator.mapping.core; import graphql.execution.DataFetcherResult; import graphql.schema.GraphQLInputType; import io.leangen.geantyref.GenericTypeReflector; import io.leangen.graphql.generator.mapping.TypeMapper; import io.leangen.graphql.generator.mapping.TypeMappingEnvironment; import io.leangen.graphql.generator.mapping.common.AbstractTypeSubstitutingMapper; import io.leangen.graphql.util.ClassUtils; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.AnnotatedType; import java.util.Set; public class DataFetcherResultMapper<T> extends AbstractTypeSubstitutingMapper<T> { @Override public GraphQLInputType toGraphQLInputType(AnnotatedType javaType, Set<Class<? extends TypeMapper>> mappersToSkip, TypeMappingEnvironment env) { throw new UnsupportedOperationException(DataFetcherResult.class.getSimpleName() + " can not be used as an input type"); } @Override public AnnotatedType getSubstituteType(AnnotatedType original) { AnnotatedType innerType = GenericTypeReflector.getTypeParameter(original, DataFetcherResult.class.getTypeParameters()[0]); return ClassUtils.addAnnotations(innerType, original.getAnnotations()); } @Override public boolean supports(AnnotatedElement element, AnnotatedType type) { return ClassUtils.isSuperClass(DataFetcherResult.class, type); } }