diff --git a/languages/DclareMPS/generator/template/main@generator.mps b/languages/DclareMPS/generator/template/main@generator.mps index a18d2f6e..0c85ce21 100644 --- a/languages/DclareMPS/generator/template/main@generator.mps +++ b/languages/DclareMPS/generator/template/main@generator.mps @@ -1700,6 +1700,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/languages/DclareMPS/models/constraints.mps b/languages/DclareMPS/models/constraints.mps index 1ae2c1a7..14e8a159 100644 --- a/languages/DclareMPS/models/constraints.mps +++ b/languages/DclareMPS/models/constraints.mps @@ -5772,5 +5772,13 @@ + + + + + + + + diff --git a/languages/DclareMPS/models/editor.mps b/languages/DclareMPS/models/editor.mps index b68b38c9..ef3e87c7 100644 --- a/languages/DclareMPS/models/editor.mps +++ b/languages/DclareMPS/models/editor.mps @@ -9674,6 +9674,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9681,9 +9713,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9970,6 +10046,19 @@ + + + + + + + + + + + + + diff --git a/languages/DclareMPS/models/structure.mps b/languages/DclareMPS/models/structure.mps index d126984a..9940b06c 100644 --- a/languages/DclareMPS/models/structure.mps +++ b/languages/DclareMPS/models/structure.mps @@ -1789,6 +1789,20 @@ + + + + + + + + + + + + + + @@ -1832,18 +1846,44 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1856,34 +1896,24 @@ - - - - - - - - - - - - - - - - - - + + + + - - - + + + + + + + @@ -1915,47 +1945,43 @@ - - - - + + + + - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - - + + + + diff --git a/runtime/src/main/java/org/modelingvalue/dclare/mps/DClareMPS.java b/runtime/src/main/java/org/modelingvalue/dclare/mps/DClareMPS.java index 2fa3c260..bdf51768 100644 --- a/runtime/src/main/java/org/modelingvalue/dclare/mps/DClareMPS.java +++ b/runtime/src/main/java/org/modelingvalue/dclare/mps/DClareMPS.java @@ -310,6 +310,16 @@ public void init() { deferredChangeHandlers = deferredChangeHandlers.put(ng.getId(), Concurrent.of(Map.of())); universeTransaction.addImperative(ng.getId(), this::handleNativeDelta, ng.getScheduler(this)::accept, false); } + + for (INativeGroup ng : DRepository.ALL_NATIVE_GROUPS.get(getRepository())) { + for (INativeGroup before : ng.getDependencies()) { + universeTransaction.orderImperativeTransactions(before.getId(), ng.getId()); + } + for (INativeGroup after : ng.getDependents()) { + universeTransaction.orderImperativeTransactions(ng.getId(), after.getId()); + } + } + mpsTransaction.schedule(() -> REPOSITORY_CONTAINER.set(this, getRepository())); mpsTransaction.schedule(() -> DSERVER_METADATA.set(this, dServerMetaData)); if (isCollaberationEnabled()) { diff --git a/runtime/src/main/java/org/modelingvalue/dclare/mps/INativeGroup.java b/runtime/src/main/java/org/modelingvalue/dclare/mps/INativeGroup.java index fc45197c..e1600d2c 100644 --- a/runtime/src/main/java/org/modelingvalue/dclare/mps/INativeGroup.java +++ b/runtime/src/main/java/org/modelingvalue/dclare/mps/INativeGroup.java @@ -20,6 +20,8 @@ package org.modelingvalue.dclare.mps; +import java.util.ArrayList; +import java.util.List; import java.util.function.Consumer; import org.jetbrains.mps.openapi.language.SLanguage; @@ -37,4 +39,12 @@ static INativeGroup of(SLanguage language, String id) { Consumer getScheduler(DClareMPS dclare); + default List getDependencies() { + return new ArrayList<>(); + } + + default List getDependents() { + return new ArrayList<>(); + } + } diff --git a/solutions/DclareMPSPlugin/DclareMPSPlugin.msd b/solutions/DclareMPSPlugin/DclareMPSPlugin.msd index eb565575..00511bb3 100644 --- a/solutions/DclareMPSPlugin/DclareMPSPlugin.msd +++ b/solutions/DclareMPSPlugin/DclareMPSPlugin.msd @@ -1,7 +1,7 @@ - + diff --git a/solutions/DclareMPSRuntime/DclareMPSRuntime.msd b/solutions/DclareMPSRuntime/DclareMPSRuntime.msd index cce46d4d..bbb5f18b 100644 --- a/solutions/DclareMPSRuntime/DclareMPSRuntime.msd +++ b/solutions/DclareMPSRuntime/DclareMPSRuntime.msd @@ -1,10 +1,10 @@ - + - +