in graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/kotlin/KotlinConstantsGenerator.kt [39:168]
fun generate(): CodeGenResult {
val baseConstantsType =
TypeSpec
.objectBuilder("DgsConstants")
.addOptionalGeneratedAnnotation(config)
document.definitions
.filterIsInstance<ObjectTypeDefinition>()
.excludeSchemaTypeExtension()
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)
val extensions = findTypeExtensions(it.name, document.definitions)
val fields =
(it.fieldDefinitions + extensions.flatMap { ext -> ext.fieldDefinitions })
.distinctBy { def -> def.name }
constantsType.addProperty(
PropertySpec
.builder("TYPE_NAME", String::class)
.addModifiers(KModifier.CONST)
.initializer(""""${it.name}"""")
.build(),
)
fields.filter(ReservedKeywordFilter.filterInvalidNames).forEach { field ->
addFieldName(constantsType, field.name)
addQueryInputArgument(constantsType, field)
}
baseConstantsType.addType(constantsType.build())
}
document.definitions
.filterIsInstance<InputObjectTypeDefinition>()
.excludeSchemaTypeExtension()
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)
val extensions = findInputExtensions(it.name, document.definitions)
val fields = it.inputValueDefinitions + extensions.flatMap { ext -> ext.inputValueDefinitions }
constantsType.addProperty(
PropertySpec
.builder("TYPE_NAME", String::class)
.addModifiers(KModifier.CONST)
.initializer(""""${it.name}"""")
.build(),
)
fields.filter(ReservedKeywordFilter.filterInvalidNames).forEach { field ->
addFieldName(constantsType, field.name)
}
baseConstantsType.addType(constantsType.build())
}
document.definitions
.filterIsInstance<InterfaceTypeDefinition>()
.excludeSchemaTypeExtension()
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)
constantsType.addProperty(
PropertySpec
.builder("TYPE_NAME", String::class)
.addModifiers(KModifier.CONST)
.initializer(""""${it.name}"""")
.build(),
)
val extensions = SchemaExtensionsUtils.findInterfaceExtensions(it.name, document.definitions)
val fields = it.fieldDefinitions + extensions.flatMap { ext -> ext.fieldDefinitions }
fields.filter(ReservedKeywordFilter.filterInvalidNames).forEach { field ->
addFieldName(constantsType, field.name)
}
baseConstantsType.addType(constantsType.build())
}
document.definitions
.filterIsInstance<UnionTypeDefinition>()
.excludeSchemaTypeExtension()
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)
constantsType.addProperty(
PropertySpec
.builder("TYPE_NAME", String::class)
.addModifiers(KModifier.CONST)
.initializer(""""${it.name}"""")
.build(),
)
baseConstantsType.addType(constantsType.build())
}
if (document.definitions.any { it is ObjectTypeDefinition && it.name == "Query" }) {
baseConstantsType.addProperty(
PropertySpec
.builder("QUERY_TYPE", String::class)
.addModifiers(KModifier.CONST)
.initializer(""""Query"""")
.build(),
)
}
if (document.definitions.any { it is ObjectTypeDefinition && it.name == "Mutation" }) {
baseConstantsType.addProperty(
PropertySpec
.builder("Mutation_TYPE", String::class)
.addModifiers(KModifier.CONST)
.initializer(""""Mutation"""")
.build(),
)
}
if (document.definitions.any { it is ObjectTypeDefinition && it.name == "Subscription" }) {
baseConstantsType.addProperty(
PropertySpec
.builder(
"Subscription_TYPE",
String::class,
).addModifiers(KModifier.CONST)
.initializer(""""Subscription"""")
.build(),
)
}
val fileSpec = FileSpec.builder(config.packageName, "DgsConstants").addType(baseConstantsType.build()).build()
return CodeGenResult(kotlinConstants = listOf(fileSpec))
}