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