fun generate()

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))
    }