Skip to content

Commit 63aaa48

Browse files
benedekhmhuster23
authored andcommitted
fix(model-api): register and initialize the language concepts eagerly
1 parent 9cecf03 commit 63aaa48

File tree

2 files changed

+48
-7
lines changed

2 files changed

+48
-7
lines changed

model-api/src/commonMain/kotlin/org/modelix/model/api/BuiltinLanguages.kt

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,31 @@ package org.modelix.model.api
1818

1919
import kotlin.reflect.KProperty
2020

21+
/**
22+
* TODO if you add a new Concept to a language, do not forget to add it to the language's included concepts field.
23+
* Otherwise the concept will not be eagerly added to the Language, when registering the language in the ILanguageRegistry.
24+
*/
2125
object BuiltinLanguages {
2226
@Suppress("ClassName")
23-
object jetbrains_mps_lang_core : SimpleLanguage(name = "jetbrains.mps.lang.core", uid = "mps:ceab5195-25ea-4f22-9b92-103b95ca8c0c") {
24-
object BaseConcept : SimpleConcept(conceptName = "BaseConcept", is_abstract = true, uid = "mps:ceab5195-25ea-4f22-9b92-103b95ca8c0c/1133920641626") {
25-
init { addConcept(this) }
27+
object jetbrains_mps_lang_core :
28+
SimpleLanguage(name = "jetbrains.mps.lang.core", uid = "mps:ceab5195-25ea-4f22-9b92-103b95ca8c0c") {
29+
30+
override var includedConcepts = arrayOf(BaseConcept, Attribute, NodeAttribute, INamedConcept)
31+
32+
object BaseConcept : SimpleConcept(
33+
conceptName = "BaseConcept",
34+
is_abstract = true,
35+
uid = "mps:ceab5195-25ea-4f22-9b92-103b95ca8c0c/1133920641626",
36+
) {
37+
init {
38+
addConcept(this)
39+
}
40+
2641
val virtualPackage by property("ceab5195-25ea-4f22-9b92-103b95ca8c0c/1133920641626/1193676396447")
27-
val smodelAttribute by childLink("ceab5195-25ea-4f22-9b92-103b95ca8c0c/1133920641626/5169995583184591170").multiple().optional().type { Attribute }
42+
val smodelAttribute by childLink("ceab5195-25ea-4f22-9b92-103b95ca8c0c/1133920641626/5169995583184591170").multiple()
43+
.optional().type { Attribute }
2844
}
45+
2946
object Attribute : SimpleConcept(
3047
conceptName = "Attribute",
3148
is_abstract = true,
@@ -34,6 +51,7 @@ object BuiltinLanguages {
3451
) {
3552
init { addConcept(this) }
3653
}
54+
3755
object NodeAttribute : SimpleConcept(
3856
conceptName = "NodeAttribute",
3957
is_abstract = true,
@@ -42,6 +60,7 @@ object BuiltinLanguages {
4260
) {
4361
init { addConcept(this) }
4462
}
63+
4564
object INamedConcept : SimpleConcept(conceptName = "INamedConcept") {
4665
init { addConcept(this) }
4766
val name by property("ceab5195-25ea-4f22-9b92-103b95ca8c0c/1169194658468/1169194664001")
@@ -53,7 +72,14 @@ object BuiltinLanguages {
5372
* https://github.com/JetBrains/MPS-extensions/blob/5d96c3e69192f8902cf9aa7d846d05ccfb65253d/code/model-api/org.modelix.model.repositoryconcepts/models/org.modelix.model.repositoryconcepts.structure.mps ,
5473
* but to get rid of that dependency, they are redefined here, with their original IDs to stay compatible.
5574
*/
56-
object MPSRepositoryConcepts : SimpleLanguage("org.modelix.model.repositoryconcepts", uid = "mps:0a7577d1-d4e5-431d-98b1-fae38f9aee80") {
75+
object MPSRepositoryConcepts :
76+
SimpleLanguage("org.modelix.model.repositoryconcepts", uid = "mps:0a7577d1-d4e5-431d-98b1-fae38f9aee80") {
77+
78+
override var includedConcepts = arrayOf(
79+
Model, Module, Solution, Language, DevKit, Repository, Project, ProjectModule, ModuleReference,
80+
ModelReference, LanguageDependency, SingleLanguageDependency, DevkitDependency, ModuleFacet,
81+
JavaModuleFacet, ModuleDependency,
82+
)
5783

5884
object Model : SimpleConcept(
5985
conceptName = "Model",
@@ -314,7 +340,11 @@ object BuiltinLanguages {
314340
}
315341
}
316342

317-
object ModelixRuntimelang : SimpleLanguage("org.modelix.model.runtimelang", uid = "mps:b6980ebd-f01d-459d-a952-38740f6313b4") {
343+
object ModelixRuntimelang :
344+
SimpleLanguage("org.modelix.model.runtimelang", uid = "mps:b6980ebd-f01d-459d-a952-38740f6313b4") {
345+
346+
override var includedConcepts = arrayOf(ModelServerInfo, RepositoryInfo, BranchInfo)
347+
318348
object ModelServerInfo : SimpleConcept(
319349
conceptName = "ModelServerInfo",
320350
uid = "mps:b6980ebd-f01d-459d-a952-38740f6313b4/7113393488488348863",
@@ -371,6 +401,7 @@ private fun SimpleConcept.property(uid: String) = object {
371401
private val instance: IProperty by lazy {
372402
SimpleProperty(name, uid = uid).also { owner.addProperty(it) }
373403
}
404+
374405
operator fun getValue(ownerConcept: SimpleConcept, kotlinProperty: KProperty<*>): IProperty {
375406
this.owner = ownerConcept
376407
this.name = kotlinProperty.name
@@ -385,8 +416,15 @@ private fun SimpleConcept.childLink(uid: String) = object {
385416
private var optional: Boolean = true
386417
private lateinit var targetConcept: () -> IConcept
387418
private val instance: IChildLink by lazy {
388-
SimpleChildLink(simpleName = name, uid = uid, isMultiple = multiple, isOptional = optional, targetConcept = targetConcept()).also { owner.addChildLink(it) }
419+
SimpleChildLink(
420+
simpleName = name,
421+
uid = uid,
422+
isMultiple = multiple,
423+
isOptional = optional,
424+
targetConcept = targetConcept(),
425+
).also { owner.addChildLink(it) }
389426
}
427+
390428
operator fun getValue(ownerConcept: SimpleConcept, kotlinProperty: KProperty<*>): IChildLink {
391429
this.owner = ownerConcept
392430
this.name = kotlinProperty.name

model-api/src/commonMain/kotlin/org/modelix/model/api/SimpleLanguage.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,7 @@ open class SimpleLanguage(private val name: String, private val uid: String? = n
4444
}
4545

4646
override fun getName() = name
47+
48+
// just a dummy field to make sure that the (lazy) concepts are registered automatically
49+
protected open var includedConcepts: Array<SimpleConcept> = arrayOf()
4750
}

0 commit comments

Comments
 (0)