Skip to content

Commit 08eb4ad

Browse files
Revert "Add Boolean fields to Data classes for supporting sparse update (#664)"
This reverts commit 89ed33a.
1 parent 467ba8a commit 08eb4ad

File tree

6 files changed

+116
-360
lines changed

6 files changed

+116
-360
lines changed

graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/CodeGenCli.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class CodeGenCli : CliktCommand("Generate Java sources for SCHEMA file(s)") {
4646
)
4747
private val language by option("--language", "-l", help = "Output language").choice("java", "kotlin", ignoreCase = true)
4848
.default("java")
49-
private val generateClient by option("--generate-client", "-c", help = "Generate client api").flag(default = false)
49+
private val generateClient by option("--generate-client", "-c", help = "Genereate client api").flag(default = false)
5050
private val generateDataTypes by option(
5151
"--generate-data-types",
5252
help = "Generate data types. Not needed when only generating an API"

graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/DataTypeGenerator.kt

+14-85
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,11 @@
1919
package com.netflix.graphql.dgs.codegen.generators.java
2020

2121
import com.netflix.graphql.dgs.codegen.*
22-
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.capitalized
2322
import com.netflix.graphql.dgs.codegen.generators.shared.SiteTarget
2423
import com.netflix.graphql.dgs.codegen.generators.shared.applyDirectivesJava
2524
import com.squareup.javapoet.*
2625
import graphql.language.*
2726
import graphql.language.TypeName
28-
import graphql.schema.idl.TypeUtil
2927
import org.slf4j.Logger
3028
import org.slf4j.LoggerFactory
3129
import java.io.Serializable
@@ -83,15 +81,13 @@ class DataTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTyp
8381
if (config.generateDataTypes) {
8482
val fieldDefinitions = definition.fieldDefinitions
8583
.filterSkipped()
86-
.map { fieldDefinition ->
87-
val isNullable = !TypeUtil.isNonNull(fieldDefinition.type)
84+
.map {
8885
Field(
89-
fieldDefinition.name,
90-
typeUtils.findReturnType(fieldDefinition.type, useInterfaceType, true),
86+
it.name,
87+
typeUtils.findReturnType(it.type, useInterfaceType, true),
9188
overrideGetter = overrideGetter,
92-
description = fieldDefinition.description,
93-
directives = fieldDefinition.directives,
94-
isNullable = isNullable
89+
description = it.description,
90+
directives = it.directives
9591
)
9692
}
9793
.plus(
@@ -126,7 +122,6 @@ class InputTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTy
126122

127123
val name = definition.name
128124
val fieldDefinitions = definition.inputValueDefinitions.map {
129-
val isNullable = !TypeUtil.isNonNull(it.type)
130125
val defaultValue = it.defaultValue?.let { defVal ->
131126
when (defVal) {
132127
is BooleanValue -> CodeBlock.of("\$L", defVal.isValue)
@@ -160,8 +155,7 @@ class InputTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTy
160155
type = typeUtils.findReturnType(it.type),
161156
initialValue = defaultValue,
162157
description = it.description,
163-
directives = it.directives,
164-
isNullable = isNullable
158+
directives = it.directives
165159
)
166160
}.plus(extensions.flatMap { it.inputValueDefinitions }.map { Field(it.name, typeUtils.findReturnType(it.type)) })
167161
return generate(name, emptyList(), fieldDefinitions, definition.description, definition.directives)
@@ -173,7 +167,7 @@ class InputTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTy
173167
}
174168
}
175169

176-
internal data class Field(val name: String, val type: com.squareup.javapoet.TypeName, val initialValue: CodeBlock? = null, val overrideGetter: Boolean = false, val interfaceType: com.squareup.javapoet.TypeName? = null, val description: Description? = null, val directives: List<Directive> = listOf(), val isNullable: Boolean = true)
170+
internal data class Field(val name: String, val type: com.squareup.javapoet.TypeName, val initialValue: CodeBlock? = null, val overrideGetter: Boolean = false, val interfaceType: com.squareup.javapoet.TypeName? = null, val description: Description? = null, val directives: List<Directive> = listOf())
177171

178172
abstract class BaseDataTypeGenerator(
179173
internal val packageName: String,
@@ -233,7 +227,7 @@ abstract class BaseDataTypeGenerator(
233227

234228
addEquals(javaType)
235229
addHashcode(javaType)
236-
addBuilder(fields, javaType)
230+
addBuilder(javaType)
237231

238232
val javaFile = JavaFile.builder(packageName, javaType.build()).build()
239233

@@ -347,22 +341,7 @@ abstract class BaseDataTypeGenerator(
347341
constructorBuilder
348342
.addParameter(parameterBuilder.build())
349343
.addModifiers(Modifier.PUBLIC)
350-
}
351-
352-
fieldDefinitions.forEach {
353-
val constructor = constructorBuilder
354-
.addStatement(
355-
"this.\$N = \$N",
356-
ReservedKeywordSanitizer.sanitize(it.name),
357-
ReservedKeywordSanitizer.sanitize(it.name)
358-
)
359-
if (it.isNullable && it.initialValue == null) {
360-
constructorBuilder
361-
.addStatement(
362-
"this.\$N = true",
363-
generateBooleanFieldName(ReservedKeywordSanitizer.sanitize(it.name))
364-
)
365-
}
344+
.addStatement("this.\$N = \$N", ReservedKeywordSanitizer.sanitize(it.name), ReservedKeywordSanitizer.sanitize(it.name))
366345
}
367346

368347
javaType.addMethod(constructorBuilder.build())
@@ -381,35 +360,6 @@ abstract class BaseDataTypeGenerator(
381360

382361
private fun addField(fieldDefinition: Field, javaType: TypeSpec.Builder) {
383362
addFieldWithGetterAndSetter(fieldDefinition.type, fieldDefinition, javaType)
384-
// Generate for all nullable fields without any defaults
385-
if (fieldDefinition.isNullable && fieldDefinition.initialValue == null) {
386-
addIsDefinedFieldWithGetters(fieldDefinition, javaType)
387-
}
388-
}
389-
390-
private fun addIsDefinedFieldWithGetters(fieldDefinition: Field, javaType: TypeSpec.Builder) {
391-
val fieldName = generateBooleanFieldName(ReservedKeywordSanitizer.sanitize(fieldDefinition.name))
392-
val field = FieldSpec
393-
.builder(com.squareup.javapoet.TypeName.BOOLEAN, fieldName)
394-
.addModifiers(Modifier.PRIVATE)
395-
.initializer("false")
396-
.build()
397-
val getterName = "${fieldName}Defined"
398-
399-
val getter = MethodSpec
400-
.methodBuilder(getterName)
401-
.addModifiers(Modifier.PUBLIC)
402-
.returns(com.squareup.javapoet.TypeName.BOOLEAN)
403-
.addStatement(
404-
"return \$N",
405-
fieldName
406-
).build()
407-
javaType.addField(field)
408-
javaType.addMethod(getter)
409-
}
410-
411-
private fun generateBooleanFieldName(name: String): String {
412-
return "is${name.capitalized()}"
413363
}
414364

415365
private fun addFieldWithGetterAndSetter(returnType: com.squareup.javapoet.TypeName?, fieldDefinition: Field, javaType: TypeSpec.Builder) {
@@ -440,21 +390,13 @@ abstract class BaseDataTypeGenerator(
440390

441391
val setterName = typeUtils.transformIfDefaultClassMethodExists("set${fieldDefinition.name[0].uppercase()}${fieldDefinition.name.substring(1)}", TypeUtils.Companion.setClass)
442392
val parameterBuilder = ParameterSpec.builder(returnType, ReservedKeywordSanitizer.sanitize(fieldDefinition.name))
443-
444393
val setterMethodBuilder = MethodSpec.methodBuilder(setterName)
445394
.addModifiers(Modifier.PUBLIC)
446395
.addStatement(
447396
"this.\$N = \$N",
448397
ReservedKeywordSanitizer.sanitize(fieldDefinition.name),
449398
ReservedKeywordSanitizer.sanitize(fieldDefinition.name)
450399
)
451-
if (fieldDefinition.isNullable && fieldDefinition.initialValue == null) {
452-
setterMethodBuilder
453-
.addStatement(
454-
"this.\$N = true",
455-
generateBooleanFieldName(ReservedKeywordSanitizer.sanitize(fieldDefinition.name))
456-
)
457-
}
458400

459401
if (fieldDefinition.directives.isNotEmpty()) {
460402
val (annotations, comments) = applyDirectivesJava(fieldDefinition.directives, config)
@@ -489,13 +431,13 @@ abstract class BaseDataTypeGenerator(
489431
)
490432
}
491433

492-
private fun addBuilder(fields: List<Field>, javaType: TypeSpec.Builder) {
434+
private fun addBuilder(javaType: TypeSpec.Builder) {
493435
val className = ClassName.get(packageName, javaType.build().name)
494436
val buildMethod = MethodSpec.methodBuilder("build").returns(className).addStatement(
495437
"""
496-
$className result = new $className();
497-
${javaType.build().fieldSpecs.joinToString("\n") { "result.${it.name} = this.${it.name};".trimIndent() }}
498-
return result
438+
$className result = new $className();
439+
${javaType.build().fieldSpecs.joinToString("\n") { "result.${it.name} = this.${it.name};" }}
440+
return result
499441
""".trimIndent()
500442
).addModifiers(Modifier.PUBLIC).build()
501443

@@ -518,23 +460,10 @@ abstract class BaseDataTypeGenerator(
518460
.addMethod(buildMethod)
519461

520462
javaType.build().fieldSpecs.map {
521-
val method = MethodSpec.methodBuilder(it.name)
463+
MethodSpec.methodBuilder(it.name)
522464
.addJavadoc(it.javadoc)
523465
.returns(builderClassName)
524466
.addStatement("this.${it.name} = ${it.name}")
525-
526-
val fieldName = it.name
527-
val field = fields.find { it.name.contains(fieldName) }
528-
529-
if (field?.isNullable == true && field.initialValue == null) {
530-
method
531-
.addStatement(
532-
"this.\$N = true",
533-
generateBooleanFieldName(it.name)
534-
)
535-
}
536-
537-
method
538467
.addStatement("return this")
539468
.addParameter(ParameterSpec.builder(it.type, it.name).build())
540469
.addModifiers(Modifier.PUBLIC).build()

0 commit comments

Comments
 (0)