19
19
package com.netflix.graphql.dgs.codegen.generators.java
20
20
21
21
import com.netflix.graphql.dgs.codegen.*
22
- import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.capitalized
23
22
import com.netflix.graphql.dgs.codegen.generators.shared.SiteTarget
24
23
import com.netflix.graphql.dgs.codegen.generators.shared.applyDirectivesJava
25
24
import com.squareup.javapoet.*
26
25
import graphql.language.*
27
26
import graphql.language.TypeName
28
- import graphql.schema.idl.TypeUtil
29
27
import org.slf4j.Logger
30
28
import org.slf4j.LoggerFactory
31
29
import java.io.Serializable
@@ -83,15 +81,13 @@ class DataTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTyp
83
81
if (config.generateDataTypes) {
84
82
val fieldDefinitions = definition.fieldDefinitions
85
83
.filterSkipped()
86
- .map { fieldDefinition ->
87
- val isNullable = ! TypeUtil .isNonNull(fieldDefinition.type)
84
+ .map {
88
85
Field (
89
- fieldDefinition .name,
90
- typeUtils.findReturnType(fieldDefinition .type, useInterfaceType, true ),
86
+ it .name,
87
+ typeUtils.findReturnType(it .type, useInterfaceType, true ),
91
88
overrideGetter = overrideGetter,
92
- description = fieldDefinition.description,
93
- directives = fieldDefinition.directives,
94
- isNullable = isNullable
89
+ description = it.description,
90
+ directives = it.directives
95
91
)
96
92
}
97
93
.plus(
@@ -126,7 +122,6 @@ class InputTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTy
126
122
127
123
val name = definition.name
128
124
val fieldDefinitions = definition.inputValueDefinitions.map {
129
- val isNullable = ! TypeUtil .isNonNull(it.type)
130
125
val defaultValue = it.defaultValue?.let { defVal ->
131
126
when (defVal) {
132
127
is BooleanValue -> CodeBlock .of(" \$ L" , defVal.isValue)
@@ -160,8 +155,7 @@ class InputTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTy
160
155
type = typeUtils.findReturnType(it.type),
161
156
initialValue = defaultValue,
162
157
description = it.description,
163
- directives = it.directives,
164
- isNullable = isNullable
158
+ directives = it.directives
165
159
)
166
160
}.plus(extensions.flatMap { it.inputValueDefinitions }.map { Field (it.name, typeUtils.findReturnType(it.type)) })
167
161
return generate(name, emptyList(), fieldDefinitions, definition.description, definition.directives)
@@ -173,7 +167,7 @@ class InputTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTy
173
167
}
174
168
}
175
169
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())
177
171
178
172
abstract class BaseDataTypeGenerator (
179
173
internal val packageName : String ,
@@ -233,7 +227,7 @@ abstract class BaseDataTypeGenerator(
233
227
234
228
addEquals(javaType)
235
229
addHashcode(javaType)
236
- addBuilder(fields, javaType)
230
+ addBuilder(javaType)
237
231
238
232
val javaFile = JavaFile .builder(packageName, javaType.build()).build()
239
233
@@ -347,22 +341,7 @@ abstract class BaseDataTypeGenerator(
347
341
constructorBuilder
348
342
.addParameter(parameterBuilder.build())
349
343
.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))
366
345
}
367
346
368
347
javaType.addMethod(constructorBuilder.build())
@@ -381,35 +360,6 @@ abstract class BaseDataTypeGenerator(
381
360
382
361
private fun addField (fieldDefinition : Field , javaType : TypeSpec .Builder ) {
383
362
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()} "
413
363
}
414
364
415
365
private fun addFieldWithGetterAndSetter (returnType : com.squareup.javapoet.TypeName ? , fieldDefinition : Field , javaType : TypeSpec .Builder ) {
@@ -440,21 +390,13 @@ abstract class BaseDataTypeGenerator(
440
390
441
391
val setterName = typeUtils.transformIfDefaultClassMethodExists(" set${fieldDefinition.name[0 ].uppercase()}${fieldDefinition.name.substring(1 )} " , TypeUtils .Companion .setClass)
442
392
val parameterBuilder = ParameterSpec .builder(returnType, ReservedKeywordSanitizer .sanitize(fieldDefinition.name))
443
-
444
393
val setterMethodBuilder = MethodSpec .methodBuilder(setterName)
445
394
.addModifiers(Modifier .PUBLIC )
446
395
.addStatement(
447
396
" this.\$ N = \$ N" ,
448
397
ReservedKeywordSanitizer .sanitize(fieldDefinition.name),
449
398
ReservedKeywordSanitizer .sanitize(fieldDefinition.name)
450
399
)
451
- if (fieldDefinition.isNullable && fieldDefinition.initialValue == null ) {
452
- setterMethodBuilder
453
- .addStatement(
454
- " this.\$ N = true" ,
455
- generateBooleanFieldName(ReservedKeywordSanitizer .sanitize(fieldDefinition.name))
456
- )
457
- }
458
400
459
401
if (fieldDefinition.directives.isNotEmpty()) {
460
402
val (annotations, comments) = applyDirectivesJava(fieldDefinition.directives, config)
@@ -489,13 +431,13 @@ abstract class BaseDataTypeGenerator(
489
431
)
490
432
}
491
433
492
- private fun addBuilder (fields : List < Field >, javaType : TypeSpec .Builder ) {
434
+ private fun addBuilder (javaType : TypeSpec .Builder ) {
493
435
val className = ClassName .get(packageName, javaType.build().name)
494
436
val buildMethod = MethodSpec .methodBuilder(" build" ).returns(className).addStatement(
495
437
"""
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
499
441
""" .trimIndent()
500
442
).addModifiers(Modifier .PUBLIC ).build()
501
443
@@ -518,23 +460,10 @@ abstract class BaseDataTypeGenerator(
518
460
.addMethod(buildMethod)
519
461
520
462
javaType.build().fieldSpecs.map {
521
- val method = MethodSpec .methodBuilder(it.name)
463
+ MethodSpec .methodBuilder(it.name)
522
464
.addJavadoc(it.javadoc)
523
465
.returns(builderClassName)
524
466
.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
538
467
.addStatement(" return this" )
539
468
.addParameter(ParameterSpec .builder(it.type, it.name).build())
540
469
.addModifiers(Modifier .PUBLIC ).build()
0 commit comments