diff --git a/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/DataTypeGenerator.kt b/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/DataTypeGenerator.kt index 0d258105..b5dbe23b 100644 --- a/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/DataTypeGenerator.kt +++ b/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/DataTypeGenerator.kt @@ -41,6 +41,7 @@ import graphql.language.InputObjectTypeExtensionDefinition import graphql.language.IntValue import graphql.language.InterfaceTypeDefinition import graphql.language.NonNullType +import graphql.language.NullValue import graphql.language.ObjectTypeDefinition import graphql.language.ObjectTypeExtensionDefinition import graphql.language.ObjectValue @@ -316,6 +317,7 @@ class InputTypeGenerator( } } + is NullValue -> CodeBlock.of("null") else -> CodeBlock.of("\$L", value) } diff --git a/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/shared/GenerateKotlinCode.kt b/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/shared/GenerateKotlinCode.kt index 956bef7c..7811d366 100644 --- a/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/shared/GenerateKotlinCode.kt +++ b/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/shared/GenerateKotlinCode.kt @@ -87,6 +87,7 @@ fun generateKotlinCode( ) } + is NullValue -> CodeBlock.of("null") else -> CodeBlock.of("%L", value) } diff --git a/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/CodeGenTest.kt b/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/CodeGenTest.kt index 03963767..f703c88a 100644 --- a/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/CodeGenTest.kt +++ b/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/CodeGenTest.kt @@ -2189,6 +2189,33 @@ class CodeGenTest { assertCompilesJava(dataTypes + enumTypes) } + @Test + fun generateInputWithDefaultNullValue() { + val schema = + """ + input QuantityRuleInput { + maximum: Int = null + minimum: Int! + } + """.trimIndent() + + val (dataTypes) = CodeGen(CodeGenConfig(schemas = setOf(schema), packageName = BASE_PACKAGE_NAME)).generate() + assertThat(dataTypes).hasSize(1) + + val data = dataTypes[0] + assertThat(data.packageName()).isEqualTo(TYPES_PACKAGE_NAME) + + val type = data.typeSpec() + assertThat(type.name()).isEqualTo("QuantityRuleInput") + + val fields = type.fieldSpecs() + val maximumField = fields.find { it.name() == "maximum" } + assertThat(maximumField).isNotNull + assertThat(maximumField!!.initializer().toString()).isEqualTo("null") + + assertCompilesJava(dataTypes) + } + @Test fun generateExtendedInputTypes() { val schema = diff --git a/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/KotlinCodeGenTest.kt b/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/KotlinCodeGenTest.kt index cf7659ce..046f070b 100644 --- a/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/KotlinCodeGenTest.kt +++ b/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/KotlinCodeGenTest.kt @@ -1759,6 +1759,48 @@ class KotlinCodeGenTest { assertCompilesKotlin(dataTypes.plus(enums)) } + @Test + fun generateInputWithDefaultNullValue() { + val schema = + """ + input QuantityRuleInput { + maximum: Int = null + minimum: Int! + } + """.trimIndent() + + val codeGenResult = + CodeGen( + CodeGenConfig( + schemas = setOf(schema), + packageName = BASE_PACKAGE_NAME, + language = Language.KOTLIN, + ), + ).generate() + val dataTypes = codeGenResult.kotlinDataTypes + assertThat(dataTypes).hasSize(1) + + val data = dataTypes[0] + assertThat(data.packageName).isEqualTo(TYPES_PACKAGE_NAME) + + val members = data.members + assertThat(members).hasSize(1) + + val type = members[0] as TypeSpec + assertThat(type.name).isEqualTo("QuantityRuleInput") + + val ctorSpec = type.primaryConstructor + assertThat(ctorSpec).isNotNull + assertThat(ctorSpec!!.parameters).hasSize(2) + + val maximumParam = ctorSpec.parameters.find { it.name == "maximum" } + assertThat(maximumParam).isNotNull + assertThat(maximumParam!!.defaultValue).isNotNull + assertThat(maximumParam.defaultValue.toString()).isEqualTo("null") + + assertCompilesKotlin(dataTypes) + } + @Test fun generateInputWithEmptyDefaultValueForArray() { val schema =