@@ -115,22 +115,33 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
115115 }
116116
117117 private fun generateEnumFile (enum : ProcessedEnum ) {
118- val builder = TypeSpec .enumBuilder(enum.name)
118+ val constructorSpec = FunSpec .constructorBuilder()
119+ .addParameter(" memberId" , String ::class )
120+ .addParameter(" presentation" , String ::class .asTypeName().copy(nullable = true ))
121+ .build()
119122
120- builder.primaryConstructor(
121- FunSpec .constructorBuilder()
122- .addParameter(" presentation" , String ::class .asTypeName().copy(nullable = true ))
123- .build()
124- )
123+ val enumBuilder = TypeSpec .enumBuilder(enum.name)
124+ .primaryConstructor(constructorSpec)
125+ .addProperty(
126+ PropertySpec .builder(" memberId" , String ::class )
127+ .initializer(" memberId" )
128+ .build()
129+ )
130+ .addProperty(
131+ PropertySpec .builder(" presentation" , String ::class .asTypeName().copy(nullable = true ))
132+ .initializer(" presentation" )
133+ .build()
134+ )
125135
126136 val getLiteralFunBuilder = FunSpec .builder(" getLiteralByMemberId" )
127137 .addParameter(" memberId" , String ::class )
128138 val getLiteralCodeBuilder = CodeBlock .builder().beginControlFlow(" return when (memberId) {" )
129139
130140 for (member in enum.getAllMembers()) {
131- builder .addEnumConstant(
141+ enumBuilder .addEnumConstant(
132142 member.name,
133143 TypeSpec .anonymousClassBuilder()
144+ .addSuperclassConstructorParameter(" %S" , member.memberId)
134145 .addSuperclassConstructorParameter(
135146 if (member.presentation == null ) " null" else " %S" ,
136147 member.presentation ? : " " )
@@ -156,7 +167,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
156167 )
157168 .build()
158169
159- val generatedEnum = builder .addType(companion ).build()
170+ val generatedEnum = enumBuilder .addType(companion ).build()
160171
161172 FileSpec .builder(enum.language.name, enum.name)
162173 .addFileComment(headerComment)
@@ -345,7 +356,9 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
345356 if (feature.type is EnumPropertyType ) {
346357 if (serializer == MandatoryEnumSerializer ::class .asTypeName()) {
347358 propBuilder.initializer(
348- """ newProperty(%S, %S, %T { if (it != null) %T.getLiteralByMemberId(it) else %T.defaultValue() }, ${feature.optional} )""" ,
359+ """ newProperty(%S, %S, %T({ it.memberId },
360+ |{ if (it != null) %T.getLiteralByMemberId(it) else %T.defaultValue() }),
361+ |${feature.optional} )""" .trimMargin(),
349362 feature.originalName,
350363 feature.uid,
351364 serializer,
@@ -354,7 +367,8 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
354367 )
355368 } else {
356369 propBuilder.initializer(
357- """ newProperty(%S, %S, %T { %T.getLiteralByMemberId(it) }, ${feature.optional} )""" ,
370+ """ newProperty(%S, %S, %T( { it.memberId }, { %T.getLiteralByMemberId(it) }),
371+ |${feature.optional} )""" .trimMargin(),
358372 feature.originalName,
359373 feature.uid,
360374 serializer,
0 commit comments