Skip to content

Commit be1808a

Browse files
authored
Merge pull request #163 from modelix/issue/MODELIX-466
MODELIX-466 Add an interface to all generated enums enforcing the presentation field
2 parents bd15920 + 8b19621 commit be1808a

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

model-api-gen-gradle-test/src/test/kotlin/GeneratedApiTest.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ import jetbrains.mps.lang.core.L_jetbrains_mps_lang_core
88
import jetbrains.mps.lang.editor.*
99
import jetbrains.mps.lang.smodel.query.CustomScope_old
1010
import org.junit.jupiter.api.BeforeAll
11-
import org.modelix.metamodel.TypedLanguagesRegistry
12-
import org.modelix.metamodel.typed
13-
import org.modelix.metamodel.untyped
11+
import org.modelix.metamodel.*
1412
import org.modelix.model.ModelFacade
1513
import org.modelix.model.api.INode
1614
import org.modelix.model.api.getRootNode
1715
import org.modelix.model.data.ModelData
1816
import java.io.File
1917
import kotlin.reflect.KAnnotatedElement
2018
import kotlin.reflect.KClass
19+
import kotlin.reflect.KType
2120
import kotlin.reflect.full.findAnnotation
2221
import kotlin.reflect.full.hasAnnotation
22+
import kotlin.reflect.full.isSubclassOf
2323
import kotlin.test.Test
2424
import kotlin.test.assertContains
2525
import kotlin.test.assertEquals
@@ -35,6 +35,7 @@ class GeneratedApiTest {
3535
branch.runWrite {
3636
data.load(branch)
3737
val node = findNodeWithStyleAttribute(branch.getRootNode())!!.typed(C_FontStyleStyleClassItem.getInstanceInterface())
38+
assert(_FontStyle_Enum::class.isSubclassOf(IPropertyValueEnum::class))
3839
assertContains(_FontStyle_Enum.values(), node.style)
3940
val enumValue = _FontStyle_Enum.BOLD_ITALIC
4041
node.style = enumValue
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.modelix.metamodel
2+
3+
/**
4+
* Superinterface for enums generated by model-api-gen
5+
*/
6+
interface IPropertyValueEnum {
7+
8+
/**
9+
* Name of the enum literal.
10+
*/
11+
val name: String
12+
13+
/**
14+
* Textual representation of the enum value.
15+
* Null, if undefined.
16+
*/
17+
val presentation: String?
18+
}

model-api-gen/src/main/kotlin/org/modelix/metamodel/generator/MetaModelGenerator.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
119119
val enumBuilder = TypeSpec.enumBuilder(enum.name)
120120
.addDeprecationIfNecessary(enum)
121121
.primaryConstructor(constructorSpec)
122+
.addSuperinterface(IPropertyValueEnum::class)
122123
.addProperty(
123124
PropertySpec.builder("uid", String::class)
124125
.initializer("uid")
@@ -127,6 +128,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
127128
.addProperty(
128129
PropertySpec.builder("presentation", String::class.asTypeName().copy(nullable = true))
129130
.initializer("presentation")
131+
.addModifiers(KModifier.OVERRIDE)
130132
.build()
131133
)
132134

0 commit comments

Comments
 (0)