Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-07-16 16:28:56 +0000
committerEd Willink2016-07-17 16:37:29 +0000
commit71dab64629aed0a4b38948ae4f4c4922d0f8efe9 (patch)
tree444b0ccd5b89c306fa5080a6331477a9c705becf
parent1bc785678a9ff0ce5546f1f08c2320d042146d0a (diff)
downloadorg.eclipse.qvtd-71dab64629aed0a4b38948ae4f4c4922d0f8efe9.tar.gz
org.eclipse.qvtd-71dab64629aed0a4b38948ae4f4c4922d0f8efe9.tar.xz
org.eclipse.qvtd-71dab64629aed0a4b38948ae4f4c4922d0f8efe9.zip
ok
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/QVTs2QVTs.java6
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/Split.java21
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/SplitterVisitor.java37
3 files changed, 37 insertions, 27 deletions
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 689a09cde..9d19eada6 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
@@ -99,22 +99,22 @@ public class QVTs2QVTs extends QVTimperativeHelper
}
}
- protected void splitMultiHeadedRegions(@NonNull MultiRegion multiRegion) {
+ protected void splitMultiHeadedRegions(@NonNull RootScheduledRegion rootRegion, @NonNull MultiRegion multiRegion) {
for (@NonNull Region region : Lists.newArrayList(multiRegion.getActiveRegions())) {
if (region instanceof SimpleMappingRegion) {
Splitter splitter = new Splitter((@NonNull SimpleMappingRegion) region);
Split split = splitter.split();
if (split != null) {
- split.install(multiRegion);
+ split.install(rootRegion, multiRegion);
}
}
}
}
public @NonNull RootScheduledRegion transform(@NonNull MultiRegion multiRegion) {
- splitMultiHeadedRegions(multiRegion);
List<@NonNull Region> activeRegions = multiRegion.getActiveRegions();
RootScheduledRegion rootRegion = createRootRegion(activeRegions);
+ splitMultiHeadedRegions(rootRegion, multiRegion);
rootRegion.createSchedule();
createSchedule(rootRegion);
return rootRegion;
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/Split.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/Split.java
index fe4b68f81..c88f4179a 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/Split.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/Split.java
@@ -24,6 +24,7 @@ import org.eclipse.qvtd.compiler.internal.qvtp2qvts.MultiRegion;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.Node;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.QVTp2QVTs;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.Region;
+import org.eclipse.qvtd.compiler.internal.qvtp2qvts.RootScheduledRegion;
import org.eclipse.qvtd.compiler.internal.utilities.CompilerUtil;
/**
@@ -33,22 +34,22 @@ public class Split
{
public static class BodySplitterVisitor extends SplitterVisitor
{
- public BodySplitterVisitor(@NonNull MultiRegion multiRegion, @NonNull Stage stage, int stageNumber, @NonNull Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode) {
- super(multiRegion, stage, stageNumber, oldSourceNode2newSourceNode);
+ public BodySplitterVisitor(@NonNull RootScheduledRegion rootRegion, @NonNull MultiRegion multiRegion, @NonNull Stage stage, int stageNumber, @NonNull Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode) {
+ super(rootRegion, multiRegion, stage, stageNumber, oldSourceNode2newSourceNode);
}
}
public static class HeadSplitterVisitor extends SplitterVisitor
{
- public HeadSplitterVisitor(@NonNull MultiRegion multiRegion, @NonNull Stage stage, int stageNumber, @NonNull Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode) {
- super(multiRegion, stage, stageNumber, oldSourceNode2newSourceNode);
+ public HeadSplitterVisitor(@NonNull RootScheduledRegion rootRegion, @NonNull MultiRegion multiRegion, @NonNull Stage stage, int stageNumber, @NonNull Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode) {
+ super(rootRegion, multiRegion, stage, stageNumber, oldSourceNode2newSourceNode);
}
}
public static class LoopSplitterVisitor extends SplitterVisitor
{
- public LoopSplitterVisitor(@NonNull MultiRegion multiRegion, @NonNull Stage stage, int stageNumber, @NonNull Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode) {
- super(multiRegion, stage, stageNumber, oldSourceNode2newSourceNode);
+ public LoopSplitterVisitor(@NonNull RootScheduledRegion rootRegion, @NonNull MultiRegion multiRegion, @NonNull Stage stage, int stageNumber, @NonNull Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode) {
+ super(rootRegion, multiRegion, stage, stageNumber, oldSourceNode2newSourceNode);
}
}
@@ -112,7 +113,7 @@ public class Split
}
}
- public void install(@NonNull MultiRegion multiRegion) {
+ public void install(@NonNull RootScheduledRegion rootRegion, @NonNull MultiRegion multiRegion) {
Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode = new HashMap<>();
Region oldRegion = splitter.getRegion();
// Iterable<@NonNull Node> newHeadNodes = stages.get(0).getHeadNodes();
@@ -129,7 +130,7 @@ public class Split
//
Stage nextStage = stageIterator.hasNext() ? stageIterator.next() : null;
assert nextStage instanceof HeadStage;
- SplitterVisitor visitor = new HeadSplitterVisitor(multiRegion, nextStage, ++stageNumber, oldSourceNode2newSourceNode);
+ SplitterVisitor visitor = new HeadSplitterVisitor(rootRegion, multiRegion, nextStage, ++stageNumber, oldSourceNode2newSourceNode);
AbstractRegion stageRegion = visitor.createRegion(oldRegion);
multiRegion.addActiveRegion(stageRegion);
@@ -149,7 +150,7 @@ public class Split
// LoopStage
//
while (nextStage instanceof HeadedStage) {
- visitor = new LoopSplitterVisitor(multiRegion, nextStage, ++stageNumber, oldSourceNode2newSourceNode);
+ visitor = new LoopSplitterVisitor(rootRegion, multiRegion, nextStage, ++stageNumber, oldSourceNode2newSourceNode);
stageRegion = visitor.createRegion(oldRegion);
multiRegion.addActiveRegion(stageRegion);
nextStage = stageIterator.hasNext() ? stageIterator.next() : null;
@@ -169,7 +170,7 @@ public class Split
// Body stage
//
assert nextStage instanceof BodyStage;
- visitor = new BodySplitterVisitor(multiRegion, nextStage, ++stageNumber, oldSourceNode2newSourceNode);
+ visitor = new BodySplitterVisitor(rootRegion, multiRegion, nextStage, ++stageNumber, oldSourceNode2newSourceNode);
stageRegion = visitor.createRegion(oldRegion);
multiRegion.addActiveRegion(stageRegion);
if (QVTp2QVTs.DEBUG_GRAPHS.isActive()) {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/SplitterVisitor.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/SplitterVisitor.java
index df1d91663..6022822ee 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/SplitterVisitor.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/splitter/SplitterVisitor.java
@@ -28,6 +28,7 @@ import org.eclipse.qvtd.compiler.internal.qvtp2qvts.MultiRegion;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.Node;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.NodeRole;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.Region;
+import org.eclipse.qvtd.compiler.internal.qvtp2qvts.RootScheduledRegion;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.SimpleMappingRegion;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.SimpleNavigationEdge;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.SimpleNode;
@@ -38,13 +39,15 @@ import org.eclipse.qvtd.compiler.internal.qvtp2qvts.Visitable;
public class SplitterVisitor extends AbstractVisitor<@Nullable Visitable>
{
+ protected final @NonNull RootScheduledRegion rootRegion;
protected final @NonNull MultiRegion multiRegion;
protected final @NonNull Stage stage;
protected final int stageNumber;
protected final @NonNull Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode;
protected final @NonNull Map<@NonNull Visitable, @NonNull Visitable> old2new = new HashMap<>();
- public SplitterVisitor(@NonNull MultiRegion multiRegion, @NonNull Stage stage, int stageNumber, @NonNull Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode) {
+ public SplitterVisitor(@NonNull RootScheduledRegion rootRegion, @NonNull MultiRegion multiRegion, @NonNull Stage stage, int stageNumber, @NonNull Map<@NonNull Node, @NonNull Node> oldSourceNode2newSourceNode) {
+ this.rootRegion = rootRegion;
this.multiRegion = multiRegion;
this.stage = stage;
this.stageNumber = stageNumber;
@@ -110,17 +113,29 @@ public class SplitterVisitor extends AbstractVisitor<@Nullable Visitable>
public @Nullable Visitable visitBasicSimpleEdge(@NonNull BasicSimpleEdge oldBasicSimpleEdge) {
BasicSimpleEdge newBasicSimpleEdge = basicGetNew(BasicSimpleEdge.class, oldBasicSimpleEdge, false);
if (newBasicSimpleEdge == null) {
- SimpleNode sourceNode = basicGetNew(SimpleNode.class, oldBasicSimpleEdge.getSource(), true);
- if (sourceNode != null) {
+ SimpleNode newSourceNode = basicGetNew(SimpleNode.class, oldBasicSimpleEdge.getSource(), true);
+ if (newSourceNode != null) {
EdgeRole edgeRole = oldBasicSimpleEdge.getEdgeRole();
SimpleRegion newRegion = getNew(SimpleRegion.class, oldBasicSimpleEdge.getRegion());
String name = oldBasicSimpleEdge.getName();
- SimpleNode targetNode = getNew(SimpleNode.class, oldBasicSimpleEdge.getTarget());
- newBasicSimpleEdge = new BasicSimpleEdge(edgeRole, newRegion, sourceNode, name, targetNode);
- // for (@NonNull TypedElement typedElement : oldBasicSimpleEdge.getTypedElements()) {
- // newBasicSimpleEdge.addTypedElement(typedElement);
- // }
+ SimpleNode newTargetNode = getNew(SimpleNode.class, oldBasicSimpleEdge.getTarget());
+ newBasicSimpleEdge = new BasicSimpleEdge(edgeRole, newRegion, newSourceNode, name, newTargetNode);
}
+ /* else {
+ newSourceNode = basicGetNew(SimpleNode.class, oldBasicSimpleEdge.getSource(), true);
+ if (newSourceNode != null) {
+ SimpleNode newTargetNode = getNew(SimpleNode.class, oldBasicSimpleEdge.getTarget());
+ SymbolNameBuilder s = new SymbolNameBuilder();
+ s.appendString("js_");
+ s.appendName(newTargetNode.getClassDatumAnalysis().getCompleteClass().getName());
+ SplitRegionConnection headConnection = new SplitRegionConnection(multiRegion.getSchedulerConstants(),
+ newSourceNode, newTargetNode, s);
+ if (QVTp2QVTs.CONNECTION_CREATION.isActive()) {
+ QVTp2QVTs.CONNECTION_CREATION.println(" Head NodeConnection to " + newTargetNode);
+ QVTp2QVTs.CONNECTION_CREATION.println(" from " + newSourceNode);
+ }
+ }
+ } */
}
return newBasicSimpleEdge;
}
@@ -164,9 +179,6 @@ public class SplitterVisitor extends AbstractVisitor<@Nullable Visitable>
Property source2targetProperty = oldSimpleNavigationEdge.getProperty();
SimpleNode targetNode = getNew(SimpleNode.class, oldSimpleNavigationEdge.getTarget());
newSimpleNavigationEdge = new SimpleNavigationEdge(edgeRole, newRegion, sourceNode, source2targetProperty, targetNode);
- // for (@NonNull TypedElement typedElement : oldSimpleNavigationEdge.getTypedElements()) {
- // newSimpleNavigationEdge.addTypedElement(typedElement);
- // }
}
}
return newSimpleNavigationEdge;
@@ -196,9 +208,6 @@ public class SplitterVisitor extends AbstractVisitor<@Nullable Visitable>
SimpleRegion newRegion = getNew(SimpleRegion.class, oldSimpleVariableNode.getRegion());
@NonNull VariableDeclaration variable = oldSimpleVariableNode.getVariable();
newSimpleVariableNode = new SimpleVariableNode(nodeRole, newRegion, variable);
- // for (@NonNull TypedElement typedElement : oldSimpleVariableNode.getTypedElements()) {
- // newSimpleVariableNode.addTypedElement(typedElement);
- // }
}
return newSimpleVariableNode;
}

Back to the top