Skip to content

Commit 580cf0d

Browse files
Merge pull request #492 from idiazvalenzuela/fix/java-currency
fix: check Type/Enum does not exist in document before casting to scalar
2 parents f59b69c + c50022d commit 580cf0d

File tree

4 files changed

+62
-2
lines changed

4 files changed

+62
-2
lines changed

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class TypeUtils(private val packageName: String, private val config: CodeGenConf
174174
return schemaType.toTypeName()
175175
}
176176

177-
if (name in commonScalars) {
177+
if (name in commonScalars && !isFieldTypeDefinedInDocument(name)) {
178178
return commonScalars.getValue(name)
179179
}
180180

@@ -247,6 +247,10 @@ class TypeUtils(private val packageName: String, private val config: CodeGenConf
247247
}
248248
}
249249

250+
private fun isFieldTypeDefinedInDocument(name: String): Boolean =
251+
document.definitions.filterIsInstance<ObjectTypeDefinition>().any { e -> e.name == name } ||
252+
document.definitions.filterIsInstance<EnumTypeDefinition>().any { e -> e.name == name }
253+
250254
companion object {
251255
const val getClass = "getClass"
252256
const val setClass = "setClass"

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ class KotlinTypeUtils(private val packageName: String, private val config: CodeG
134134
return schemaType.toKtTypeName()
135135
}
136136

137-
if (name in commonScalars) {
137+
if (name in commonScalars && !isFieldTypeDefinedInDocument(name)) {
138138
return commonScalars.getValue(name)
139139
}
140140

@@ -152,4 +152,8 @@ class KotlinTypeUtils(private val packageName: String, private val config: CodeG
152152
else -> "$packageName.$name".toKtTypeName()
153153
}
154154
}
155+
156+
private fun isFieldTypeDefinedInDocument(name: String): Boolean =
157+
document.definitions.filterIsInstance<ObjectTypeDefinition>().any { e -> e.name == name } ||
158+
document.definitions.filterIsInstance<EnumTypeDefinition>().any { e -> e.name == name }
155159
}

graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/CodeGenTest.kt

+26
Original file line numberDiff line numberDiff line change
@@ -3936,4 +3936,30 @@ It takes a title and such.
39363936
).generate()
39373937
}
39383938
}
3939+
3940+
@Test
3941+
fun `Use schema type when type name clashes with commonScalars`() {
3942+
val schema = """
3943+
type Price {
3944+
amount: Double
3945+
currency: Currency
3946+
date: Date
3947+
}
3948+
enum Currency {
3949+
EUR
3950+
GBP
3951+
}
3952+
""".trimIndent()
3953+
3954+
val (dataTypes) = CodeGen(
3955+
CodeGenConfig(
3956+
schemas = setOf(schema),
3957+
packageName = basePackageName
3958+
)
3959+
).generate()
3960+
3961+
assertThat(dataTypes.size).isEqualTo(1)
3962+
assertThat(dataTypes[0].typeSpec.fieldSpecs[1].type.toString()).contains(basePackageName)
3963+
assertThat(dataTypes[0].typeSpec.fieldSpecs[2].type.toString()).isEqualTo("java.time.LocalDate")
3964+
}
39393965
}

graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/KotlinCodeGenTest.kt

+26
Original file line numberDiff line numberDiff line change
@@ -3548,4 +3548,30 @@ It takes a title and such.
35483548
assertThat(fields).hasSize(1)
35493549
assertThat(fields[0].annotations).hasSize(0)
35503550
}
3551+
3552+
@Test
3553+
fun `Use schema type when type name clashes with commonScalars`() {
3554+
val schema = """
3555+
type Price {
3556+
amount: Double
3557+
currency: Currency
3558+
date: Date
3559+
}
3560+
enum Currency {
3561+
EUR
3562+
GBP
3563+
}
3564+
""".trimIndent()
3565+
3566+
val (dataTypes) = CodeGen(
3567+
CodeGenConfig(
3568+
schemas = setOf(schema),
3569+
packageName = basePackageName
3570+
)
3571+
).generate()
3572+
3573+
assertThat(dataTypes.size).isEqualTo(1)
3574+
assertThat(dataTypes[0].typeSpec.fieldSpecs[1].type.toString()).contains(basePackageName)
3575+
assertThat(dataTypes[0].typeSpec.fieldSpecs[2].type.toString()).isEqualTo("java.time.LocalDate")
3576+
}
35513577
}

0 commit comments

Comments
 (0)