Skip to content

Commit 16c90f3

Browse files
committed
fix(mps-model-adapters): support setting references to non-existing nodes
1 parent f0252a6 commit 16c90f3

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

mps-model-adapters/src/main/kotlin/org/modelix/model/mpsadapters/MPSWritableNode.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import org.modelix.model.api.NewNodeSpec
3131
import org.modelix.model.api.NodeReference
3232
import org.modelix.model.api.meta.NullConcept
3333
import org.modelix.mps.api.ModelixMpsApi
34+
import org.modelix.mps.multiplatform.model.MPSNodeReference
3435

3536
fun SNode.asReadableNode(): IReadableNode = MPSWritableNode(this)
3637
fun SNode.asWritableNode(): IWritableNode = MPSWritableNode(this)
@@ -212,7 +213,17 @@ data class MPSWritableNode(val node: SNode) : IWritableNode, ISyncTargetNode {
212213
role: IReferenceLinkReference,
213214
target: INodeReference?,
214215
) {
215-
setReferenceTarget(role, target?.let { checkNotNull(getModel().tryResolveNode(it)) { "Target not found: $target" } })
216+
if (target == null) {
217+
node.setReferenceTarget(resolve(role), null)
218+
} else {
219+
val resolvedTarget = getModel().tryResolveNode(target)
220+
if (resolvedTarget != null) {
221+
setReferenceTarget(role, resolvedTarget)
222+
} else {
223+
val targetRef = requireNotNull(MPSNodeReference.tryConvert(target)) { "Not an MPS node: $target" }
224+
node.setReference(resolve(role), targetRef.toMPS())
225+
}
226+
}
216227
}
217228

218229
override fun isValid(): Boolean {

0 commit comments

Comments
 (0)