diff options
author | Ed Willink | 2019-09-17 14:57:45 +0000 |
---|---|---|
committer | Ed Willink | 2019-09-17 14:59:23 +0000 |
commit | 60b0d0bcc96dde4c400aec1eaf14a9f631b61649 (patch) | |
tree | fb35c626724c5398339e55c5ee80e59b660391c8 | |
parent | 91970f56c237158d43bc53b33d333f5c106236cf (diff) | |
download | org.eclipse.qvtd-ewillink/490172.tar.gz org.eclipse.qvtd-ewillink/490172.tar.xz org.eclipse.qvtd-ewillink/490172.zip |
[490172] CollationManager experimentewillink/490172
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); |