fun generate()

in graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/EnumTypeGenerator.kt [42:87]


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

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

        val javaType =
            TypeSpec
                .enumBuilder(definition.name)
                .addModifiers(Modifier.PUBLIC)
                .addOptionalGeneratedAnnotation(config)

        if (definition.description != null) {
            javaType.addJavadoc("\$L", definition.description.content)
        }

        val mergedEnumDefinitions = definition.enumValueDefinitions + extensions.flatMap { it.enumValueDefinitions }

        mergedEnumDefinitions.forEach {
            val typeSpec = TypeSpec.anonymousClassBuilder("")
            if (it.description != null && it.description.content.isNotBlank()) {
                typeSpec.addJavadoc("\$L", it.description.content)
            }
            if (it.directives.isNotEmpty()) {
                val (annotations, comments) = applyDirectivesJava(it.directives, config)
                if (!comments.isNullOrBlank()) {
                    typeSpec.addJavadoc("\$L", comments)
                }
                for (entry in annotations) {
                    when (SiteTarget.valueOf(entry.key)) {
                        SiteTarget.FIELD -> typeSpec.addAnnotations(annotations[SiteTarget.FIELD.name])
                        else -> typeSpec.addAnnotations(annotations[entry.key])
                    }
                }
            }
            javaType.addEnumConstant(javaReservedKeywordSanitizer.sanitize(it.name), typeSpec.build())
        }

        val javaFile = JavaFile.builder(getPackageName(), javaType.build()).build()

        return CodeGenResult(javaEnumTypes = listOf(javaFile))
    }