File tree 4 files changed +65
-2
lines changed
graphql-dgs-codegen-core/src
main/kotlin/com/netflix/graphql/dgs/codegen/generators
test/kotlin/com/netflix/graphql/dgs/codegen
4 files changed +65
-2
lines changed Original file line number Diff line number Diff line change @@ -66,7 +66,7 @@ class EnumTypeGenerator(private val config: CodeGenConfig) {
66
66
}
67
67
}
68
68
}
69
- javaType.addEnumConstant(it.name, typeSpec.build())
69
+ javaType.addEnumConstant(ReservedKeywordSanitizer .sanitize( it.name) , typeSpec.build())
70
70
}
71
71
72
72
val javaFile = JavaFile .builder(getPackageName(), javaType.build()).build()
Original file line number Diff line number Diff line change @@ -21,6 +21,7 @@ package com.netflix.graphql.dgs.codegen.generators.kotlin
21
21
import com.netflix.graphql.dgs.codegen.CodeGenConfig
22
22
import com.netflix.graphql.dgs.codegen.CodeGenResult
23
23
import com.netflix.graphql.dgs.codegen.generators.java.EnumTypeGenerator
24
+ import com.netflix.graphql.dgs.codegen.generators.java.ReservedKeywordSanitizer
24
25
import com.netflix.graphql.dgs.codegen.generators.shared.applyDirectivesKotlin
25
26
import com.netflix.graphql.dgs.codegen.shouldSkip
26
27
import com.squareup.kotlinpoet.FileSpec
@@ -59,7 +60,7 @@ class KotlinEnumTypeGenerator(private val config: CodeGenConfig) {
59
60
applyDirectivesKotlin(it.directives, config)
60
61
)
61
62
}
62
- kotlinType.addEnumConstant(it.name, typeSpec.build())
63
+ kotlinType.addEnumConstant(ReservedKeywordSanitizer .sanitize( it.name) , typeSpec.build())
63
64
}
64
65
65
66
kotlinType.addType(TypeSpec .companionObjectBuilder().addOptionalGeneratedAnnotation(config).build())
Original file line number Diff line number Diff line change @@ -965,6 +965,36 @@ class CodeGenTest {
965
965
assertCompilesJava(codeGenResult.javaEnumTypes)
966
966
}
967
967
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
+
968
998
@Nested
969
999
inner class EnumAnnotationTest {
970
1000
@Test
Original file line number Diff line number Diff line change @@ -883,6 +883,38 @@ class KotlinCodeGenTest {
883
883
assertCompilesKotlin(result.kotlinDataTypes + result.kotlinEnumTypes)
884
884
}
885
885
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
+
886
918
@Nested
887
919
inner class EnumAnnotationTests {
888
920
@Test
You can’t perform that action at this time.
0 commit comments