diff --git a/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/GraphQLClientGenerator.kt b/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/GraphQLClientGenerator.kt index 43970dd049..65bca3ae06 100644 --- a/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/GraphQLClientGenerator.kt +++ b/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/GraphQLClientGenerator.kt @@ -216,6 +216,7 @@ class GraphQLClientGenerator( // shared types sharedTypes.putAll(context.enumClassToTypeSpecs.mapValues { listOf(it.value) }) sharedTypes.putAll(context.inputClassToTypeSpecs.mapValues { listOf(it.value) }) + sharedTypes.putAll(context.responseClassToTypeSpecs.mapValues { listOf(it.value) }) context.scalarClassToConverterTypeSpecs .values .forEach { diff --git a/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/GraphQLClientGeneratorContext.kt b/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/GraphQLClientGeneratorContext.kt index bef5742b93..e13a5ea096 100644 --- a/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/GraphQLClientGeneratorContext.kt +++ b/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/GraphQLClientGeneratorContext.kt @@ -45,6 +45,7 @@ data class GraphQLClientGeneratorContext( // shared type caches val enumClassToTypeSpecs: MutableMap = mutableMapOf() val inputClassToTypeSpecs: MutableMap = mutableMapOf() + val responseClassToTypeSpecs: MutableMap = mutableMapOf() val scalarClassToConverterTypeSpecs: MutableMap = mutableMapOf() val typeAliases: MutableMap = mutableMapOf() internal fun isTypeAlias(typeName: String) = typeAliases.containsKey(typeName) diff --git a/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateTypeName.kt b/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateTypeName.kt index b74b4fca92..05604e8955 100644 --- a/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateTypeName.kt +++ b/plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateTypeName.kt @@ -258,3 +258,16 @@ private fun calculateSelectedFields( } return result } + +/** + * Find an existing shared response type for the given GraphQL type name + */ +private fun findSharedResponseType( + context: GraphQLClientGeneratorContext, + graphQLTypeName: String +): ClassName? { + return context.responseClassToTypeSpecs.keys.find { className -> + className.simpleName == graphQLTypeName && + className.packageName.endsWith(".responses") + } +}