Skip to content

Commit 9bb7f71

Browse files
feat(#389): allow templating for generated Java / Kotlin class names
Adds an optional `nameTemplate` input parameter to the plugin, allowing customization of the generated Java / Kotlin class names. The following template variables are supported: - name - the original name of the class - schemaType - the GraphQL schema type (Type, Input, Interface, Enum) The default value for this new property is null. In this case the output will be identical to the current one. Examples: Given an original class name `Person` and schema type `Type`: - null -> Person - "{name}GraphQL{schemaType}" -> PersonGraphQLType - "{name}GraphQL" -> PersonGraphQL - "{name}{schemaType}" -> PersonType
1 parent 0f283a0 commit 9bb7f71

24 files changed

+445
-34
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,8 @@ class CodeGenConfig(
497497
var javaGenerateAllConstructor: Boolean = true,
498498
var implementSerializable: Boolean = false,
499499
var addGeneratedAnnotation: Boolean = false,
500-
var addDeprecatedAnnotation: Boolean = false
500+
var addDeprecatedAnnotation: Boolean = false,
501+
var nameTemplate: String? = null
501502
) {
502503
val packageNameClient: String = "$packageName.$subPackageNameClient"
503504

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

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,37 @@ package com.netflix.graphql.dgs.codegen.generators.java
2121
import com.netflix.graphql.dgs.codegen.CodeGenConfig
2222
import com.netflix.graphql.dgs.codegen.CodeGenResult
2323
import com.netflix.graphql.dgs.codegen.filterSkipped
24+
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.templatedClassName
2425
import com.netflix.graphql.dgs.codegen.generators.shared.ParserConstants
2526
import com.netflix.graphql.dgs.codegen.generators.shared.SiteTarget
2627
import com.netflix.graphql.dgs.codegen.shouldSkip
27-
import com.squareup.javapoet.*
28-
import graphql.language.*
28+
import com.squareup.javapoet.AnnotationSpec
29+
import com.squareup.javapoet.ClassName
30+
import com.squareup.javapoet.CodeBlock
31+
import com.squareup.javapoet.FieldSpec
32+
import com.squareup.javapoet.JavaFile
33+
import com.squareup.javapoet.MethodSpec
34+
import com.squareup.javapoet.ParameterSpec
35+
import com.squareup.javapoet.TypeSpec
36+
import graphql.language.ArrayValue
37+
import graphql.language.BooleanValue
38+
import graphql.language.Description
39+
import graphql.language.Directive
40+
import graphql.language.Document
41+
import graphql.language.EnumValue
42+
import graphql.language.FloatValue
43+
import graphql.language.InputObjectTypeDefinition
44+
import graphql.language.InputObjectTypeExtensionDefinition
45+
import graphql.language.IntValue
46+
import graphql.language.InterfaceTypeDefinition
47+
import graphql.language.ListType
48+
import graphql.language.ObjectTypeDefinition
49+
import graphql.language.ObjectTypeExtensionDefinition
50+
import graphql.language.StringValue
51+
import graphql.language.Type
2952
import graphql.language.TypeName
53+
import graphql.language.UnionTypeDefinition
54+
import graphql.language.Value
3055
import org.slf4j.Logger
3156
import org.slf4j.LoggerFactory
3257
import java.io.Serializable
@@ -42,7 +67,7 @@ class DataTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTyp
4267

4368
logger.info("Generating data type ${definition.name}")
4469

45-
val name = definition.name
70+
val name = definition.templatedClassName(config.nameTemplate)
4671
val unionTypes = document.getDefinitionsOfType(UnionTypeDefinition::class.java).filter { union ->
4772
union.memberTypes.asSequence().map { it as TypeName }.any { it.name == name }
4873
}.map { it.name }
@@ -123,7 +148,7 @@ class InputTypeGenerator(config: CodeGenConfig, document: Document) : BaseDataTy
123148

124149
logger.info("Generating input type ${definition.name}")
125150

126-
val name = definition.name
151+
val name = definition.templatedClassName(config.nameTemplate)
127152
val fieldDefinitions = definition.inputValueDefinitions.map {
128153
val defaultValue = it.defaultValue?.let { defVal ->
129154
when (defVal) {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package com.netflix.graphql.dgs.codegen.generators.java
2020

2121
import com.netflix.graphql.dgs.codegen.CodeGenConfig
2222
import com.netflix.graphql.dgs.codegen.CodeGenResult
23+
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.templatedClassName
2324
import com.netflix.graphql.dgs.codegen.shouldSkip
2425
import com.squareup.javapoet.JavaFile
2526
import com.squareup.javapoet.TypeSpec
@@ -40,7 +41,7 @@ class EnumTypeGenerator(private val config: CodeGenConfig) {
4041

4142
val javaType =
4243
TypeSpec
43-
.enumBuilder(definition.name)
44+
.enumBuilder(definition.templatedClassName(config.nameTemplate))
4445
.addModifiers(Modifier.PUBLIC)
4546
.addOptionalGeneratedAnnotation(config)
4647

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,18 @@ import com.netflix.graphql.dgs.codegen.CodeGenConfig
2222
import com.netflix.graphql.dgs.codegen.CodeGenResult
2323
import com.netflix.graphql.dgs.codegen.filterSkipped
2424
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.capitalized
25+
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.templatedClassName
2526
import com.netflix.graphql.dgs.codegen.shouldSkip
2627
import com.squareup.javapoet.ClassName
2728
import com.squareup.javapoet.JavaFile
2829
import com.squareup.javapoet.MethodSpec
2930
import com.squareup.javapoet.TypeSpec
30-
import graphql.language.*
31+
import graphql.language.Document
32+
import graphql.language.FieldDefinition
33+
import graphql.language.InterfaceTypeDefinition
34+
import graphql.language.InterfaceTypeExtensionDefinition
35+
import graphql.language.ObjectTypeDefinition
36+
import graphql.language.TypeName
3137
import org.slf4j.Logger
3238
import org.slf4j.LoggerFactory
3339
import javax.lang.model.element.Modifier
@@ -48,7 +54,7 @@ class InterfaceGenerator(private val config: CodeGenConfig, private val document
4854
}
4955

5056
logger.info("Generating type ${definition.name}")
51-
val javaType = TypeSpec.interfaceBuilder(definition.name)
57+
val javaType = TypeSpec.interfaceBuilder(definition.templatedClassName(config.nameTemplate))
5258
.addOptionalGeneratedAnnotation(config)
5359
.addModifiers(Modifier.PUBLIC)
5460

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.netflix.graphql.dgs.codegen.CodeGenConfig
2222
import com.netflix.graphql.dgs.codegen.CodeGenResult
2323
import com.netflix.graphql.dgs.codegen.filterSkipped
2424
import com.netflix.graphql.dgs.codegen.generators.java.InputTypeGenerator
25+
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.templatedClassName
2526
import com.netflix.graphql.dgs.codegen.generators.shared.ParserConstants
2627
import com.netflix.graphql.dgs.codegen.shouldSkip
2728
import com.squareup.kotlinpoet.AnnotationSpec
@@ -68,7 +69,7 @@ class KotlinDataTypeGenerator(config: CodeGenConfig, document: Document) :
6869
.filterSkipped()
6970
.map { Field(it.name, typeUtils.findReturnType(it.type), typeUtils.isNullable(it.type), null, it.description, it.directives) }
7071
val interfaces = definition.implements
71-
return generate(definition.name, fields, interfaces, document, definition.description, definition.directives)
72+
return generate(definition.templatedClassName(config.nameTemplate), fields, interfaces, document, definition.description, definition.directives)
7273
}
7374
}
7475

@@ -95,7 +96,7 @@ class KotlinInputTypeGenerator(config: CodeGenConfig, document: Document) :
9596
}
9697
)
9798
val interfaces = emptyList<Type<*>>()
98-
return generate(definition.name, fields, interfaces, document, definition.description, definition.directives)
99+
return generate(definition.templatedClassName(config.nameTemplate), fields, interfaces, document, definition.description, definition.directives)
99100
}
100101

101102
private fun generateCode(value: Value<Value<*>>, type: KtTypeName): CodeBlock =

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

Lines changed: 2 additions & 1 deletion
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.shared.CodeGeneratorUtils.templatedClassName
2425
import com.netflix.graphql.dgs.codegen.shouldSkip
2526
import com.squareup.kotlinpoet.FileSpec
2627
import com.squareup.kotlinpoet.KModifier
@@ -39,7 +40,7 @@ class KotlinEnumTypeGenerator(private val config: CodeGenConfig) {
3940

4041
logger.info("Generating enum type ${definition.name}")
4142

42-
val kotlinType = TypeSpec.classBuilder(definition.name)
43+
val kotlinType = TypeSpec.classBuilder(definition.templatedClassName(config.nameTemplate))
4344
.addOptionalGeneratedAnnotation(config)
4445
.addModifiers(KModifier.ENUM)
4546

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package com.netflix.graphql.dgs.codegen.generators.kotlin
2020

2121
import com.netflix.graphql.dgs.codegen.CodeGenConfig
2222
import com.netflix.graphql.dgs.codegen.CodeGenResult
23+
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.templatedClassName
2324
import com.netflix.graphql.dgs.codegen.shouldSkip
2425
import com.squareup.kotlinpoet.*
2526
import graphql.language.*
@@ -46,7 +47,7 @@ class KotlinInterfaceTypeGenerator(private val config: CodeGenConfig, private va
4647

4748
logger.info("Generating type {}", definition.name)
4849

49-
val interfaceBuilder = TypeSpec.interfaceBuilder(definition.name)
50+
val interfaceBuilder = TypeSpec.interfaceBuilder(definition.templatedClassName(config.nameTemplate))
5051
.addOptionalGeneratedAnnotation(config)
5152
if (definition.description != null) {
5253
interfaceBuilder.addKdoc("%L", definition.description.sanitizeKdoc())

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.netflix.graphql.dgs.codegen.generators.kotlin.jvmNameAnnotation
3232
import com.netflix.graphql.dgs.codegen.generators.kotlin.sanitizeKdoc
3333
import com.netflix.graphql.dgs.codegen.generators.kotlin.suppressInapplicableJvmNameAnnotation
3434
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.capitalized
35+
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.templatedClassName
3536
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findTypeExtensions
3637
import com.netflix.graphql.dgs.codegen.generators.shared.excludeSchemaTypeExtension
3738
import com.netflix.graphql.dgs.codegen.shouldSkip
@@ -156,7 +157,7 @@ fun generateKotlin2DataTypes(
156157
.build()
157158

158159
// create the data class
159-
val typeSpec = TypeSpec.classBuilder(typeDefinition.name)
160+
val typeSpec = TypeSpec.classBuilder(typeDefinition.templatedClassName(config.nameTemplate))
160161
.addOptionalGeneratedAnnotation(config)
161162
// add docs if available
162163
.apply {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.netflix.graphql.dgs.codegen.CodeGenConfig
2222
import com.netflix.graphql.dgs.codegen.generators.kotlin.addEnumConstants
2323
import com.netflix.graphql.dgs.codegen.generators.kotlin.addOptionalGeneratedAnnotation
2424
import com.netflix.graphql.dgs.codegen.generators.kotlin.sanitizeKdoc
25+
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.templatedClassName
2526
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findEnumExtensions
2627
import com.netflix.graphql.dgs.codegen.generators.shared.excludeSchemaTypeExtension
2728
import com.netflix.graphql.dgs.codegen.shouldSkip
@@ -54,7 +55,7 @@ fun generateKotlin2EnumTypes(
5455
.flatMap { it.enumValueDefinitions }
5556

5657
// create the enum class
57-
val enumSpec = TypeSpec.classBuilder(enumDefinition.name)
58+
val enumSpec = TypeSpec.classBuilder(enumDefinition.templatedClassName(config.nameTemplate))
5859
.addOptionalGeneratedAnnotation(config)
5960
.addModifiers(KModifier.ENUM)
6061
// add docs if available

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import com.netflix.graphql.dgs.codegen.GraphQLInput
2323
import com.netflix.graphql.dgs.codegen.generators.kotlin.ReservedKeywordFilter
2424
import com.netflix.graphql.dgs.codegen.generators.kotlin.addOptionalGeneratedAnnotation
2525
import com.netflix.graphql.dgs.codegen.generators.kotlin.sanitizeKdoc
26+
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.templatedClassName
2627
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findInputExtensions
2728
import com.netflix.graphql.dgs.codegen.generators.shared.excludeSchemaTypeExtension
2829
import com.netflix.graphql.dgs.codegen.shouldSkip
@@ -69,7 +70,7 @@ fun generateKotlin2InputTypes(
6970
val typeName = ClassName(config.packageNameTypes, inputDefinition.name)
7071

7172
// create the input class
72-
val typeSpec = TypeSpec.classBuilder(typeName)
73+
val typeSpec = TypeSpec.classBuilder(inputDefinition.templatedClassName(config.nameTemplate))
7374
.addOptionalGeneratedAnnotation(config)
7475
// add docs if available
7576
.apply {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import com.netflix.graphql.dgs.codegen.generators.kotlin.jsonTypeInfoAnnotation
2626
import com.netflix.graphql.dgs.codegen.generators.kotlin.jvmNameAnnotation
2727
import com.netflix.graphql.dgs.codegen.generators.kotlin.sanitizeKdoc
2828
import com.netflix.graphql.dgs.codegen.generators.kotlin.suppressInapplicableJvmNameAnnotation
29+
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.templatedClassName
2930
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findInterfaceExtensions
3031
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findUnionExtensions
3132
import com.netflix.graphql.dgs.codegen.generators.shared.excludeSchemaTypeExtension
@@ -82,7 +83,7 @@ fun generateKotlin2Interfaces(
8283
val overrideFields = typeLookup.overrideFields(implementedInterfaces)
8384

8485
// create the interface
85-
val interfaceSpec = TypeSpec.interfaceBuilder(interfaceDefinition.name)
86+
val interfaceSpec = TypeSpec.interfaceBuilder(interfaceDefinition.templatedClassName(config.nameTemplate))
8687
.addOptionalGeneratedAnnotation(config)
8788
.addModifiers(KModifier.SEALED)
8889
// add docs if available

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@
1818

1919
package com.netflix.graphql.dgs.codegen.generators.shared
2020

21+
import graphql.language.EnumTypeDefinition
22+
import graphql.language.InputObjectTypeDefinition
23+
import graphql.language.InterfaceTypeDefinition
24+
import graphql.language.NamedNode
25+
import graphql.language.ObjectTypeDefinition
26+
2127
object CodeGeneratorUtils {
2228

2329
enum class Case {
@@ -40,6 +46,37 @@ object CodeGeneratorUtils {
4046

4147
fun String.capitalized(): String = replaceFirstChar(Character::toTitleCase)
4248

49+
/**
50+
* Returns the name generated using [nameTemplate]. If [nameTemplate] is null, returns the name of the node.
51+
*
52+
* The following variables are available in the template:
53+
* - name: the original name of the node
54+
* - schemaType: the GraphQL Schema type of the node (Type, Input, Interface, Enum)
55+
*
56+
* Examples:
57+
* Given a node named "Person" and schema type "Type", the following templates will generate the following names:
58+
* - null -> "Person"
59+
* - "{name}GraphQL{schemaType}" -> "PersonGraphQLType"
60+
* - "{name}GraphQL" -> "PersonGraphQL"
61+
* - "{name}{schemaType}" -> "PersonType"
62+
*/
63+
fun NamedNode<*>.templatedClassName(nameTemplate: String?): String =
64+
nameTemplate
65+
?.replace(
66+
"{name}",
67+
this.name
68+
)
69+
?.replace(
70+
"{schemaType}",
71+
when (this) {
72+
is ObjectTypeDefinition -> "Type"
73+
is InputObjectTypeDefinition -> "Input"
74+
is InterfaceTypeDefinition -> "Interface"
75+
is EnumTypeDefinition -> "Enum"
76+
else -> ""
77+
}
78+
) ?: this.name
79+
4380
/**
4481
* Mostly copied from Apache Commons StringUtils.splitByCharacterType
4582
*/

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4151,4 +4151,23 @@ It takes a title and such.
41514151
// Check that the third field of the Person type is an Integer
41524152
assertThat(dataTypes[0].typeSpec.fieldSpecs[2].type.toString()).isEqualTo("java.lang.Integer")
41534153
}
4154+
4155+
@TemplateClassNameTest
4156+
fun generateSerializedDataClassWithCustomName(
4157+
schema: String,
4158+
nameTemplate: String?,
4159+
expectedName: String
4160+
) {
4161+
val dataTypes = CodeGen(
4162+
CodeGenConfig(
4163+
schemas = setOf(schema),
4164+
packageName = basePackageName,
4165+
nameTemplate = nameTemplate
4166+
)
4167+
)
4168+
.generate()
4169+
.javaSources()
4170+
4171+
assertThat(dataTypes.firstOrNull()?.typeSpec?.name).isEqualTo(expectedName)
4172+
}
41544173
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3574,4 +3574,21 @@ It takes a title and such.
35743574
assertThat(dataTypes[0].typeSpec.fieldSpecs[1].type.toString()).contains(basePackageName)
35753575
assertThat(dataTypes[0].typeSpec.fieldSpecs[2].type.toString()).isEqualTo("java.time.LocalDate")
35763576
}
3577+
3578+
@TemplateClassNameTest
3579+
fun `Should generate class names based on template`(
3580+
schema: String,
3581+
nameTemplate: String?,
3582+
expectedName: String
3583+
) {
3584+
val dataTypes = CodeGen(
3585+
CodeGenConfig(
3586+
schemas = setOf(schema),
3587+
language = Language.KOTLIN,
3588+
nameTemplate = nameTemplate
3589+
)
3590+
).generate().kotlinSources()
3591+
3592+
assertThat(dataTypes.firstOrNull()?.name).isEqualTo(expectedName)
3593+
}
35773594
}

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

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,7 @@ import java.io.Serializable
2727
class Kotline2CodeGenTest {
2828
@Test
2929
fun generateSerializableDataClass() {
30-
val schema = """
31-
type Person {
32-
firstname: String
33-
lastname: String
34-
}
35-
""".trimIndent()
36-
37-
val codeGenResult = CodeGen(
38-
CodeGenConfig(
39-
schemas = setOf(schema),
40-
packageName = basePackageName,
41-
language = Language.KOTLIN,
42-
generateKotlinNullableClasses = true,
43-
generateKotlinClosureProjections = true,
44-
implementSerializable = true
45-
)
46-
).generate()
30+
val codeGenResult = CodeGen(getTestCodeGenConfig()).generate()
4731

4832
val dataTypes = codeGenResult.kotlinDataTypes
4933

@@ -55,4 +39,32 @@ class Kotline2CodeGenTest {
5539
assertThat(typeSpec.superinterfaces).containsKey(Serializable::class.asClassName())
5640
})
5741
}
42+
43+
@TemplateClassNameTest
44+
fun generateSerializedDataClassWithCustomName(
45+
schema: String,
46+
nameTemplate: String?,
47+
expectedName: String
48+
) {
49+
val dataTypes = CodeGen(getTestCodeGenConfig(nameTemplate = nameTemplate, schema = schema))
50+
.generate()
51+
.kotlinSources()
52+
53+
assertThat(dataTypes.firstOrNull()?.name).isEqualTo(expectedName)
54+
}
55+
56+
companion object {
57+
private fun getTestCodeGenConfig(
58+
nameTemplate: String? = null,
59+
schema: String = PERSON_TYPE_SCHEMA
60+
): CodeGenConfig = CodeGenConfig(
61+
schemas = setOf(schema),
62+
packageName = basePackageName,
63+
language = Language.KOTLIN,
64+
generateKotlinNullableClasses = true,
65+
generateKotlinClosureProjections = true,
66+
implementSerializable = true,
67+
nameTemplate = nameTemplate
68+
)
69+
}
5870
}

0 commit comments

Comments
 (0)