Skip to content

Commit 3432596

Browse files
Handled reserved keywords for enum constants. (#629)
1 parent 5a5443b commit 3432596

File tree

4 files changed

+65
-2
lines changed

4 files changed

+65
-2
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class EnumTypeGenerator(private val config: CodeGenConfig) {
6666
}
6767
}
6868
}
69-
javaType.addEnumConstant(it.name, typeSpec.build())
69+
javaType.addEnumConstant(ReservedKeywordSanitizer.sanitize(it.name), typeSpec.build())
7070
}
7171

7272
val javaFile = JavaFile.builder(getPackageName(), javaType.build()).build()

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ package com.netflix.graphql.dgs.codegen.generators.kotlin
2121
import com.netflix.graphql.dgs.codegen.CodeGenConfig
2222
import com.netflix.graphql.dgs.codegen.CodeGenResult
2323
import com.netflix.graphql.dgs.codegen.generators.java.EnumTypeGenerator
24+
import com.netflix.graphql.dgs.codegen.generators.java.ReservedKeywordSanitizer
2425
import com.netflix.graphql.dgs.codegen.generators.shared.applyDirectivesKotlin
2526
import com.netflix.graphql.dgs.codegen.shouldSkip
2627
import com.squareup.kotlinpoet.FileSpec
@@ -59,7 +60,7 @@ class KotlinEnumTypeGenerator(private val config: CodeGenConfig) {
5960
applyDirectivesKotlin(it.directives, config)
6061
)
6162
}
62-
kotlinType.addEnumConstant(it.name, typeSpec.build())
63+
kotlinType.addEnumConstant(ReservedKeywordSanitizer.sanitize(it.name), typeSpec.build())
6364
}
6465

6566
kotlinType.addType(TypeSpec.companionObjectBuilder().addOptionalGeneratedAnnotation(config).build())

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

+30
Original file line numberDiff line numberDiff line change
@@ -965,6 +965,36 @@ class CodeGenTest {
965965
assertCompilesJava(codeGenResult.javaEnumTypes)
966966
}
967967

968+
@Test
969+
fun generateEnumWithReservedKeywords() {
970+
val schema = """
971+
type Query {
972+
people: [Person]
973+
}
974+
975+
enum EmployeeTypes {
976+
default
977+
root
978+
new
979+
}
980+
""".trimIndent()
981+
982+
val codeGenResult = CodeGen(
983+
CodeGenConfig(
984+
schemas = setOf(schema),
985+
packageName = basePackageName
986+
)
987+
).generate()
988+
989+
// Check generated enum type
990+
assertThat(codeGenResult.javaEnumTypes.size).isEqualTo(1)
991+
assertThat(codeGenResult.javaEnumTypes[0].typeSpec.name).isEqualTo("EmployeeTypes")
992+
assertThat(codeGenResult.javaEnumTypes[0].typeSpec.enumConstants.size).isEqualTo(3)
993+
assertThat(codeGenResult.javaEnumTypes[0].typeSpec.enumConstants).containsKeys("_default", "_root", "_new")
994+
995+
assertCompilesJava(codeGenResult.javaEnumTypes)
996+
}
997+
968998
@Nested
969999
inner class EnumAnnotationTest {
9701000
@Test

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

+32
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,38 @@ class KotlinCodeGenTest {
883883
assertCompilesKotlin(result.kotlinDataTypes + result.kotlinEnumTypes)
884884
}
885885

886+
@Test
887+
fun generateEnumWithReservedKeywords() {
888+
val schema = """
889+
type Query {
890+
people: [Person]
891+
}
892+
893+
enum EmployeeTypes {
894+
default
895+
root
896+
new
897+
}
898+
""".trimIndent()
899+
900+
val result = CodeGen(
901+
CodeGenConfig(
902+
schemas = setOf(schema),
903+
packageName = basePackageName,
904+
language = Language.KOTLIN
905+
)
906+
).generate()
907+
val type = result.kotlinEnumTypes[0].members[0] as TypeSpec
908+
909+
// Check generated enum type
910+
assertThat(type.name).isEqualTo("EmployeeTypes")
911+
assertThat(type.enumConstants.size).isEqualTo(3)
912+
assertThat(type.enumConstants).containsKeys("_default", "_root", "_new")
913+
assertThat(type.typeSpecs[0].isCompanion).isTrue
914+
915+
assertCompilesKotlin(result.kotlinDataTypes + result.kotlinEnumTypes)
916+
}
917+
886918
@Nested
887919
inner class EnumAnnotationTests {
888920
@Test

0 commit comments

Comments
 (0)