From 18aae0d9d5c55e460b611c5cd91738d219581651 Mon Sep 17 00:00:00 2001 From: David Robinson Date: Fri, 16 Feb 2024 12:15:04 -0500 Subject: [PATCH] Allowed ordering of native groups --- .../generator/template/main@generator.mps | 201 ++++++++++++++++++ languages/DclareMPS/models/constraints.mps | 8 + languages/DclareMPS/models/editor.mps | 89 ++++++++ languages/DclareMPS/models/structure.mps | 152 +++++++------ .../modelingvalue/dclare/mps/DClareMPS.java | 10 + .../dclare/mps/INativeGroup.java | 10 + solutions/DclareMPSPlugin/DclareMPSPlugin.msd | 2 +- .../DclareMPSRuntime/DclareMPSRuntime.msd | 4 +- 8 files changed, 410 insertions(+), 66 deletions(-) diff --git a/languages/DclareMPS/generator/template/main@generator.mps b/languages/DclareMPS/generator/template/main@generator.mps index 962d4299..5e0be3f8 100644 --- a/languages/DclareMPS/generator/template/main@generator.mps +++ b/languages/DclareMPS/generator/template/main@generator.mps @@ -1655,6 +1655,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/languages/DclareMPS/models/constraints.mps b/languages/DclareMPS/models/constraints.mps index a9ac8539..19e2f932 100644 --- a/languages/DclareMPS/models/constraints.mps +++ b/languages/DclareMPS/models/constraints.mps @@ -6226,5 +6226,13 @@ + + + + + + + + diff --git a/languages/DclareMPS/models/editor.mps b/languages/DclareMPS/models/editor.mps index 60496946..0b565f27 100644 --- a/languages/DclareMPS/models/editor.mps +++ b/languages/DclareMPS/models/editor.mps @@ -9636,6 +9636,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9643,9 +9675,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9932,6 +10008,19 @@ + + + + + + + + + + + + + diff --git a/languages/DclareMPS/models/structure.mps b/languages/DclareMPS/models/structure.mps index dd2e5064..a7f9bf50 100644 --- a/languages/DclareMPS/models/structure.mps +++ b/languages/DclareMPS/models/structure.mps @@ -1786,6 +1786,20 @@ + + + + + + + + + + + + + + @@ -1829,18 +1843,44 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1853,34 +1893,24 @@ - - - - - - - - - - - - - - - - - - + + + + - - - + + + + + + + @@ -1912,47 +1942,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 b86752b8..f1f8c23f 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 de856cbe..14072fbc 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 99e059b1..04cc6585 100644 --- a/solutions/DclareMPSRuntime/DclareMPSRuntime.msd +++ b/solutions/DclareMPSRuntime/DclareMPSRuntime.msd @@ -1,10 +1,10 @@ - + - +