in graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/ConstantsGenerator.kt [42:190]
fun generate(): CodeGenResult {
val javaType =
TypeSpec
.classBuilder("DgsConstants")
.addOptionalGeneratedAnnotation(config)
.addModifiers(Modifier.PUBLIC)
val types = mutableMapOf<String, TypeSpec.Builder>()
document.definitions
.filterIsInstance<ObjectTypeDefinition>()
.asSequence()
.excludeSchemaTypeExtension()
.forEach {
val constantsType =
if (types.contains(it.name)) {
types[it.name]!!
} else {
createConstantTypeBuilder(config, it.name)
}
val extensions = findTypeExtensions(it.name, document.definitions)
val fields = it.fieldDefinitions + extensions.flatMap { ext -> ext.fieldDefinitions }
if (!types.contains(it.name)) {
constantsType.addField(
FieldSpec
.builder(ClassName.get(String::class.java), "TYPE_NAME")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
.initializer("\$S", it.name)
.build(),
)
}
fields.forEach { field ->
addFieldNameConstant(constantsType, field.name)
addQueryInputArgument(constantsType, field)
}
types[it.name] = constantsType
}
types.values.forEach {
javaType.addType(it.build())
}
document.definitions
.filterIsInstance<InputObjectTypeDefinition>()
.asSequence()
.excludeSchemaTypeExtension()
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)
constantsType.addField(
FieldSpec
.builder(ClassName.get(String::class.java), "TYPE_NAME")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
.initializer("\$S", it.name)
.build(),
)
for (definition in it.inputValueDefinitions) {
addFieldNameConstant(constantsType, definition.name)
}
val extensions = findInputExtensions(it.name, document.definitions)
for (extension in extensions) {
for (definition in extension.inputValueDefinitions) {
addFieldNameConstant(constantsType, definition.name)
}
}
javaType.addType(constantsType.build())
}
document.definitions
.filterIsInstance<InterfaceTypeDefinition>()
.asSequence()
.excludeSchemaTypeExtension()
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)
constantsType.addField(
FieldSpec
.builder(ClassName.get(String::class.java), "TYPE_NAME")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
.initializer("\$S", it.name)
.build(),
)
for (definition in it.fieldDefinitions) {
addFieldNameConstant(constantsType, definition.name)
}
val extensions = findInterfaceExtensions(it.name, document.definitions)
for (extension in extensions) {
for (definition in extension.fieldDefinitions) {
addFieldNameConstant(constantsType, definition.name)
}
}
javaType.addType(constantsType.build())
}
document.definitions
.filterIsInstance<UnionTypeDefinition>()
.asSequence()
.excludeSchemaTypeExtension()
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)
constantsType.addField(
FieldSpec
.builder(ClassName.get(String::class.java), "TYPE_NAME")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
.initializer("\$S", it.name)
.build(),
)
}
if (document.definitions.any { it is ObjectTypeDefinition && it.name == "Query" }) {
javaType.addField(
FieldSpec
.builder(ClassName.get(String::class.java), "QUERY_TYPE")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
.initializer(""""Query"""")
.build(),
)
}
if (document.definitions.any { it is ObjectTypeDefinition && it.name == "Mutation" }) {
javaType.addField(
FieldSpec
.builder(ClassName.get(String::class.java), "MUTATION_TYPE")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
.initializer(""""Mutation"""")
.build(),
)
}
if (document.definitions.any { it is ObjectTypeDefinition && it.name == "Subscription" }) {
javaType.addField(
FieldSpec
.builder(ClassName.get(String::class.java), "SUBSCRIPTION_TYPE")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
.initializer(""""Subscription"""")
.build(),
)
}
val javaFile = JavaFile.builder(config.packageName, javaType.build()).build()
return CodeGenResult(javaConstants = listOf(javaFile))
}