Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-08-15 12:37:28 +0000
committerEd Willink2016-08-15 12:42:22 +0000
commit6d52bc80804f0594caa5d60e6faf1b621eee72e8 (patch)
tree4d0bdea49ef81aca26198286436a3ae29b6c746a
parent3b41b810785f4ab00d4351ed7889cf5db567c02b (diff)
downloadorg.eclipse.qvtd-6d52bc80804f0594caa5d60e6faf1b621eee72e8.tar.gz
org.eclipse.qvtd-6d52bc80804f0594caa5d60e6faf1b621eee72e8.tar.xz
org.eclipse.qvtd-6d52bc80804f0594caa5d60e6faf1b621eee72e8.zip
[498400] Eliminate HEAD/STEP distinction in NodeRole
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNode.java9
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNodeRole.java26
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/NodeRole.java19
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Nodes.java208
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/AssignmentPartition.java4
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/RealizedPartition.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculatedPartition.java6
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculationPartition.java2
8 files changed, 73 insertions, 203 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNode.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNode.java
index 12e454c4a..7248499cc 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNode.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNode.java
@@ -66,6 +66,7 @@ public abstract class AbstractNode implements Node
protected final @NonNull String name;
private @NonNull ClassDatumAnalysis classDatumAnalysis;
private final boolean isDataType;
+ private boolean isHead = false;
private @Nullable NodeConnection incomingConnection = null;
private @Nullable List<@NonNull Edge> incomingEdges = null;
private @Nullable List<@NonNull NodeConnection> outgoingConnections = null;
@@ -408,7 +409,7 @@ public abstract class AbstractNode implements Node
}
protected @NonNull Integer getPenwidth() {
- return nodeRole.getPenwidth();
+ return isHead() ? Role.HEAD_WIDTH : Role.LINE_WIDTH;
}
@Override
@@ -532,7 +533,7 @@ public abstract class AbstractNode implements Node
@Override
public boolean isHead() {
- return nodeRole.isHead();
+ return isHead;
}
@Override
@@ -676,12 +677,12 @@ public abstract class AbstractNode implements Node
@Override
public void resetHead() {
- this.nodeRole = this.nodeRole.resetHead();
+ this.isHead = false;
}
@Override
public void setHead() {
- this.nodeRole = this.nodeRole.setHead();
+ this.isHead = true;
}
public void setLabel(@NonNull GraphStringBuilder s) {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNodeRole.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNodeRole.java
index d68bb92ae..3949e914d 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNodeRole.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/AbstractNodeRole.java
@@ -83,11 +83,6 @@ public abstract class AbstractNodeRole extends AbstractRole implements NodeRole
}
@Override
- public @NonNull Integer getPenwidth() {
- return isHead() /*&& !isResult()*/ ? HEAD_WIDTH : LINE_WIDTH;
- }
-
- @Override
public @Nullable String getShape() {
return null;
}
@@ -108,11 +103,6 @@ public abstract class AbstractNodeRole extends AbstractRole implements NodeRole
}
@Override
- public boolean isHead() {
- return false;
- }
-
- @Override
public boolean isInternal() {
return false;
}
@@ -154,20 +144,4 @@ public abstract class AbstractNodeRole extends AbstractRole implements NodeRole
}
throw new IllegalStateException(this + " cannot be merged with " + nodeRole);
}
-
- @Override
- public @NonNull NodeRole resetHead() {
- if (!isHead()) {
- return this;
- }
- throw new IllegalStateException(this + " cannot be reset as a non-head");
- }
-
- @Override
- public @NonNull NodeRole setHead() {
- if (isHead()) {
- return this;
- }
- throw new IllegalStateException(this + " cannot be set as a head");
- }
} \ No newline at end of file
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/NodeRole.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/NodeRole.java
index a565c656a..8ec88cf19 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/NodeRole.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/NodeRole.java
@@ -31,25 +31,16 @@ public interface NodeRole extends Role
@NonNull Node createNode(@NonNull Region region, @NonNull String name, @NonNull TypedElement typedElement);
/**
- * Return the pen width with which this edge is drawn.
- */
- @NonNull Integer getPenwidth();
-
- /**
* Return the shape or null for default.
*/
@Nullable String getShape();
- // @Nullable String getStyle();
-
boolean isComposed();
boolean isExpression();
boolean isExtraGuardVariable();
- boolean isHead();
-
boolean isInternal();
boolean isIterator();
@@ -68,14 +59,4 @@ public interface NodeRole extends Role
* Return the merged role combining this role and nodeRole.
*/
@NonNull NodeRole merge(@NonNull NodeRole nodeRole);
-
- /**
- * Redesignate a head node as not-a-head, typically following a multi-headed split.
- */
- @NonNull NodeRole resetHead();
-
- /**
- * Redesignate a guard node as a head.
- */
- @NonNull NodeRole setHead();
} \ No newline at end of file
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Nodes.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Nodes.java
index db6481bcc..053e66475 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Nodes.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/Nodes.java
@@ -34,13 +34,6 @@ import org.eclipse.qvtd.pivot.schedule.ClassDatum;
*/
public class Nodes
{
- private static enum HeadableEnum { STEP, HEAD };
- private static enum NavigableEnum { UNNAVIGABLE, NAVIGABLE };
-
- private static @NonNull NavigableEnum asNavigable(boolean isNavigable) {
- return isNavigable ? NavigableEnum.NAVIGABLE : NavigableEnum.UNNAVIGABLE;
- }
-
private static final class ComposingNodeRole extends AbstractNodeRole
{
private static final @NonNull ComposingNodeRole COMPOSING = new ComposingNodeRole();
@@ -73,11 +66,6 @@ public class Nodes
}
@Override
- public @NonNull Integer getPenwidth() {
- return HEAD_WIDTH;
- }
-
- @Override
public @NonNull String getShape() {
return "circle";
}
@@ -99,11 +87,6 @@ public class Nodes
public boolean isExtraGuardVariable() {
return true;
}
-
- @Override
- public boolean isHead() {
- return true;
- }
}
private static final class InputNodeRole extends AbstractNodeRole
@@ -136,16 +119,6 @@ public class Nodes
public @NonNull TypedNode createNode(@NonNull Region region, @NonNull String name, @NonNull TypedElement typedElement) {
throw new UnsupportedOperationException();
}
-
- @Override
- public @NonNull Integer getPenwidth() {
- return Role.HEAD_WIDTH; //isHead ? Role.HEAD_WIDTH : Role.GUARD_WIDTH;
- }
-
- @Override
- public boolean isHead() {
- return true;
- }
}
private static final class IteratorNodeRole extends AbstractNodeRole
@@ -274,11 +247,6 @@ public class Nodes
}
@Override
- public @NonNull Integer getPenwidth() {
- return LINE_WIDTH;
- }
-
- @Override
public @NonNull String getShape() {
return "ellipse";
}
@@ -301,66 +269,34 @@ public class Nodes
private static class PatternNodeRole extends AbstractNodeRole
{
- private static final @NonNull PatternNodeRole CONSTANT_NAVIGABLE_STEP = new PatternNodeRole(Role.Phase.CONSTANT, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
- private static final @NonNull PatternNodeRole CONSTANT_UNNAVIGABLE_STEP = new PatternNodeRole(Role.Phase.CONSTANT, NavigableEnum.UNNAVIGABLE, HeadableEnum.STEP);
- private static final @NonNull PatternNodeRole LOADED_NAVIGABLE_HEAD = new PatternNodeRole(Role.Phase.LOADED, NavigableEnum.NAVIGABLE, HeadableEnum.HEAD);
- private static final @NonNull PatternNodeRole LOADED_NAVIGABLE_STEP = new PatternNodeRole(Role.Phase.LOADED, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
- private static final @NonNull PatternNodeRole LOADED_UNNAVIGABLE_STEP = new PatternNodeRole(Role.Phase.LOADED, NavigableEnum.UNNAVIGABLE, HeadableEnum.STEP);
- private static final @NonNull PatternNodeRole PREDICATED_NAVIGABLE_HEAD = new PatternNodeRole(Role.Phase.PREDICATED, NavigableEnum.NAVIGABLE, HeadableEnum.HEAD);
- private static final @NonNull PatternNodeRole PREDICATED_NAVIGABLE_STEP = new PatternNodeRole(Role.Phase.PREDICATED, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
- private static final @NonNull PatternNodeRole PREDICATED_UNNAVIGABLE_HEAD = new PatternNodeRole(Role.Phase.PREDICATED, NavigableEnum.UNNAVIGABLE, HeadableEnum.HEAD);
- private static final @NonNull PatternNodeRole PREDICATED_UNNAVIGABLE_STEP = new PatternNodeRole(Role.Phase.PREDICATED, NavigableEnum.UNNAVIGABLE, HeadableEnum.STEP);
- private static final @NonNull PatternNodeRole REALIZED_NAVIGABLE_STEP = new PatternNodeRole(Role.Phase.REALIZED, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
- private static final @NonNull PatternNodeRole REALIZED_UNNAVIGABLE_STEP = new PatternNodeRole(Role.Phase.REALIZED, NavigableEnum.UNNAVIGABLE, HeadableEnum.STEP);
- private static final @NonNull PatternNodeRole SPECULATED_NAVIGABLE_HEAD = new PatternNodeRole(Role.Phase.SPECULATED, NavigableEnum.NAVIGABLE, HeadableEnum.HEAD);
- private static final @NonNull PatternNodeRole SPECULATED_NAVIGABLE_STEP = new PatternNodeRole(Role.Phase.SPECULATED, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
- private static final @NonNull PatternNodeRole SPECULATION_NAVIGABLE_STEP = new PatternNodeRole(Role.Phase.SPECULATION, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
-
- public static @NonNull PatternNodeRole getPatternNodeRole(@NonNull Phase phase, @NonNull NavigableEnum navigable, @NonNull HeadableEnum guardable) {
- switch (navigable) {
- case NAVIGABLE: {
- switch (guardable) {
- case HEAD: {
- switch (phase) {
- case LOADED: return LOADED_NAVIGABLE_HEAD;
- case PREDICATED: return PREDICATED_NAVIGABLE_HEAD;
- case SPECULATED: return SPECULATED_NAVIGABLE_HEAD;
- }
- break;
- }
- case STEP: {
- switch (phase) {
- case CONSTANT: return CONSTANT_NAVIGABLE_STEP;
- case LOADED: return LOADED_NAVIGABLE_STEP;
- case PREDICATED: return PREDICATED_NAVIGABLE_STEP;
- case REALIZED: return REALIZED_NAVIGABLE_STEP;
- case SPECULATED: return SPECULATED_NAVIGABLE_STEP;
- case SPECULATION: return SPECULATION_NAVIGABLE_STEP;
- }
- break;
- }
- }
- break;
+ private static final @NonNull PatternNodeRole CONSTANT_NAVIGABLE = new PatternNodeRole(Role.Phase.CONSTANT, true);
+ private static final @NonNull PatternNodeRole CONSTANT_UNNAVIGABLE = new PatternNodeRole(Role.Phase.CONSTANT, false);
+ private static final @NonNull PatternNodeRole LOADED_NAVIGABLE = new PatternNodeRole(Role.Phase.LOADED, true);
+ private static final @NonNull PatternNodeRole LOADED_UNNAVIGABLE = new PatternNodeRole(Role.Phase.LOADED, false);
+ private static final @NonNull PatternNodeRole PREDICATED_NAVIGABLE = new PatternNodeRole(Role.Phase.PREDICATED, true);
+ private static final @NonNull PatternNodeRole PREDICATED_UNNAVIGABLE = new PatternNodeRole(Role.Phase.PREDICATED, false);
+ private static final @NonNull PatternNodeRole REALIZED_NAVIGABLE = new PatternNodeRole(Role.Phase.REALIZED, true);
+ private static final @NonNull PatternNodeRole REALIZED_UNNAVIGABLE = new PatternNodeRole(Role.Phase.REALIZED, false);
+ private static final @NonNull PatternNodeRole SPECULATED_NAVIGABLE = new PatternNodeRole(Role.Phase.SPECULATED, true);
+ private static final @NonNull PatternNodeRole SPECULATION_NAVIGABLE = new PatternNodeRole(Role.Phase.SPECULATION, true);
+
+ public static @NonNull PatternNodeRole getPatternNodeRole(@NonNull Phase phase, boolean isNavigable) {
+ if (isNavigable) {
+ switch (phase) {
+ case CONSTANT: return CONSTANT_NAVIGABLE;
+ case LOADED: return LOADED_NAVIGABLE;
+ case PREDICATED: return PREDICATED_NAVIGABLE;
+ case REALIZED: return REALIZED_NAVIGABLE;
+ case SPECULATED: return SPECULATED_NAVIGABLE;
+ case SPECULATION: return SPECULATION_NAVIGABLE;
}
- case UNNAVIGABLE: {
- switch (guardable) {
- case HEAD: {
- switch (phase) {
- case PREDICATED: return PREDICATED_UNNAVIGABLE_HEAD;
- }
- break;
- }
- case STEP: {
- switch (phase) {
- case CONSTANT: return CONSTANT_UNNAVIGABLE_STEP;
- case LOADED: return LOADED_UNNAVIGABLE_STEP;
- case PREDICATED: return PREDICATED_UNNAVIGABLE_STEP;
- case REALIZED: return REALIZED_UNNAVIGABLE_STEP;
- }
- break;
- }
- }
- break;
+ }
+ else {
+ switch (phase) {
+ case CONSTANT: return CONSTANT_UNNAVIGABLE;
+ case LOADED: return LOADED_UNNAVIGABLE;
+ case PREDICATED: return PREDICATED_UNNAVIGABLE;
+ case REALIZED: return REALIZED_UNNAVIGABLE;
}
}
throw new UnsupportedOperationException();
@@ -378,47 +314,39 @@ public class Nodes
case CONSTANT: phase = Phase.CONSTANT; break;
default: throw new UnsupportedOperationException();
}
- NavigableEnum navigableEnum = Nodes.asNavigable(sourceNode.isNavigable());
- return getPatternNodeRole(phase, navigableEnum, HeadableEnum.STEP);
+ return getPatternNodeRole(phase, sourceNode.isNavigable());
}
- private final @NonNull NavigableEnum navigable;
- private final @NonNull HeadableEnum guardable;
+ private final boolean isNavigable;
- private PatternNodeRole(@NonNull Phase phase, @NonNull NavigableEnum navigable, @NonNull HeadableEnum guardable) {
+ private PatternNodeRole(@NonNull Phase phase, boolean isNavigable) {
super(phase);
- this.navigable = navigable;
- this.guardable = guardable;
+ this.isNavigable = isNavigable;
}
@Override
public @NonNull NodeRole asNavigable() {
- return getPatternNodeRole(phase, NavigableEnum.NAVIGABLE, guardable);
+ return getPatternNodeRole(phase, true);
}
@Override
public @NonNull PatternNodeRole asPhase(@NonNull Phase phase) {
- return getPatternNodeRole(phase, navigable, guardable);
+ return getPatternNodeRole(phase, isNavigable);
}
@Override
public @NonNull NodeRole asSpeculated() {
- return getPatternNodeRole(Phase.SPECULATED, NavigableEnum.NAVIGABLE, HeadableEnum.HEAD);
+ return getPatternNodeRole(Phase.SPECULATED, true);
}
@Override
public @NonNull NodeRole asSpeculation() {
- return getPatternNodeRole(Phase.SPECULATION, NavigableEnum.NAVIGABLE, guardable);
- }
-
- @Override
- public boolean isHead() {
- return guardable == HeadableEnum.HEAD;
+ return getPatternNodeRole(Phase.SPECULATION, true);
}
@Override
public boolean isNavigable() {
- return navigable == NavigableEnum.NAVIGABLE;
+ return isNavigable;
}
@Override
@@ -430,32 +358,19 @@ public class Nodes
public @NonNull NodeRole merge(@NonNull NodeRole nodeRole) {
assert nodeRole instanceof PatternNodeRole;
Phase mergedPhase = RegionUtil.mergeToMoreKnownPhase(this, nodeRole).getPhase();
- NavigableEnum mergedNavigable;
- HeadableEnum mergedGuardable;
+ boolean mergedNavigable;
if (mergedPhase == Phase.REALIZED) {
- mergedNavigable = NavigableEnum.UNNAVIGABLE;
- mergedGuardable = HeadableEnum.STEP;
+ mergedNavigable = false;
}
else {
- mergedNavigable = Nodes.asNavigable(isNavigable() || nodeRole.isNavigable());
- mergedGuardable = (isHead() && nodeRole.isHead()) ? HeadableEnum.HEAD : HeadableEnum.STEP;
+ mergedNavigable = isNavigable() || nodeRole.isNavigable();
}
- return getPatternNodeRole(mergedPhase, mergedNavigable, mergedGuardable);
- }
-
- @Override
- public @NonNull NodeRole resetHead() {
- return getPatternNodeRole(phase, navigable, HeadableEnum.STEP);
- }
-
- @Override
- public @NonNull NodeRole setHead() {
- return getPatternNodeRole(phase, navigable, HeadableEnum.HEAD);
+ return getPatternNodeRole(mergedPhase, mergedNavigable);
}
@Override
public String toString() {
- return phase + (isNavigable() ? "-Navigable" : "-Unnavigable") + (isHead() ? "Head-" : "Step-") + getClass().getSimpleName();
+ return phase + (isNavigable() ? "-Navigable-" : "-Unnavigable-") + getClass().getSimpleName();
}
}
@@ -497,11 +412,6 @@ public class Nodes
}
@Override
- public boolean isHead() {
- return true;
- }
-
- @Override
public boolean isTrue() {
return true;
}
@@ -549,7 +459,7 @@ public class Nodes
case CONSTANT: phase = Role.Phase.CONSTANT; break;
default: throw new UnsupportedOperationException();
}
- PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(phase, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
+ PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(phase, true);
Property property = QVTcoreBaseUtil.getTargetProperty(navigationAssignment);
// PatternNodeRole patternNodeRole = PatternNodeRole.getDataTypeNodeRole(targetNode, property);
// assert sourceNode.isClass();
@@ -571,7 +481,9 @@ public class Nodes
public static @NonNull TypedNode createExtraGuardNode(@NonNull Region region, @NonNull String name, @NonNull ClassDatumAnalysis classDatumAnalysis) {
ExtraGuardNodeRole extraGuardNodeRole = ExtraGuardNodeRole.getExtraGuardNodeRole();
- return extraGuardNodeRole.createNode(region, name, classDatumAnalysis);
+ TypedNode node = extraGuardNodeRole.createNode(region, name, classDatumAnalysis);
+ node.setHead();
+ return node;
}
public static @NonNull Node createInputNode(@NonNull Region region, NodeRole.@NonNull Phase nodeRolePhase, @NonNull String name, @NonNull ClassDatumAnalysis classDatumAnalysis) {
@@ -584,13 +496,12 @@ public class Nodes
}
public static @NonNull VariableNode createLetVariableNode(@NonNull Variable letVariable, @NonNull Node inNode) {
- NavigableEnum resolvedIsNavigable = asNavigable(inNode.isNavigable());
- PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(inNode.getNodeRole().getPhase(), resolvedIsNavigable, HeadableEnum.STEP);
+ PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(inNode.getNodeRole().getPhase(), inNode.isNavigable());
return patternNodeRole.createNode(inNode.getRegion(), letVariable);
}
public static @NonNull VariableNode createLoadedStepNode(@NonNull Region region, @NonNull VariableDeclaration stepVariable) {
- PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.LOADED, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
+ PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.LOADED, true);
return patternNodeRole.createNode(region, stepVariable);
}
@@ -607,12 +518,12 @@ public class Nodes
DomainUsage domainUsage = region.getSchedulerConstants().getDomainUsage(variable);
boolean isEnforceable = domainUsage.isOutput() || domainUsage.isMiddle();
Role.Phase phase = isEnforceable ? Role.Phase.PREDICATED : Role.Phase.LOADED;
- PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(phase, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
+ PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(phase, true);
return patternNodeRole.createNode(region, variable);
}
public static @NonNull TypedNode createOperationElementNode(@NonNull Region region, @NonNull String name, @NonNull ClassDatumAnalysis classDatumAnalysis, @NonNull Node sourceNode) {
- PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(sourceNode.getNodeRole().getPhase(), NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
+ PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(sourceNode.getNodeRole().getPhase(), true);
return patternNodeRole.createNode(region, name, classDatumAnalysis);
}
@@ -623,12 +534,14 @@ public class Nodes
}
public static @NonNull TypedNode createOperationParameterNode(@NonNull Region region, @NonNull String name, @NonNull ClassDatumAnalysis classDatumAnalysis) {
- PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.PREDICATED, NavigableEnum.UNNAVIGABLE, HeadableEnum.HEAD);
- return patternNodeRole.createNode(region, name, classDatumAnalysis);
+ PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.PREDICATED, false);
+ TypedNode node = patternNodeRole.createNode(region, name, classDatumAnalysis);
+ node.setHead();
+ return node;
}
public static @NonNull TypedNode createOperationResultNode(@NonNull Region region, @NonNull String name, @NonNull ClassDatumAnalysis classDatumAnalysis, @NonNull Node sourceNode) {
- PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(sourceNode.getNodeRole().getPhase(), NavigableEnum.UNNAVIGABLE, HeadableEnum.STEP);
+ PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(sourceNode.getNodeRole().getPhase(), false);
return patternNodeRole.createNode(region, name, classDatumAnalysis);
}
@@ -655,12 +568,12 @@ public class Nodes
}
public static @NonNull TypedNode createRealizedDataTypeNode(@NonNull Node sourceNode, @NonNull Property source2targetProperty) {
- PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.REALIZED, NavigableEnum.UNNAVIGABLE, HeadableEnum.STEP);
+ PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.REALIZED, false);
return patternNodeRole.createNode(sourceNode, source2targetProperty);
}
public static @NonNull VariableNode createRealizedStepNode(@NonNull Region region, @NonNull Variable stepVariable) {
- PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.REALIZED, NavigableEnum.UNNAVIGABLE, HeadableEnum.STEP);
+ PatternNodeRole patternNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.REALIZED, false);
return patternNodeRole.createNode(region, stepVariable);
}
@@ -674,13 +587,12 @@ public class Nodes
isDirty = region.getSchedulerConstants().isDirty(referredProperty);
}
Role.Phase phase = sourceNode.isPredicated() || isMiddleOrOutput || isDirty ? Role.Phase.PREDICATED : Role.Phase.LOADED;
- NavigableEnum navigableEnum = isNavigable ? NavigableEnum.NAVIGABLE : NavigableEnum.UNNAVIGABLE;
- PatternNodeRole stepNodeRole = PatternNodeRole.getPatternNodeRole(phase, navigableEnum, HeadableEnum.STEP);
+ PatternNodeRole stepNodeRole = PatternNodeRole.getPatternNodeRole(phase, isNavigable);
return stepNodeRole.createNode(region, name, callExp);
}
public static @NonNull Node createStepNode(@NonNull Region region, @NonNull TypedNode typedNode) {
- NodeRole stepNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.PREDICATED, NavigableEnum.NAVIGABLE, HeadableEnum.STEP);
+ NodeRole stepNodeRole = PatternNodeRole.getPatternNodeRole(Role.Phase.PREDICATED, true);
return stepNodeRole.createNode(region, typedNode.getName(), typedNode.getClassDatumAnalysis());
}
@@ -689,7 +601,9 @@ public class Nodes
org.eclipse.ocl.pivot.Class booleanType = schedulerConstants.getStandardLibrary().getBooleanType();
DomainUsage primitiveUsage = schedulerConstants.getDomainAnalysis().getPrimitiveUsage();
ClassDatumAnalysis classDatumAnalysis = schedulerConstants.getClassDatumAnalysis(booleanType, ClassUtil.nonNullState(primitiveUsage.getTypedModel(null)));
- return TrueNodeRole.TRUE.createNode(region, "«true»", classDatumAnalysis);
+ TypedNode node = TrueNodeRole.TRUE.createNode(region, "«true»", classDatumAnalysis);
+ node.setHead();
+ return node;
}
public static @NonNull Node createUnknownNode(@NonNull Region region, @NonNull String name, @NonNull TypedElement typedElement) {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/AssignmentPartition.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/AssignmentPartition.java
index 1d5d8e774..ddefcff8d 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/AssignmentPartition.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/AssignmentPartition.java
@@ -33,7 +33,7 @@ class AssignmentPartition extends AbstractPartition
// The realized middle (trace) nodes become predicated head nodes.
//
for (@NonNull Node node : partitioner.getRealizedMiddleNodes()) {
- addNode(node, node.getNodeRole().asPredicated().asNavigable().setHead());
+ addNode(node, node.getNodeRole().asPredicated().asNavigable()/*.setHead()*/);
}
//
// The nodes that support identification of the realized edge are used as is.
@@ -52,7 +52,7 @@ class AssignmentPartition extends AbstractPartition
if (targetNodeRole.isRealized()) {
targetNodeRole = targetNodeRole.asPredicated().asNavigable();
}
- addNode(targetNode, targetNodeRole.resetHead());
+ addNode(targetNode, targetNodeRole);
boolean hasPredecessor = false;
for (@NonNull Node sourceNode : getPredecessors(targetNode)) {
hasPredecessor = true;
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/RealizedPartition.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/RealizedPartition.java
index fe08ca027..e87a8c2de 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/RealizedPartition.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/RealizedPartition.java
@@ -86,7 +86,7 @@ class RealizedPartition extends AbstractPartition
private void gatherSourceNavigations(@NonNull Node targetNode, @NonNull NodeRole targetNodeRole) {
if (!hasNode(targetNode)) {
- addNode(targetNode, targetNodeRole.resetHead());
+ addNode(targetNode, targetNodeRole);
for (@NonNull Node sourceNode : getPredecessors(targetNode)) {
gatherSourceNavigations(sourceNode, sourceNode.getNodeRole());
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculatedPartition.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculatedPartition.java
index b6a4b88a9..f1b27d681 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculatedPartition.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculatedPartition.java
@@ -131,7 +131,7 @@ class SpeculatedPartition extends AbstractPartition
private void gatherSourceNavigations(@NonNull Node targetNode, @NonNull NodeRole targetNodeRole) {
if (!hasNode(targetNode)) {
- addNode(targetNode, targetNodeRole.resetHead());
+ addNode(targetNode, targetNodeRole);
if (!tracedInputNodes.contains(targetNode)) {
boolean hasPredecessor = false;
for (@NonNull Node sourceNode : getPredecessors(targetNode)) {
@@ -216,7 +216,7 @@ class SpeculatedPartition extends AbstractPartition
for (@NonNull Node node : partitioner.getPredicatedMiddleNodes()) {
NodeRole nodeRole = node.getNodeRole();
if (node.isPattern() && node.isClass()) {
- nodeRole = nodeRole.resetHead().asSpeculated();
+ nodeRole = nodeRole.asSpeculated();
}
gatherSourceNavigations(node, nodeRole);
}
@@ -259,7 +259,7 @@ class SpeculatedPartition extends AbstractPartition
for (@NonNull Node node : partitioner.getRealizedMiddleNodes()) {
NodeRole nodeRole = node.getNodeRole();
if (node.isPattern() && node.isClass()) {
- nodeRole = nodeRole.asSpeculated().asNavigable().setHead();
+ nodeRole = nodeRole.asSpeculated().asNavigable()/*.setHead()*/;
}
if (!hasNode(node)) {
addNode(node, nodeRole);
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculationPartition.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculationPartition.java
index f84f6388b..cf584d548 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculationPartition.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/SpeculationPartition.java
@@ -36,7 +36,7 @@ class SpeculationPartition extends AbstractPartition
//
for (@NonNull Node node : partitioner.getRealizedMiddleNodes()) {
if (node.isPattern() && node.isClass()) { // FIXME UML2RDBMS experiment
- NodeRole speculationNodeRole = node.getNodeRole().resetHead().asSpeculation();
+ NodeRole speculationNodeRole = node.getNodeRole().asSpeculation();
addNode(node, speculationNodeRole);
for (@NonNull NavigationEdge edge : node.getNavigationEdges()) {
addReachableConstantOrLoadedNodes(edge.getTarget());

Back to the top