Skip to content

Commit

Permalink
Merge pull request #73 from Netflix/fix/query-input
Browse files Browse the repository at this point in the history
Don't add a null check for primitive java types when constructing the…
  • Loading branch information
srinivasankavitha authored Mar 16, 2021
2 parents 762994b + bb637e9 commit d7319eb
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()


Expand All @@ -143,10 +145,45 @@ class ClientApiGenTest {
generateClientApi = true,
)).generate() as CodeGenResult

val initMethod = codeGenResult.queryTypes[0].typeSpec.methodSpecs
.find {it.name == "<init>"}?.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 == "<init>"}?.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))
}
Expand Down

0 comments on commit d7319eb

Please sign in to comment.