smallrye-graphql icon indicating copy to clipboard operation
smallrye-graphql copied to clipboard

Client Kotlin exception with list of enum as input type

Open robp94 opened this issue 3 years ago • 1 comments

Using the client in kotlin with a list of enums as input types results in a RuntimeException.

java.lang.RuntimeException: unsupported reflection type class sun.reflect.generics.reflectiveObjects.WildcardTypeImpl
	at io.smallrye.graphql.client.impl.typesafe.reflection.TypeInfo.raw(TypeInfo.java:352)
	at io.smallrye.graphql.client.impl.typesafe.reflection.TypeInfo.getRawType(TypeInfo.java:292)
	at io.smallrye.graphql.client.impl.typesafe.reflection.TypeInfo.isPrimitive(TypeInfo.java:194)
	at io.smallrye.graphql.client.impl.typesafe.reflection.TypeInfo.isScalar(TypeInfo.java:182)
	at io.smallrye.graphql.client.impl.typesafe.reflection.ParameterInfo.graphQlInputTypeName(ParameterInfo.java:106)
	at io.smallrye.graphql.client.impl.typesafe.reflection.ParameterInfo.withExclamationMark(ParameterInfo.java:56)
	at io.smallrye.graphql.client.impl.typesafe.reflection.ParameterInfo.graphQlInputTypeName(ParameterInfo.java:45)
	at io.smallrye.graphql.client.impl.typesafe.QueryBuilder.declare(QueryBuilder.java:58)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at io.smallrye.graphql.client.impl.typesafe.QueryBuilder.build(QueryBuilder.java:38)

This only happens if the client interface is in kotlin, if it is in java it works.

java

    @Mutation
    List<E> list(@NonNull List<@NonNull E> es);

kotlin

    @Mutation
    fun list(es: @NonNull List<@NonNull E>): List<E>

Reproducers: code-with-quarkus-kotlin-graphql-client-java.zip code-with-quarkus-kotlin-graphql-client.zip

Running the following query results in the exception

query d {startList}

robp94 avatar Jan 10 '23 16:01 robp94

I have no idea what Kotlin is producing here. Looks like it's using internal classes in sun.reflect.generics.reflectiveObjects. Maybe you can investigate and provide a PR?

t1 avatar Jan 16 '23 20:01 t1