@@ -117,15 +117,43 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
117
117
private fun generateEnumFile (enum : ProcessedEnum ) {
118
118
val builder = TypeSpec .enumBuilder(enum.name)
119
119
120
+ builder.primaryConstructor(
121
+ FunSpec .constructorBuilder()
122
+ .addParameter(" presentation" , String ::class .asTypeName().copy(nullable = true ))
123
+ .build()
124
+ )
125
+
126
+ val getLiteralFunBuilder = FunSpec .builder(" getLiteralByMemberId" )
127
+ .addParameter(" memberId" , String ::class )
128
+ val getLiteralCodeBuilder = CodeBlock .builder().beginControlFlow(" return when (memberId) {" )
129
+
120
130
for (member in enum.getAllMembers()) {
121
- builder.addEnumConstant(member.name)
131
+ builder.addEnumConstant(
132
+ member.name,
133
+ TypeSpec .anonymousClassBuilder()
134
+ .addSuperclassConstructorParameter(
135
+ if (member.presentation == null ) " null" else " %S" ,
136
+ member.presentation ? : " " )
137
+ .build()
138
+ )
139
+ getLiteralCodeBuilder.addStatement(" %S -> %L" , member.memberId, member.name)
122
140
}
123
141
142
+ getLiteralFunBuilder.addCode(
143
+ getLiteralCodeBuilder
144
+ .addStatement(" else -> defaultValue()" )
145
+ .endControlFlow()
146
+ .build()
147
+ )
148
+
124
149
val companion = TypeSpec .companionObjectBuilder()
125
150
.addFunction(
126
151
FunSpec .builder(" defaultValue" )
127
152
.addCode(" return values()[%L]" , enum.defaultIndex)
128
153
.build())
154
+ .addFunction(
155
+ getLiteralFunBuilder.build()
156
+ )
129
157
.build()
130
158
131
159
val generatedEnum = builder.addType(companion ).build()
@@ -317,7 +345,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
317
345
if (feature.type is EnumPropertyType ) {
318
346
if (serializer == MandatoryEnumSerializer ::class .asTypeName()) {
319
347
propBuilder.initializer(
320
- """ newProperty(%S, %S, %T { if (it != null) %T.valueOf (it) else %T.defaultValue() }, ${feature.optional} )""" ,
348
+ """ newProperty(%S, %S, %T { if (it != null) %T.getLiteralByMemberId (it) else %T.defaultValue() }, ${feature.optional} )""" ,
321
349
feature.originalName,
322
350
feature.uid,
323
351
serializer,
@@ -326,7 +354,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
326
354
)
327
355
} else {
328
356
propBuilder.initializer(
329
- """ newProperty(%S, %S, %T { %T.valueOf (it) }, ${feature.optional} )""" ,
357
+ """ newProperty(%S, %S, %T { %T.getLiteralByMemberId (it) }, ${feature.optional} )""" ,
330
358
feature.originalName,
331
359
feature.uid,
332
360
serializer,
0 commit comments