Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2019-09-17 14:57:45 +0000
committerEd Willink2019-09-17 14:59:23 +0000
commit60b0d0bcc96dde4c400aec1eaf14a9f631b61649 (patch)
treefb35c626724c5398339e55c5ee80e59b660391c8
parent91970f56c237158d43bc53b33d333f5c106236cf (diff)
downloadorg.eclipse.qvtd-ewillink/490172.tar.gz
org.eclipse.qvtd-ewillink/490172.tar.xz
org.eclipse.qvtd-ewillink/490172.zip
[490172] CollationManager experimentewillink/490172
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/CollationManager.java20
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/QVTs2QVTs.java11
2 files changed, 24 insertions, 7 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/CollationManager.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/CollationManager.java
index f43d1dcc2..3399ccd00 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/CollationManager.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/CollationManager.java
@@ -11,6 +11,7 @@
package org.eclipse.qvtd.compiler.internal.qvts2qvts;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -23,9 +24,10 @@ import org.eclipse.qvtd.compiler.internal.qvtb2qvts.LoadingRegionAnalysis;
import org.eclipse.qvtd.compiler.internal.qvtb2qvts.OriginalContentsAnalysis;
import org.eclipse.qvtd.compiler.internal.qvtb2qvts.ScheduleManager;
import org.eclipse.qvtd.pivot.qvtschedule.NavigableEdge;
+import org.eclipse.qvtd.pivot.qvtschedule.Node;
import org.eclipse.qvtd.pivot.qvtschedule.PropertyDatum;
-import org.eclipse.qvtd.pivot.qvtschedule.Region;
import org.eclipse.qvtd.pivot.qvtschedule.RootRegion;
+import org.eclipse.qvtd.pivot.qvtschedule.utilities.QVTscheduleUtil;
/**
* CollationManager supervises the collation of elements in ordered slots.
@@ -42,8 +44,8 @@ public class CollationManager
this.originalContentsAnalysis = scheduleManager.getOriginalContentsAnalysis();
}
- public void createCollations(StringBuilder s, @NonNull RootRegion rootRegion, @NonNull Region region) {
- List<@NonNull PropertyDatum> collations = new ArrayList<>();
+ public @NonNull Map<@NonNull PropertyDatum, @NonNull List<@NonNull Node>> createCollations(StringBuilder s, @NonNull RootRegion rootRegion) {
+ Map<@NonNull PropertyDatum, @NonNull List<@NonNull Node>> collations = new HashMap<>();
Map<@NonNull PropertyDatum, @NonNull List<@NonNull NavigableEdge>> basePropertyDatum2newEdges = originalContentsAnalysis.getBasePropertyDatum2newEdges();
for (@NonNull PropertyDatum basePropertyDatum : basePropertyDatum2newEdges.keySet()) {
Property baseProperty = basePropertyDatum.getReferredProperty();
@@ -56,9 +58,14 @@ public class CollationManager
List<@NonNull NavigableEdge> newEdges = basePropertyDatum2newEdges.get(basePropertyDatum);
assert newEdges != null;
for (@NonNull NavigableEdge navigableEdge : newEdges) {
- if (navigableEdge.isPartial()) {
- collations.add(basePropertyDatum);
- break;
+ Node targetNode = QVTscheduleUtil.getTargetNode(navigableEdge);
+ if (/*targetNode.isNew() &&*/ navigableEdge.isPartial()) {
+ List<@NonNull Node> nodes = collations.get(basePropertyDatum);
+ if (nodes == null) {
+ nodes = new ArrayList<>();
+ collations.put(basePropertyDatum, nodes);
+ }
+ nodes.add(targetNode);
}
}
}
@@ -66,5 +73,6 @@ public class CollationManager
}
}
System.out.println("Collations: " + collations);
+ return collations;
}
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/QVTs2QVTs.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/QVTs2QVTs.java
index d606b0216..1cb479390 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/QVTs2QVTs.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/QVTs2QVTs.java
@@ -46,6 +46,7 @@ import org.eclipse.qvtd.pivot.qvtschedule.MappingRegion;
import org.eclipse.qvtd.pivot.qvtschedule.Node;
import org.eclipse.qvtd.pivot.qvtschedule.NodeConnection;
import org.eclipse.qvtd.pivot.qvtschedule.Partition;
+import org.eclipse.qvtd.pivot.qvtschedule.PropertyDatum;
import org.eclipse.qvtd.pivot.qvtschedule.QVTscheduleFactory;
import org.eclipse.qvtd.pivot.qvtschedule.Region;
import org.eclipse.qvtd.pivot.qvtschedule.RootPartition;
@@ -625,12 +626,20 @@ public class QVTs2QVTs extends QVTimperativeHelper
for (@NonNull Region region : activeRegions2) {
if (!(region instanceof LoadingRegion)) {
connectionManager.createIncomingConnections(s, rootRegion, region);
- collationManager.createCollations(s, rootRegion, region);
}
}
if (s != null) {
QVTscheduleConstants.CONNECTION_CREATION.println(s.toString());;
}
+ Map<@NonNull PropertyDatum, @NonNull List<@NonNull Node>> collations = collationManager.createCollations(s, rootRegion);
+ for (@NonNull Iterable<@NonNull Node> collatedNodes : collations.values()) {
+ for (@NonNull Node collatedNode : collatedNodes) {
+ for (@NonNull NodeConnection collatedConnection : QVTscheduleUtil.getOutgoingConnections(collatedNode)) {
+ // collatedConnection.setIsCollated(true);
+ System.out.println("Collating: " + collatedConnection);
+ }
+ }
+ }
}
UtilityAnalysis.assignUtilities(directedScheduleManager, loadingRegion);
directedScheduleManager.writeDebugGraphs("4-pre-partition", true, true, false);

Back to the top