From bb637e9e44c5342de14b746f25b13ad67b7e28af Mon Sep 17 00:00:00 2001 From: Kavitha Srinivasan Date: Mon, 15 Mar 2021 16:32:35 -0700 Subject: [PATCH] Don't add a null check for primitive java types when constructing the query. --- .../generators/java/ClientApiGenerator.kt | 17 +++++-- .../graphql/dgs/codegen/ClientApiGenTest.kt | 45 +++++++++++++++++-- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/ClientApiGenerator.kt b/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/ClientApiGenerator.kt index 9733a9426..60463c3bc 100644 --- a/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/ClientApiGenerator.kt +++ b/graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/ClientApiGenerator.kt @@ -101,11 +101,20 @@ class ClientApiGenerator(private val config: CodeGenConfig, private val document .addField(findReturnType, ReservedKeywordSanitizer.sanitize(inputValue.name), Modifier.PRIVATE) constructorBuilder.addParameter(findReturnType, ReservedKeywordSanitizer.sanitize(inputValue.name)) - constructorBuilder.addCode(""" - if (${inputValue.name} != null) { + + if (findReturnType.isPrimitive) { + constructorBuilder.addCode(""" getInput().put("${inputValue.name}", ${ReservedKeywordSanitizer.sanitize(inputValue.name)}); - } - """.trimIndent()) + """.trimIndent()) + } else { + constructorBuilder.addCode( + """ + if (${inputValue.name} != null) { + getInput().put("${inputValue.name}", ${ReservedKeywordSanitizer.sanitize(inputValue.name)}); + } + """.trimIndent() + ) + } } javaType.addMethod(constructorBuilder.build()) diff --git a/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/ClientApiGenTest.kt b/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/ClientApiGenTest.kt index acd1c142d..7ec6d94ba 100644 --- a/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/ClientApiGenTest.kt +++ b/graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/ClientApiGenTest.kt @@ -121,19 +121,21 @@ class ClientApiGenTest { val schema = """ type Mutation { - updateMovie(movie: MovieDescription): Movie + updateMovie(movie: MovieDescription, reviews: [String], uuid: UUID): Movie } input MovieDescription { - movieId: ID + movieId: Int title: String actors: [String] } type Movie { - movieId: ID + movieId: Int lastname: String } + + scalar UUID @javaType(name : "java.util.UUID") """.trimIndent() @@ -143,10 +145,45 @@ class ClientApiGenTest { generateClientApi = true, )).generate() as CodeGenResult + val initMethod = codeGenResult.queryTypes[0].typeSpec.methodSpecs + .find {it.name == ""}?.code.toString(); + + assert(initMethod.contains("super(\"mutation\");\n" + + "if (movie != null) {\n" + + " getInput().put(\"movie\", movie);\n" + + "}if (reviews != null) {\n" + + " getInput().put(\"reviews\", reviews);\n" + + "}if (uuid != null) {\n" + + " getInput().put(\"uuid\", uuid);\n" + + "}")) + assertCompiles(codeGenResult.clientProjections.plus(codeGenResult.queryTypes).plus(codeGenResult.dataTypes)) + } + + @Test + fun generateMutationDoesNotAddNullChecksForPrimitiveTypesDuringInit() { + + val schema = """ + type Mutation { + updateMovie(movieId: Int!): Movie + } + + type Movie { + movieId: Int + lastname: String + } + """.trimIndent() + + + val codeGenResult = CodeGen(CodeGenConfig( + schemas = setOf(schema), + packageName = basePackageName, + generateClientApi = true + )).generate() as CodeGenResult + assert(codeGenResult.queryTypes[0].typeSpec.methodSpecs .find {it.name == ""}?.code.toString() - .contains("super(\"mutation\");\nif (movie != null) {\n getInput().put(\"movie\", movie);\n}")) + .contains("super(\"mutation\");\ngetInput().put(\"movieId\", movieId);")) assertCompiles(codeGenResult.clientProjections.plus(codeGenResult.queryTypes).plus(codeGenResult.dataTypes)) }