in graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/kotlin/KotlinUnionTypeGenerator.kt [39:70]
fun generate(
definition: UnionTypeDefinition,
extensions: List<UnionTypeExtensionDefinition>,
): CodeGenResult {
if (definition.shouldSkip(config)) {
return CodeGenResult.EMPTY
}
val interfaceBuilder =
TypeSpec
.interfaceBuilder(definition.name)
.addOptionalGeneratedAnnotation(config)
val memberTypes =
definition.memberTypes
.plus(extensions.flatMap { it.memberTypes })
.asSequence()
.filterIsInstance<TypeName>()
.map { member -> typeUtils.findKtInterfaceName(member.name, packageName) }
.filterIsInstance<ClassName>()
.toList()
if (memberTypes.isNotEmpty()) {
interfaceBuilder.addAnnotation(jsonTypeInfoAnnotation())
interfaceBuilder.addAnnotation(jsonSubTypesAnnotation(memberTypes))
}
interfaceBuilder.addType(TypeSpec.companionObjectBuilder().addOptionalGeneratedAnnotation(config).build())
val fileSpec = FileSpec.get(packageName, interfaceBuilder.build())
return CodeGenResult(kotlinInterfaces = listOf(fileSpec))
}