fun generate()

in graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/kotlin/KotlinEnumTypeGenerator.kt [39:79]


    fun generate(
        definition: EnumTypeDefinition,
        extensions: List<EnumTypeDefinition>,
    ): CodeGenResult {
        if (definition.shouldSkip(config)) {
            return CodeGenResult.EMPTY
        }

        logger.info("Generating enum type ${definition.name}")

        val kotlinType =
            TypeSpec
                .classBuilder(definition.name)
                .addOptionalGeneratedAnnotation(config)
                .addModifiers(KModifier.ENUM)

        if (definition.description != null) {
            kotlinType.addKdoc("%L", definition.description.sanitizeKdoc())
        }

        val mergedEnumDefinitions = definition.enumValueDefinitions + extensions.flatMap { it.enumValueDefinitions }
        mergedEnumDefinitions.forEach {
            var typeSpec = TypeSpec.anonymousClassBuilder()
            if (it.description != null) {
                typeSpec = TypeSpec.enumBuilder(it.name).addKdoc("%L", it.description.sanitizeKdoc())
            }
            if (it.directives.isNotEmpty()) {
                typeSpec =
                    typeSpec.addAnnotations(
                        applyDirectivesKotlin(it.directives, config),
                    )
            }
            kotlinType.addEnumConstant(kotlinReservedKeywordSanitizer.sanitize(it.name), typeSpec.build())
        }

        kotlinType.addType(TypeSpec.companionObjectBuilder().addOptionalGeneratedAnnotation(config).build())

        val typeSpec = kotlinType.build()
        val fileSpec = FileSpec.builder(getPackageName(), typeSpec.name!!).addType(typeSpec).build()
        return CodeGenResult(kotlinEnumTypes = listOf(fileSpec))
    }