diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 32c5a14e..730886f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ modelix-model-api-gen = { id = "org.modelix.model-api-gen", version.ref = "model npm-publish = { id = "dev.petuska.npm.publish", version = "3.5.2" } [versions] -modelixCore = "11.2.1" +modelixCore = "11.3.0" kotlinCoroutines="1.10.1" ktor="3.0.3" diff --git a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/modelix/util/INodeExt.kt b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/modelix/util/INodeExt.kt index fd06ec61..fe03f985 100644 --- a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/modelix/util/INodeExt.kt +++ b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/modelix/util/INodeExt.kt @@ -24,20 +24,23 @@ import org.modelix.model.api.BuiltinLanguages import org.modelix.model.api.INode import org.modelix.model.api.PNodeAdapter import org.modelix.model.api.isSubConceptOf -import org.modelix.model.mpsadapters.MPSNode +import org.modelix.model.mpsadapters.MPSWritableNode @UnstableModelixFeature(reason = "The new modelix MPS plugin is under construction", intendedFinalization = "This feature is finalized when the new sync plugin is ready for release.") -fun INode.nodeIdAsLong(): Long = - when (this) { - is PNodeAdapter -> this.nodeId - is MPSNode -> { - val nodeId = this.node.nodeId +fun INode.nodeIdAsLong(): Long { + val node = this + val writableNode = this.asWritableNode() + return when { + node is PNodeAdapter -> node.nodeId + writableNode is MPSWritableNode -> { + val nodeId = writableNode.node.nodeId check(nodeId is Regular) { "Unsupported NodeId format: $nodeId" } nodeId.id } else -> throw IllegalStateException("Unsupported INode implementation") } +} @UnstableModelixFeature(reason = "The new modelix MPS plugin is under construction", intendedFinalization = "This feature is finalized when the new sync plugin is ready for release.") fun INode.isModule(): Boolean { diff --git a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/mps/factories/SNodeFactory.kt b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/mps/factories/SNodeFactory.kt index 1a8b0848..3c1e0176 100644 --- a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/mps/factories/SNodeFactory.kt +++ b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/mps/factories/SNodeFactory.kt @@ -32,9 +32,9 @@ import org.modelix.model.api.PNodeReference import org.modelix.model.api.getNode import org.modelix.model.mpsadapters.MPSArea import org.modelix.model.mpsadapters.MPSLanguageRepository -import org.modelix.model.mpsadapters.MPSNode import org.modelix.model.mpsadapters.MPSProperty import org.modelix.model.mpsadapters.MPSReferenceLink +import org.modelix.model.mpsadapters.MPSWritableNode import org.modelix.mps.sync.modelix.util.getMpsNodeId import org.modelix.mps.sync.modelix.util.nodeIdAsLong import org.modelix.mps.sync.mps.services.ServiceLocator @@ -151,7 +151,7 @@ class SNodeFactory( } else { // target node is an existing SNode val area = MPSArea(mpsRepository) - val mpsNode = area.resolveNode(targetNodeReference) as MPSNode? + val mpsNode = area.resolveNode(targetNodeReference)?.asWritableNode() as MPSWritableNode? requireNotNull(mpsNode) { "SNode identified by Node $sourceNodeId is not found." } source.setReferenceTarget(reference, mpsNode.node) } diff --git a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/cache/MpsToModelixMapInitializerVisitor.kt b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/cache/MpsToModelixMapInitializerVisitor.kt index 07ae5f99..7bd5e76d 100644 --- a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/cache/MpsToModelixMapInitializerVisitor.kt +++ b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/cache/MpsToModelixMapInitializerVisitor.kt @@ -143,7 +143,7 @@ class MpsToModelixMapInitializerVisitor( Pair(modelId, modelName) } else { // target is an SModel in MPS - val modelixModelImport = MPSArea(repository).resolveNode(targetModelRef) as MPSModelImportAsNode? + val modelixModelImport = MPSArea(repository).resolveNode(targetModelRef)?.asWritableNode() as MPSModelImportAsNode? requireNotNull(modelixModelImport) { "Model Import identified by Node $modelImport is not found." } val targetModel = modelixModelImport.importedModel val modelId = targetModel.modelId diff --git a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/modelixToMps/incremental/ModelixTreeChangeVisitor.kt b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/modelixToMps/incremental/ModelixTreeChangeVisitor.kt index 6227c812..a9c1592b 100644 --- a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/modelixToMps/incremental/ModelixTreeChangeVisitor.kt +++ b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/modelixToMps/incremental/ModelixTreeChangeVisitor.kt @@ -26,7 +26,7 @@ import org.modelix.model.api.PropertyFromName import org.modelix.model.api.getNode import org.modelix.model.mpsadapters.MPSArea import org.modelix.model.mpsadapters.MPSLanguageRepository -import org.modelix.model.mpsadapters.MPSNode +import org.modelix.model.mpsadapters.MPSWritableNode import org.modelix.mps.sync.modelix.util.getModule import org.modelix.mps.sync.modelix.util.isDevKitDependency import org.modelix.mps.sync.modelix.util.isModel @@ -104,7 +104,7 @@ class ModelixTreeChangeVisitor( nodeMap.getNode(targetNode.nodeIdAsLong()) } else { val area = MPSArea(mpsRepository) - val mpsNode = area.resolveNode(targetNodeReference) as MPSNode? + val mpsNode = area.resolveNode(targetNodeReference)?.asWritableNode() as MPSWritableNode? requireNotNull(mpsNode) { "SNode identified by Node $nodeId is not found." } mpsNode.node } diff --git a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/modelixToMps/transformers/ModelTransformer.kt b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/modelixToMps/transformers/ModelTransformer.kt index 964d2462..f026917a 100644 --- a/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/modelixToMps/transformers/ModelTransformer.kt +++ b/mps-sync-plugin-lib/src/main/kotlin/org/modelix/mps/sync/transformation/modelixToMps/transformers/ModelTransformer.kt @@ -204,9 +204,9 @@ class ModelTransformer( ) } else { // target is an SModel in MPS - val modelixModelImport = MPSArea(mpsRepository).resolveNode(targetModelRef) as MPSModelImportAsNode? + val modelixModelImport = MPSArea(mpsRepository).resolveNode(targetModelRef)?.asWritableNode() as MPSModelImportAsNode? requireNotNull(modelixModelImport) { "Model Import identified by Node $nodeId is not found." } - val modelImport = modelixModelImport.importedModel.reference + val modelImport = modelixModelImport.importedModel ModelImports(sourceModel).addModelImport(modelImport) nodeMap.put(sourceModel, modelImport, iNode.nodeIdAsLong())