@@ -11,6 +11,7 @@ import org.jetbrains.mps.openapi.model.EditableSModel
11
11
import org.jetbrains.mps.openapi.model.SModel
12
12
import org.jetbrains.mps.openapi.model.SModelId
13
13
import org.jetbrains.mps.openapi.model.SModelName
14
+ import org.jetbrains.mps.openapi.model.SModelReference
14
15
import org.jetbrains.mps.openapi.module.SModuleId
15
16
import org.jetbrains.mps.openapi.module.SRepository
16
17
import org.jetbrains.mps.openapi.persistence.PersistenceFacade
@@ -19,9 +20,11 @@ import org.modelix.model.api.IChildLinkReference
19
20
import org.modelix.model.api.IConcept
20
21
import org.modelix.model.api.INodeReference
21
22
import org.modelix.model.api.IPropertyReference
23
+ import org.modelix.model.api.IReadableNode
22
24
import org.modelix.model.api.IReferenceLinkReference
23
25
import org.modelix.model.api.IWritableNode
24
26
import org.modelix.model.data.asData
27
+ import org.modelix.mps.multiplatform.model.MPSModelReference
25
28
26
29
data class MPSModelAsNode (val model : SModel ) : MPSGenericNodeAdapter<SModel>() {
27
30
@@ -82,10 +85,24 @@ data class MPSModelAsNode(val model: SModel) : MPSGenericNodeAdapter<SModel>() {
82
85
sourceNode : SpecWithResolvedConcept ,
83
86
): IWritableNode {
84
87
require(sourceNode.getConceptReference() == BuiltinLanguages .MPSRepositoryConcepts .ModelReference .getReference())
88
+ val modelRef = getTargetModelRef(sourceNode.getNode())
89
+ ModelImports (element).addModelImport(modelRef)
90
+ return MPSModelImportAsNode (modelRef, element)
91
+ }
85
92
86
- val importedModel = checkNotNull(sourceNode.getNode().getReferenceTarget(BuiltinLanguages .MPSRepositoryConcepts .ModelReference .model.toReference())) {
87
- " Model reference not set: ${sourceNode.getNode().asLegacyNode().asData().toJson()} "
93
+ private fun getTargetModelRef (modelReferenceNode : IReadableNode ): SModelReference {
94
+ val importedModel = modelReferenceNode.getReferenceTarget(BuiltinLanguages .MPSRepositoryConcepts .ModelReference .model.toReference())
95
+
96
+ if (importedModel == null ) {
97
+ val targetId = checkNotNull(modelReferenceNode.getReferenceTargetRef(BuiltinLanguages .MPSRepositoryConcepts .ModelReference .model.toReference())) {
98
+ " Model reference not set: ${modelReferenceNode.asLegacyNode().asData().toJson()} "
99
+ }
100
+ val refFromId = checkNotNull(MPSModelReference .tryConvert(targetId)) {
101
+ " Target model not resolvable and also has no MPS compatible ID: ${modelReferenceNode.asLegacyNode().asData().toJson()} "
102
+ }
103
+ return refFromId.toMPS()
88
104
}
105
+
89
106
val modelId = checkNotNull(importedModel.getPropertyValue(BuiltinLanguages .MPSRepositoryConcepts .Model .id.toReference())) {
90
107
" Target model has no ID: $importedModel "
91
108
}
@@ -101,8 +118,7 @@ data class MPSModelAsNode(val model: SModel) : MPSGenericNodeAdapter<SModel>() {
101
118
smodelId,
102
119
modelName,
103
120
)
104
- ModelImports (element).addModelImport(modelRef)
105
- return MPSModelImportAsNode (modelRef, element)
121
+ return modelRef
106
122
}
107
123
108
124
override fun remove (
0 commit comments