Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-11-17 20:44:45 +0000
committerEd Willink2016-11-17 20:44:45 +0000
commit05ff46c48bfa221e548e85c0dcdb19c8453bd896 (patch)
tree12f9b5b315b6e708ffdff7ef7987bd157d9b84d2
parentdf0cff81fb09a5b3620a06674e5036706f9ab3f0 (diff)
downloadorg.eclipse.qvtd-05ff46c48bfa221e548e85c0dcdb19c8453bd896.tar.gz
org.eclipse.qvtd-05ff46c48bfa221e548e85c0dcdb19c8453bd896.tar.xz
org.eclipse.qvtd-05ff46c48bfa221e548e85c0dcdb19c8453bd896.zip
[507702] Support semantically distinct derived Variable classes
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java39
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtc2qvtu/QVTc2QVTu.java3
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/IsConstantExpressionVisitor.java34
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/CoreVariableAnalysis.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationVariableAnalysis.java7
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/VariablesAnalysis.java6
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/BasicRegion2Mapping.java67
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java4
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtu2qvtm/QVTu2QVTm.java87
-rw-r--r--plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTp.java9
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java4
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreHelper.java124
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcorePrettyPrintVisitor.java12
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreToStringVisitor.java12
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java24
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationHelper.java14
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationPrettyPrintVisitor.java12
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationToStringVisitor.java14
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/as2cs/QVTcoreDeclarationVisitor.java12
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java9
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSContainmentVisitor.java7
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2as/QVTrelationCSContainmentVisitor.java34
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/scoping/QVTrelationPathElementCSAttribution.java10
23 files changed, 325 insertions, 221 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java
index ad678038f..bbdb6bb77 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java
@@ -36,6 +36,7 @@ import org.eclipse.ocl.pivot.Operation;
import org.eclipse.ocl.pivot.OperationCallExp;
import org.eclipse.ocl.pivot.Package;
import org.eclipse.ocl.pivot.Parameter;
+import org.eclipse.ocl.pivot.ParameterVariable;
import org.eclipse.ocl.pivot.PivotFactory;
import org.eclipse.ocl.pivot.PivotPackage;
import org.eclipse.ocl.pivot.Property;
@@ -57,9 +58,11 @@ import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtcore.BottomVariable;
import org.eclipse.qvtd.pivot.qvtcore.CoreDomain;
import org.eclipse.qvtd.pivot.qvtcore.CoreModel;
import org.eclipse.qvtd.pivot.qvtcore.GuardPattern;
+import org.eclipse.qvtd.pivot.qvtcore.GuardVariable;
import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.OppositePropertyAssignment;
@@ -178,6 +181,15 @@ public abstract class AbstractQVTc2QVTc
}
@Override
+ public @NonNull BottomVariable visitBottomVariable(@NonNull BottomVariable vIn) {
+ BottomVariable vOut = QVTcoreFactory.eINSTANCE.createBottomVariable();
+ context.addTrace(vIn, vOut);
+ vOut.setName(vIn.getName());
+ createAll(vIn.getOwnedComments(), vOut.getOwnedComments());
+ return vOut;
+ }
+
+ @Override
public @Nullable Element visitComment(@NonNull Comment cIn) {
Comment cOut = PivotFactory.eINSTANCE.createComment();
context.addTrace(cIn, cOut);
@@ -248,6 +260,15 @@ public abstract class AbstractQVTc2QVTc
}
@Override
+ public @NonNull GuardVariable visitGuardVariable(@NonNull GuardVariable vIn) {
+ GuardVariable vOut = QVTcoreFactory.eINSTANCE.createGuardVariable();
+ context.addTrace(vIn, vOut);
+ vOut.setName(vIn.getName());
+ createAll(vIn.getOwnedComments(), vOut.getOwnedComments());
+ return vOut;
+ }
+
+ @Override
public @Nullable Element visitImport(@NonNull Import iIn) {
Import iOut = context.createImport(iIn);
createAll(iIn.getOwnedComments(), iOut.getOwnedComments());
@@ -293,6 +314,15 @@ public abstract class AbstractQVTc2QVTc
}
@Override
+ public @NonNull ParameterVariable visitParameterVariable(@NonNull ParameterVariable vIn) {
+ ParameterVariable vOut = PivotFactory.eINSTANCE.createParameterVariable();
+ context.addTrace(vIn, vOut);
+ vOut.setName(vIn.getName());
+ createAll(vIn.getOwnedComments(), vOut.getOwnedComments());
+ return vOut;
+ }
+
+ @Override
public @Nullable Element visitPredicate(@NonNull Predicate pIn) {
Predicate pOut = QVTbaseFactory.eINSTANCE.createPredicate();
context.addTrace(pIn, pOut);
@@ -353,15 +383,6 @@ public abstract class AbstractQVTc2QVTc
}
@Override
- public @NonNull Variable visitVariable(@NonNull Variable vIn) {
- Variable vOut = PivotFactory.eINSTANCE.createVariable();
- context.addTrace(vIn, vOut);
- vOut.setName(vIn.getName());
- createAll(vIn.getOwnedComments(), vOut.getOwnedComments());
- return vOut;
- }
-
- @Override
public @Nullable Element visitVariableAssignment(@NonNull VariableAssignment vaIn) {
VariableAssignment vaOut = QVTcoreFactory.eINSTANCE.createVariableAssignment();
context.addTrace(vaIn, vaOut);
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtc2qvtu/QVTc2QVTu.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtc2qvtu/QVTc2QVTu.java
index d7b54d3f5..95a3b4e05 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtc2qvtu/QVTc2QVTu.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtc2qvtu/QVTc2QVTu.java
@@ -44,6 +44,7 @@ import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtcore.Area;
import org.eclipse.qvtd.pivot.qvtcore.Assignment;
import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtcore.BottomVariable;
import org.eclipse.qvtd.pivot.qvtcore.CoreDomain;
import org.eclipse.qvtd.pivot.qvtcore.CoreModel;
import org.eclipse.qvtd.pivot.qvtcore.CorePattern;
@@ -450,7 +451,7 @@ public class QVTc2QVTu extends AbstractQVTc2QVTc
public @NonNull Variable visitRealizedVariable(@NonNull RealizedVariable rvIn) {
Area aIn = getContainingArea(rvIn);
if (isInputDomain(aIn)) {
- Variable vOut = PivotFactory.eINSTANCE.createVariable();
+ BottomVariable vOut = QVTcoreFactory.eINSTANCE.createBottomVariable();
assert vOut != null;
context.addTrace(rvIn, vOut);
vOut.setName(rvIn.getName());
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/IsConstantExpressionVisitor.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/IsConstantExpressionVisitor.java
index d320d4a66..ddce15e9e 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/IsConstantExpressionVisitor.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/IsConstantExpressionVisitor.java
@@ -11,7 +11,6 @@
package org.eclipse.qvtd.compiler.internal.qvtp2qvts;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
@@ -36,41 +35,44 @@ import org.eclipse.ocl.pivot.TupleLiteralPart;
import org.eclipse.ocl.pivot.TypeExp;
import org.eclipse.ocl.pivot.Variable;
import org.eclipse.ocl.pivot.VariableExp;
-import org.eclipse.ocl.pivot.util.AbstractExtendingVisitor;
import org.eclipse.ocl.pivot.util.Visitable;
+import org.eclipse.ocl.pivot.utilities.PivotUtil;
+import org.eclipse.qvtd.pivot.qvtcore.util.AbstractExtendingQVTcoreVisitor;
+
+import com.google.common.collect.Iterables;
/**
* The INSTANCE of the IsConstantExpressionVisitor visits an expression tree to determine whether
* the tree evaluates to an unconditionally constant value.
- *
- * Any use of a VariableExp with an indeterminate initializer causes a non-constant verdict.
- *
+ *
+ * Any use of a VariableExp with an indeterminate initializer causes a non-constant verdict.
+ *
* Use of a LoopExp iterator within its loop is constant, provided the loop source is constant.
- *
+ *
* Use of NavigationCallExp is constant, provided the navigation source is constant.
- *
+ *
* Use of OperationCallExp is constant, provided the source and arguments are constant; OCL has only queries.
*/
-public class IsConstantExpressionVisitor extends AbstractExtendingVisitor<Boolean, Object>
+public class IsConstantExpressionVisitor extends AbstractExtendingQVTcoreVisitor<@NonNull Boolean, @Nullable Object>
{
/**
* Objects (variables) asserted to be constant by the caller.
*/
- protected final @Nullable Set<Object> knownConstants;
+ protected final @Nullable Set<@NonNull Object> knownConstants;
/**
* Objects (variables) asserted to be constant by the caller or effectively constant as a consequence
* of use within an iteration.
*/
- private /*@LazyNonNull*/ Set<Object> myConstants = null;
+ private /*@LazyNonNull*/ Set<@NonNull Object> myConstants = null;
/**
* Construct an IsConstantExpressionVisitor that may be used to determine whether expressions
* are constant-valued. If knownConstants is provided any references to them are interpreted
* as constant-valued.
*/
- public IsConstantExpressionVisitor(@Nullable Set<Object> knownConstants) {
- super(IsConstantExpressionVisitor.class);
+ public IsConstantExpressionVisitor(@Nullable Set<@NonNull Object> knownConstants) {
+ super(null);
this.knownConstants = knownConstants;
}
@@ -145,14 +147,14 @@ public class IsConstantExpressionVisitor extends AbstractExtendingVisitor<Boolea
}
if (myConstants == null) {
if (knownConstants != null) {
- myConstants = new HashSet<Object>(knownConstants);
+ myConstants = new HashSet<>(knownConstants);
}
else {
- myConstants = new HashSet<Object>();
+ myConstants = new HashSet<>();
}
}
- List<Variable> ownedIterators = loopExp.getOwnedIterators();
- myConstants.addAll(ownedIterators);
+ Iterable<@NonNull Variable> ownedIterators = PivotUtil.getOwnedIterators(loopExp);
+ Iterables.addAll(myConstants, ownedIterators);
return isConstant(ownedIterators) && isConstant(loopExp.getOwnedBody());
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/CoreVariableAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/CoreVariableAnalysis.java
index a3a23daf4..7bc560717 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/CoreVariableAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/CoreVariableAnalysis.java
@@ -27,7 +27,7 @@ public class CoreVariableAnalysis extends AbstractVariableAnalysis
public CoreVariableAnalysis(@NonNull VariablesAnalysis variablesAnalysis, @NonNull String name, @NonNull Type type, @Nullable OCLExpression initValue) {
super(variablesAnalysis, name);
- this.cVariable = variablesAnalysis.createVariable(this.name, type, true, initValue);
+ this.cVariable = variablesAnalysis.createBottomVariable(this.name, type, true, initValue);
}
public CoreVariableAnalysis(@NonNull VariablesAnalysis variablesAnalysis, @NonNull String name, @NonNull Type type) {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationVariableAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationVariableAnalysis.java
index 388cb954f..3aa562557 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationVariableAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationVariableAnalysis.java
@@ -32,6 +32,7 @@ import org.eclipse.qvtd.pivot.qvtcore.CorePattern;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.RealizedVariable;
import org.eclipse.qvtd.pivot.qvtcore.VariableAssignment;
+import org.eclipse.qvtd.pivot.qvtcore.utilities.QVTcoreUtil;
import org.eclipse.qvtd.pivot.qvtrelation.Key;
import org.eclipse.qvtd.pivot.qvttemplate.ObjectTemplateExp;
import org.eclipse.qvtd.pivot.qvttemplate.TemplateExp;
@@ -77,7 +78,7 @@ public class RelationVariableAnalysis extends AbstractVariableAnalysis
}
}
Variable cVariable2 = getCoreVariable();
- List<@NonNull Assignment> cMiddleBottomAssignments = variablesAnalysis.getMiddleBottomPattern().getAssignment();
+ List<@NonNull Assignment> cMiddleBottomAssignments = QVTcoreUtil.getOwnedAssignments(variablesAnalysis.getMiddleBottomPattern());
if (!targetProperty.isIsMany() || (cExpression.getType() instanceof CollectionType)) {
VariableExp cSlotVariableExp = variablesAnalysis.createVariableExp(cVariable2);
NavigationAssignment cAssignment = variablesAnalysis.createNavigationAssignment(cSlotVariableExp, targetProperty, cExpression);
@@ -293,12 +294,12 @@ public class RelationVariableAnalysis extends AbstractVariableAnalysis
//
Type type = ClassUtil.nonNullState(rVariable.getType());
if (isKeyed) {
- cVariable2 = variablesAnalysis.createVariable(name, type, true, null);
+ cVariable2 = variablesAnalysis.createBottomVariable(name, type, true, null);
initializeKeyedVariable(cVariable2);
cPattern.getVariable().add(cVariable2);
}
else if (!isRealized) {
- cVariable2 = variablesAnalysis.createVariable(name, type, rVariable.isIsRequired(), null);
+ cVariable2 = variablesAnalysis.createBottomVariable(name, type, rVariable.isIsRequired(), null);
cPattern.getVariable().add(cVariable2);
}
else {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/VariablesAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/VariablesAnalysis.java
index 2125b39dd..5eb7f462e 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/VariablesAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/VariablesAnalysis.java
@@ -335,7 +335,7 @@ import org.eclipse.qvtd.pivot.qvttemplate.TemplateExp;
OCLExpression cExpression = createVariableExp(cVariable);
NavigationAssignment cAssignment = createNavigationAssignment(cSlotVariableExp, cTargetProperty, cExpression);
QVTr2QVTc.SYNTHESIS.println(" addPropertyAssignment " + cAssignment);
- assertNewAssignment(cMiddleBottomPattern.getAssignment(), cAssignment);
+ assertNewAssignment(QVTcoreUtil.getOwnedAssignments(cMiddleBottomPattern), cAssignment);
cMiddleBottomPattern.getAssignment().add(cAssignment);
}
return cVariable;
@@ -350,7 +350,7 @@ import org.eclipse.qvtd.pivot.qvttemplate.TemplateExp;
}
}
- public void assertNewAssignment(@NonNull List<@NonNull Assignment> oldAssignments, @NonNull NavigationAssignment newAssignment) {
+ public void assertNewAssignment(@NonNull Iterable<@NonNull Assignment> oldAssignments, @NonNull NavigationAssignment newAssignment) {
// if ("tr.action := sm".equals(newAssignment.toString())) {
// newAssignment.toString();
// }
@@ -358,7 +358,7 @@ import org.eclipse.qvtd.pivot.qvttemplate.TemplateExp;
if (newSlotExpression instanceof VariableExp) {
VariableDeclaration newVariable = ((VariableExp)newSlotExpression).getReferredVariable();
Property targetProperty = QVTcoreUtil.getTargetProperty(newAssignment);
- for (Assignment oldAssignment : oldAssignments) {
+ for (@NonNull Assignment oldAssignment : oldAssignments) {
if (oldAssignment instanceof NavigationAssignment) {
if (QVTcoreUtil.getTargetProperty((NavigationAssignment)oldAssignment) == targetProperty) {
OCLExpression oldSlotExpression = ((NavigationAssignment)oldAssignment).getSlotExpression();
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/BasicRegion2Mapping.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/BasicRegion2Mapping.java
index 9ffbbf851..689e4c0f1 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/BasicRegion2Mapping.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/BasicRegion2Mapping.java
@@ -222,6 +222,43 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
return newTypedElements;
}
+ private @NonNull Variable createIteratorVariable(@NonNull Variable oldVariable) {
+ String name = oldVariable.getName();
+ assert name != null;
+ Type type = oldVariable.getType();
+ assert type != null;
+ assert oldVariable.getOwnedInit() == null;
+ Variable newVariable = helper.createIteratorVariable(name, type, oldVariable.isIsRequired());
+ Node variableNode = getNode(oldVariable);
+ if (variableNode != null) {
+ node2variable.put(variableNode, newVariable);
+ }
+ return newVariable;
+ }
+
+ private @NonNull List<@NonNull Variable> createIteratorVariables(@NonNull List<@NonNull Variable> oldVariables) {
+ List<@NonNull Variable> newVariables = new ArrayList<>(oldVariables.size());
+ for (@NonNull Variable oldVariable : oldVariables) {
+ Variable newVariable = createIteratorVariable(oldVariable);
+ newVariables.add(newVariable);
+ }
+ return newVariables;
+ }
+
+ private @NonNull Variable createLetVariable(@NonNull Variable oldVariable) {
+ String name = oldVariable.getName();
+ assert name != null;
+ Type type = oldVariable.getType();
+ assert type != null;
+ OCLExpression newInit = ClassUtil.nonNullState(create(oldVariable.getOwnedInit()));
+ Variable newVariable = helper.createLetVariable(name, type, oldVariable.isIsRequired(), newInit);
+ Node variableNode = getNode(oldVariable);
+ if (variableNode != null) {
+ node2variable.put(variableNode, newVariable);
+ }
+ return newVariable;
+ }
+
private @NonNull OCLExpression createNonNull(@Nullable OCLExpression oldTypedElement) {
assert oldTypedElement != null;
Node node = context.getNode(oldTypedElement);
@@ -231,16 +268,30 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
return create(node);
}
- private @NonNull List<@NonNull Variable> createVariables(@NonNull List<@NonNull Variable> oldVariables) {
+ private @NonNull Variable createResultVariable(@NonNull Variable oldVariable) {
+ String name = oldVariable.getName();
+ assert name != null;
+ Type type = oldVariable.getType();
+ assert type != null;
+ OCLExpression newInit = ClassUtil.nonNullState(create(oldVariable.getOwnedInit()));
+ Variable newVariable = helper.createResultVariable(name, type, oldVariable.isIsRequired(), newInit);
+ Node variableNode = getNode(oldVariable);
+ if (variableNode != null) {
+ node2variable.put(variableNode, newVariable);
+ }
+ return newVariable;
+ }
+
+ /* private @NonNull List<@NonNull Variable> createVariables(@NonNull List<@NonNull Variable> oldVariables) {
List<@NonNull Variable> newVariables = new ArrayList<>(oldVariables.size());
for (@NonNull Variable oldVariable : oldVariables) {
Variable newVariable = createVariable(oldVariable);
newVariables.add(newVariable);
}
return newVariables;
- }
+ } */
- private @NonNull Variable createVariable(@NonNull Variable oldVariable) {
+ /* private @NonNull Variable createVariable(@NonNull Variable oldVariable) {
String name = oldVariable.getName();
assert name != null;
Type type = oldVariable.getType();
@@ -251,7 +302,7 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
node2variable.put(variableNode, newVariable);
}
return newVariable;
- }
+ } */
public @Nullable OCLExpression getExpression(@NonNull Node node) {
if (node.isExplicitNull()) {
@@ -375,8 +426,8 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
public @NonNull OCLExpression visitIterateExp(@NonNull IterateExp pIterateExp) {
OCLExpression iSource = create(pIterateExp.getOwnedSource());
assert iSource != null;
- List<@NonNull ? extends Variable> iIterators = createVariables(ClassUtil.nullFree(pIterateExp.getOwnedIterators()));
- Variable result = createVariable(ClassUtil.nonNull(pIterateExp.getOwnedResult()));
+ List<@NonNull ? extends Variable> iIterators = createIteratorVariables(ClassUtil.nullFree(pIterateExp.getOwnedIterators()));
+ Variable result = createResultVariable(ClassUtil.nonNull(pIterateExp.getOwnedResult()));
Iteration referredIteration = (Iteration) visitor.create(pIterateExp.getReferredIteration());
assert referredIteration != null;
OCLExpression iBody = getInlineExpressionCreator().create(pIterateExp.getOwnedBody());
@@ -388,7 +439,7 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
public @NonNull OCLExpression visitIteratorExp(@NonNull IteratorExp pIteratorExp) {
OCLExpression iSource = create(pIteratorExp.getOwnedSource());
assert iSource != null;
- List<@NonNull ? extends Variable> iIterators = createVariables(ClassUtil.nullFree(pIteratorExp.getOwnedIterators()));
+ List<@NonNull ? extends Variable> iIterators = createIteratorVariables(ClassUtil.nullFree(pIteratorExp.getOwnedIterators()));
Iteration referredIteration = (Iteration) visitor.create(pIteratorExp.getReferredIteration());
assert referredIteration != null;
OCLExpression iBody = getInlineExpressionCreator().create(pIteratorExp.getOwnedBody());
@@ -398,7 +449,7 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
@Override
public @NonNull OCLExpression visitLetExp(@NonNull LetExp pLetExp) {
- Variable asVariable = createVariable(ClassUtil.nonNull(pLetExp.getOwnedVariable()));
+ Variable asVariable = createLetVariable(ClassUtil.nonNull(pLetExp.getOwnedVariable()));
OCLExpression asInExpression = create(pLetExp.getOwnedIn());
assert asInExpression != null;
return helper.createLetExp(asVariable, asInExpression);
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java
index 08edbf696..3ca8ab69d 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java
@@ -25,6 +25,7 @@ import org.eclipse.ocl.pivot.CollectionType;
import org.eclipse.ocl.pivot.DataType;
import org.eclipse.ocl.pivot.InvalidType;
import org.eclipse.ocl.pivot.Iteration;
+import org.eclipse.ocl.pivot.IteratorVariable;
import org.eclipse.ocl.pivot.OCLExpression;
import org.eclipse.ocl.pivot.Operation;
import org.eclipse.ocl.pivot.Property;
@@ -36,7 +37,6 @@ import org.eclipse.ocl.pivot.VoidType;
import org.eclipse.ocl.pivot.ids.IdResolver;
import org.eclipse.ocl.pivot.internal.complete.StandardLibraryInternal;
import org.eclipse.ocl.pivot.utilities.NameUtil;
-import org.eclipse.ocl.pivot.utilities.PivotUtil;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.Edge;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.NavigableEdge;
import org.eclipse.qvtd.compiler.internal.qvtp2qvts.Node;
@@ -264,7 +264,7 @@ public class RootRegion2Mapping extends AbstractScheduledRegion2Mapping
assert collectionType != null;
Type elementType = ((CollectionType)collectionType).getElementType();
assert elementType != null;
- @NonNull Variable asIterator = PivotUtil.createVariable("i", elementType, true, null);
+ @NonNull IteratorVariable asIterator = helper.createIteratorVariable("i", elementType, true);
Property child2parentProperty = edge.getProperty().getOpposite();
assert child2parentProperty != null;
OCLExpression propertyCallExp = helper.createNavigationCallExp(helper.createVariableExp(asIterator), child2parentProperty);
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtu2qvtm/QVTu2QVTm.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtu2qvtm/QVTu2QVTm.java
index edebc8bf5..f2199e936 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtu2qvtm/QVTu2QVTm.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtu2qvtm/QVTu2QVTm.java
@@ -23,7 +23,6 @@ import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.CompleteClass;
import org.eclipse.ocl.pivot.Element;
import org.eclipse.ocl.pivot.OCLExpression;
-import org.eclipse.ocl.pivot.PivotFactory;
import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.Type;
import org.eclipse.ocl.pivot.Variable;
@@ -31,6 +30,7 @@ import org.eclipse.ocl.pivot.VariableDeclaration;
import org.eclipse.ocl.pivot.VariableExp;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.EnvironmentFactory;
+import org.eclipse.ocl.pivot.utilities.PivotUtil;
import org.eclipse.qvtd.compiler.internal.common.AbstractQVTc2QVTc;
import org.eclipse.qvtd.compiler.internal.utilities.SymbolNameBuilder;
import org.eclipse.qvtd.compiler.internal.utilities.SymbolNameReservation;
@@ -146,46 +146,46 @@ public class QVTu2QVTm extends AbstractQVTc2QVTc
protected boolean analyze() {
Area thisArea = getArea(getMapping());
if (thisArea != null) {
- @SuppressWarnings("null")@NonNull GuardPattern thisGuardPattern = thisArea.getGuardPattern();
- guardPredicates.addAll(ClassUtil.nullFree(thisGuardPattern.getPredicate()));
- gatherVariables(thisGuardPattern.getVariable(), MergedVariable.GUARD);
- @SuppressWarnings("null")@NonNull BottomPattern thisBottomPattern = thisArea.getBottomPattern();
- gatherVariables(thisBottomPattern.getVariable(), MergedVariable.BOTTOM);
- gatherAssignments(thisBottomPattern.getAssignment(), ASSIGNMENT);
- bottomPredicates.addAll(ClassUtil.nullFree(thisBottomPattern.getPredicate()));
- gatherVariables(thisBottomPattern.getRealizedVariable(), MergedVariable.BOTTOM);
+ GuardPattern thisGuardPattern = QVTcoreUtil.getGuardPattern(thisArea);
+ guardPredicates.addAll(QVTbaseUtil.getOwnedPredicates(thisGuardPattern));
+ gatherVariables(QVTcoreUtil.getOwnedVariables(thisGuardPattern), MergedVariable.GUARD);
+ BottomPattern thisBottomPattern = QVTcoreUtil.getBottomPattern(thisArea);
+ gatherVariables(QVTcoreUtil.getOwnedVariables(thisBottomPattern), MergedVariable.BOTTOM);
+ gatherAssignments(QVTcoreUtil.getOwnedAssignments(thisBottomPattern), ASSIGNMENT);
+ bottomPredicates.addAll(QVTbaseUtil.getOwnedPredicates(thisBottomPattern));
+ gatherVariables(QVTcoreUtil.getOwnedRealizedVariables(thisBottomPattern), MergedVariable.BOTTOM);
}
for (@NonNull Area childArea : getChildAreas()) {
- @SuppressWarnings("null")@NonNull GuardPattern childGuardPattern = childArea.getGuardPattern();
- guardPredicates.addAll(ClassUtil.nullFree(childGuardPattern.getPredicate()));
- gatherVariables(childGuardPattern.getVariable(), MergedVariable.GUARD);
- @SuppressWarnings("null")@NonNull BottomPattern childBottomPattern = childArea.getBottomPattern();
- gatherVariables(childBottomPattern.getVariable(), MergedVariable.BOTTOM);
- gatherAssignments(childBottomPattern.getAssignment(), ASSIGNMENT);
- bottomPredicates.addAll(ClassUtil.nullFree(childBottomPattern.getPredicate()));
- gatherVariables(childBottomPattern.getRealizedVariable(), MergedVariable.BOTTOM);
+ GuardPattern childGuardPattern = QVTcoreUtil.getGuardPattern(childArea);
+ guardPredicates.addAll(QVTbaseUtil.getOwnedPredicates(childGuardPattern));
+ gatherVariables(QVTcoreUtil.getOwnedVariables(childGuardPattern), MergedVariable.GUARD);
+ BottomPattern childBottomPattern = QVTcoreUtil.getBottomPattern(childArea);
+ gatherVariables(QVTcoreUtil.getOwnedVariables(childBottomPattern), MergedVariable.BOTTOM);
+ gatherAssignments(QVTcoreUtil.getOwnedAssignments(childBottomPattern), ASSIGNMENT);
+ bottomPredicates.addAll(QVTbaseUtil.getOwnedPredicates(childBottomPattern));
+ gatherVariables(QVTcoreUtil.getOwnedRealizedVariables(childBottomPattern), MergedVariable.BOTTOM);
}
for (@NonNull Area parentArea : getParentAreas()) {
assert (parentArea != thisArea);
- @SuppressWarnings("null")@NonNull GuardPattern parentGuardPattern = parentArea.getGuardPattern();
- guardPredicates.addAll(ClassUtil.nullFree(parentGuardPattern.getPredicate()));
- gatherVariables(parentGuardPattern.getVariable(), MergedVariable.GUARD);
- @SuppressWarnings("null")@NonNull BottomPattern parentBottomPattern = parentArea.getBottomPattern();
- gatherVariables(parentBottomPattern.getVariable(), MergedVariable.GUARD); // Hoist
- gatherAssignments(parentBottomPattern.getAssignment(), PREDICATE);
- guardPredicates.addAll(ClassUtil.nullFree(parentBottomPattern.getPredicate())); // Hoist
- gatherVariables(parentBottomPattern.getRealizedVariable(), MergedVariable.GUARD); // Hoist
+ GuardPattern parentGuardPattern = QVTcoreUtil.getGuardPattern(parentArea);
+ guardPredicates.addAll(QVTbaseUtil.getOwnedPredicates(parentGuardPattern));
+ gatherVariables(QVTcoreUtil.getOwnedVariables(parentGuardPattern), MergedVariable.GUARD);
+ BottomPattern parentBottomPattern = QVTcoreUtil.getBottomPattern(parentArea);
+ gatherVariables(QVTcoreUtil.getOwnedVariables(parentBottomPattern), MergedVariable.GUARD); // Hoist
+ gatherAssignments(QVTcoreUtil.getOwnedAssignments(parentBottomPattern), PREDICATE);
+ guardPredicates.addAll(QVTbaseUtil.getOwnedPredicates(parentBottomPattern)); // Hoist
+ gatherVariables(QVTcoreUtil.getOwnedRealizedVariables(parentBottomPattern), MergedVariable.GUARD); // Hoist
}
for (@NonNull Area siblingArea : getSiblingAreas()) {
if (siblingArea != thisArea) {
- @SuppressWarnings("null")@NonNull GuardPattern siblingGuardPattern = siblingArea.getGuardPattern();
- guardPredicates.addAll(ClassUtil.nullFree(siblingGuardPattern.getPredicate()));
- gatherVariables(siblingGuardPattern.getVariable(), MergedVariable.GUARD);
- @SuppressWarnings("null")@NonNull BottomPattern siblingBottomPattern = siblingArea.getBottomPattern();
- gatherVariables(siblingBottomPattern.getVariable(), MergedVariable.BOTTOM); // FIXME legacy compatibility
- gatherAssignments(siblingBottomPattern.getAssignment(), ASSIGNMENT);
- bottomPredicates.addAll(ClassUtil.nullFree(siblingBottomPattern.getPredicate())); // FIXME legacy compatibility
- gatherVariables(siblingBottomPattern.getRealizedVariable(), MergedVariable.BOTTOM);
+ GuardPattern siblingGuardPattern = QVTcoreUtil.getGuardPattern(siblingArea);
+ guardPredicates.addAll(QVTbaseUtil.getOwnedPredicates(siblingGuardPattern));
+ gatherVariables(QVTcoreUtil.getOwnedVariables(siblingGuardPattern), MergedVariable.GUARD);
+ BottomPattern siblingBottomPattern = QVTcoreUtil.getBottomPattern(siblingArea);
+ gatherVariables(QVTcoreUtil.getOwnedVariables(siblingBottomPattern), MergedVariable.BOTTOM); // FIXME legacy compatibility
+ gatherAssignments(QVTcoreUtil.getOwnedAssignments(siblingBottomPattern), ASSIGNMENT);
+ bottomPredicates.addAll(QVTbaseUtil.getOwnedPredicates(siblingBottomPattern)); // FIXME legacy compatibility
+ gatherVariables(QVTcoreUtil.getOwnedRealizedVariables(siblingBottomPattern), MergedVariable.BOTTOM);
}
}
return true;
@@ -300,7 +300,7 @@ public class QVTu2QVTm extends AbstractQVTc2QVTc
BottomPattern mBottomPattern = QVTcoreFactory.eINSTANCE.createBottomPattern();
mArea.setBottomPattern(mBottomPattern);
createVisitor.createAll(bottomPredicates, mBottomPattern.getPredicate());
- synthesizeNavigationAssignments(mBottomPattern.getAssignment());
+ synthesizeNavigationAssignments(QVTcoreUtil.getOwnedAssignments(mBottomPattern));
if (variableName2mergedVariables != null) {
for (@NonNull MergedVariable mergedVariable : variableName2mergedVariables.values()) { // FIXME Change to alphabetical sort
mergedVariable.synthesize(mArea);
@@ -314,11 +314,11 @@ public class QVTu2QVTm extends AbstractQVTc2QVTc
createVisitor.createAll(uArea.getOwnedComments(), mArea.getOwnedComments());
}
//
- @SuppressWarnings("null")@NonNull GuardPattern uGuardPattern = uArea.getGuardPattern();
+ GuardPattern uGuardPattern = QVTcoreUtil.getGuardPattern(uArea);
qvtu2qvtm.addTrace(uGuardPattern, mGuardPattern);
createVisitor.createAll(uGuardPattern.getOwnedComments(), mGuardPattern.getOwnedComments());
//
- @SuppressWarnings("null")@NonNull BottomPattern uBottomPattern = uArea.getBottomPattern();
+ BottomPattern uBottomPattern = QVTcoreUtil.getBottomPattern(uArea);
qvtu2qvtm.addTrace(uBottomPattern, mBottomPattern);
createVisitor.createAll(uBottomPattern.getOwnedComments(), mArea.getOwnedComments());
}
@@ -695,11 +695,12 @@ public class QVTu2QVTm extends AbstractQVTc2QVTc
mArea.getBottomPattern().getRealizedVariable().add(realizedVariable);
}
else {
- mVariable = PivotFactory.eINSTANCE.createVariable();
if (isGuard) {
+ mVariable = QVTcoreFactory.eINSTANCE.createGuardVariable();
mArea.getGuardPattern().getVariable().add(mVariable);
}
else {
+ mVariable = QVTcoreFactory.eINSTANCE.createBottomVariable();
mArea.getBottomPattern().getVariable().add(mVariable);
}
}
@@ -731,9 +732,9 @@ public class QVTu2QVTm extends AbstractQVTc2QVTc
assert assignments2 != null;
VariableAssignment mVariableAssignment = createVisitor.create(assignments2.get(0));
assert mVariableAssignment != null;
- for (@NonNull VariableAssignment uVariableAssignment : assignments2) {
- // createVisitor.getContext().addTrace(uVariableAssignment, mVariableAssignment);
- }
+ // for (@NonNull VariableAssignment uVariableAssignment : assignments2) {
+ // createVisitor.getContext().addTrace(uVariableAssignment, mVariableAssignment);
+ // }
}
}
@@ -838,14 +839,14 @@ public class QVTu2QVTm extends AbstractQVTc2QVTc
while (uNamedMapping.getContext() != null) {
uNamedMapping = uNamedMapping.getContext();
}
- s.appendString(String.valueOf(uNamedMapping.getName()));
+ s.appendString(PivotUtil.getName(uNamedMapping));
List<@NonNull String> guardVariableNames = new ArrayList<@NonNull String>();
for (@NonNull Variable guardVariable : ClassUtil.nullFree(uMapping.getGuardPattern().getVariable())) {
- guardVariableNames.add(String.valueOf(guardVariable.getName()));
+ guardVariableNames.add(PivotUtil.getName(guardVariable));
}
for (@NonNull Domain uDomain : ClassUtil.nullFree(uMapping.getDomain())) {
for (@NonNull Variable guardVariable : ClassUtil.nullFree(((CoreDomain)uDomain).getGuardPattern().getVariable())) {
- guardVariableNames.add(String.valueOf(guardVariable.getName()));
+ guardVariableNames.add(PivotUtil.getName(guardVariable));
}
}
Collections.sort(guardVariableNames);
diff --git a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTp.java b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTp.java
index f58b02d5c..8dabd0747 100644
--- a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTp.java
+++ b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTp.java
@@ -23,11 +23,9 @@ import static org.eclipse.qvtd.cs2as.compiler.internal.OCL2QVTpUtil.getUpdateMap
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
-import java.util.logging.Logger;
import java.util.stream.Collectors;
import org.eclipse.emf.common.util.URI;
@@ -36,7 +34,6 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.Class;
import org.eclipse.ocl.pivot.ExpressionInOCL;
import org.eclipse.ocl.pivot.IfExp;
@@ -74,10 +71,10 @@ import org.eclipse.qvtd.pivot.qvtcore.RealizedVariable;
public class OCL2QVTp {
- private @NonNull Logger logger = Logger.getLogger(getClass().getName());
+ // private @NonNull Logger logger = Logger.getLogger(getClass().getName());
private @NonNull EnvironmentFactory envFact;
private @NonNull String traceabilityPropName;
- private @Nullable Map<?,?> saveOptions;
+ // private @Nullable Map<?,?> saveOptions;
public static final @NonNull String RIGHT_MODEL_TYPE_NAME = "rightAS";
public static final @NonNull String LEFT_MODEL_TYPE_NAME = "leftCS";
@@ -356,7 +353,7 @@ public class OCL2QVTp {
domain.setTypedModel(leftTypedModel);
domain.setIsCheckable(true);
- Variable variable = PivotFactory.eINSTANCE.createVariable();
+ Variable variable = QVTcoreFactory.eINSTANCE.createGuardVariable();
variable.setName("l"+firstToUpperCase().apply(type.getName()));
variable.setType(type);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java b/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java
index c36e0ac01..c11746717 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java
@@ -189,7 +189,7 @@ public class QVTbaseUtil extends PivotUtil
// if (transformationType == null) { // FIXME BUG 487123
// throw new IllegalLibraryException("No Transformation type in standard library."); // FIXME need to be using a derived EnvironmentFactory
// }
- ownedContext = PivotFactory.eINSTANCE.createVariable();
+ ownedContext = PivotFactory.eINSTANCE.createParameterVariable();
ownedContext.setName("this");
ownedContext.setType(transformation); // FIXME promote API
// ownedContext.setTypeValue(transformation);
@@ -208,7 +208,7 @@ public class QVTbaseUtil extends PivotUtil
public static @NonNull Variable getContextVariable(@NonNull StandardLibraryInternal standardLibrary, @NonNull TypedModel typedModel) {
Variable ownedContext = typedModel.getOwnedContext();
if (ownedContext == null) {
- ownedContext = PivotFactory.eINSTANCE.createVariable();
+ ownedContext = PivotFactory.eINSTANCE.createParameterVariable();
ownedContext.setName(typedModel.getName());
ownedContext.setType(standardLibrary.getLibraryType("Model"));
// ownedContext.setTypeValue(typedModel);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreHelper.java b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreHelper.java
index 777cb8965..b43b9d10c 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreHelper.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreHelper.java
@@ -10,31 +10,18 @@
*******************************************************************************/
package org.eclipse.qvtd.pivot.qvtcore.utilities;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.emf.common.util.TreeIterator;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.ocl.pivot.CallExp;
-import org.eclipse.ocl.pivot.CollectionType;
-import org.eclipse.ocl.pivot.Element;
-import org.eclipse.ocl.pivot.LetExp;
import org.eclipse.ocl.pivot.OCLExpression;
-import org.eclipse.ocl.pivot.Operation;
import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.Type;
import org.eclipse.ocl.pivot.Variable;
-import org.eclipse.ocl.pivot.internal.manager.PivotMetamodelManager;
-import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal;
import org.eclipse.ocl.pivot.utilities.EnvironmentFactory;
-import org.eclipse.ocl.pivot.utilities.NameUtil;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseHelper;
import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtcore.BottomVariable;
import org.eclipse.qvtd.pivot.qvtcore.GuardPattern;
+import org.eclipse.qvtd.pivot.qvtcore.GuardVariable;
import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.OppositePropertyAssignment;
@@ -52,6 +39,23 @@ public class QVTcoreHelper extends QVTbaseHelper
super(environmentFactory);
}
+ public @NonNull BottomVariable createBottomVariable(@NonNull String name, @NonNull Type asType, boolean isRequired, @Nullable OCLExpression asInitExpression) {
+ BottomVariable asVariable = QVTcoreFactory.eINSTANCE.createBottomVariable();
+ asVariable.setName(name);
+ asVariable.setType(asType);
+ asVariable.setIsRequired(isRequired);
+ asVariable.setOwnedInit(asInitExpression);
+ return asVariable;
+ }
+
+ public @NonNull GuardVariable createGuardVariable(@NonNull String name, @NonNull Type asType, boolean isRequired) {
+ GuardVariable asVariable = QVTcoreFactory.eINSTANCE.createGuardVariable();
+ asVariable.setName(name);
+ asVariable.setType(asType);
+ asVariable.setIsRequired(isRequired);
+ return asVariable;
+ }
+
public @NonNull Mapping createMapping(@Nullable String name) {
Mapping coreMapping = QVTcoreFactory.eINSTANCE.createMapping();
coreMapping.setName(name);
@@ -93,94 +97,4 @@ public class QVTcoreHelper extends QVTbaseHelper
asVariableAssignment.setValue(asValueExpression);
return asVariableAssignment;
}
-
- /**
- * Rewrite asTree and all its descendants to replace all "?." and "?->" navigations by their safe counterparts.
- * @deprecated-promote to PivotHelper for M4.
- */
- @Deprecated
- public void rewriteSafeNavigations(@NonNull Element asTree) {
- //
- // Locate all unsafe calls first to avoid CME from concurrent locate/rewrite.
- //
- List<@NonNull CallExp> unsafeCallExps = null;
- if (asTree instanceof CallExp) {
- unsafeCallExps = rewriteUnsafeCallExp_Gather(unsafeCallExps, (CallExp)asTree);
- }
- for (TreeIterator<EObject> tit = asTree.eAllContents(); tit.hasNext(); ) {
- EObject eObject = tit.next();
- if (eObject instanceof CallExp) {
- unsafeCallExps = rewriteUnsafeCallExp_Gather(unsafeCallExps, (CallExp)eObject);
- }
- }
- //
- // Rewrite the unsafe calls
- //
- if (unsafeCallExps != null) {
- PivotMetamodelManager metamodelManager = (PivotMetamodelManager) environmentFactory.getMetamodelManager();
- org.eclipse.ocl.pivot.Class oclAnyType = environmentFactory.getStandardLibrary().getOclAnyType();
- Operation oclEqualsOperation = NameUtil.getNameable(oclAnyType.getOwnedOperations(), "=");
- assert oclEqualsOperation != null;
- org.eclipse.ocl.pivot.Class collectionType = environmentFactory.getStandardLibrary().getCollectionType();
- Operation excludingOperation = NameUtil.getNameable(collectionType.getOwnedOperations(), "excluding");
- assert excludingOperation != null;
- for (CallExp unsafeCallExp : unsafeCallExps) {
- OCLExpression source = unsafeCallExp.getOwnedSource();
- assert source != null;
- if (source.getType() instanceof CollectionType) {
- rewriteUnsafeCollectionCallExp(metamodelManager, excludingOperation, unsafeCallExp);
- }
- else {
- rewriteUnsafeObjectCallExp(metamodelManager, oclEqualsOperation, unsafeCallExp);
- }
- }
- }
- }
-
- private @Nullable List<@NonNull CallExp> rewriteUnsafeCallExp_Gather(@Nullable List<@NonNull CallExp> unsafeCallExps, @NonNull CallExp callExp) {
- OCLExpression source = callExp.getOwnedSource();
- if ((source != null) && callExp.isIsSafe()) {
- if (unsafeCallExps == null) {
- unsafeCallExps = new ArrayList<@NonNull CallExp>();
- }
- unsafeCallExps.add(callExp);
- }
- return unsafeCallExps;
- }
-
- private void rewriteUnsafeCollectionCallExp(@NonNull PivotMetamodelManager metamodelManager, @NonNull Operation excludingOperation, @NonNull CallExp unsafeCollectionCallExp) {
- unsafeCollectionCallExp.setIsSafe(false);
- EObject eContainer = unsafeCollectionCallExp.eContainer();
- EReference eContainmentFeature = unsafeCollectionCallExp.eContainmentFeature();
- PivotUtilInternal.resetContainer(unsafeCollectionCallExp);
- //
- OCLExpression nullExpression = metamodelManager.createNullLiteralExp();
- OCLExpression safeCollectionCallExp = createOperationCallExp(unsafeCollectionCallExp, excludingOperation, Collections.singletonList(nullExpression));
- //
- eContainer.eSet(eContainmentFeature, safeCollectionCallExp);
- }
-
- private void rewriteUnsafeObjectCallExp(@NonNull PivotMetamodelManager metamodelManager, @NonNull Operation oclEqualsOperation, @NonNull CallExp unsafeObjectCallExp) {
- unsafeObjectCallExp.setIsSafe(false);
- EObject eContainer = unsafeObjectCallExp.eContainer();
- EReference eContainmentFeature = unsafeObjectCallExp.eContainmentFeature();
- PivotUtilInternal.resetContainer(unsafeObjectCallExp);
- OCLExpression oldSourceExpression = unsafeObjectCallExp.getOwnedSource();
- assert oldSourceExpression != null;
- //
- Variable unsafeSourceVariable = createVariable("unsafe", oldSourceExpression);
- OCLExpression unsafeSourceExpression1 = createVariableExp(unsafeSourceVariable);
- unsafeObjectCallExp.setOwnedSource(unsafeSourceExpression1);
- //
- OCLExpression unsafeSourceExpression2 = createVariableExp(unsafeSourceVariable);
- OCLExpression nullExpression = metamodelManager.createNullLiteralExp();
- OCLExpression isUnsafeExpression = createOperationCallExp(unsafeSourceExpression2, oclEqualsOperation, Collections.singletonList(nullExpression));
- //
- OCLExpression thenExpression = metamodelManager.createNullLiteralExp();
- OCLExpression safeObjectCallExp = metamodelManager.createIfExp(isUnsafeExpression, thenExpression, unsafeObjectCallExp);
- //
- LetExp safeExp = createLetExp(unsafeSourceVariable, safeObjectCallExp);
- //
- eContainer.eSet(eContainmentFeature, safeExp);
- }
} \ No newline at end of file
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcorePrettyPrintVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcorePrettyPrintVisitor.java
index 9c55c9790..57c232e18 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcorePrettyPrintVisitor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcorePrettyPrintVisitor.java
@@ -21,11 +21,13 @@ import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbasePrettyPrintVisitor;
import org.eclipse.qvtd.pivot.qvtcore.Area;
import org.eclipse.qvtd.pivot.qvtcore.Assignment;
import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtcore.BottomVariable;
import org.eclipse.qvtd.pivot.qvtcore.CoreDomain;
import org.eclipse.qvtd.pivot.qvtcore.CoreModel;
import org.eclipse.qvtd.pivot.qvtcore.CorePattern;
import org.eclipse.qvtd.pivot.qvtcore.EnforcementOperation;
import org.eclipse.qvtd.pivot.qvtcore.GuardPattern;
+import org.eclipse.qvtd.pivot.qvtcore.GuardVariable;
import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.OppositePropertyAssignment;
@@ -80,6 +82,11 @@ public class QVTcorePrettyPrintVisitor extends QVTbasePrettyPrintVisitor impleme
}
@Override
+ public Object visitBottomVariable(@NonNull BottomVariable object) {
+ return visitVariable(object);
+ }
+
+ @Override
public Object visitCoreDomain(@NonNull CoreDomain object) {
// TODO Auto-generated method stub
return null;
@@ -120,6 +127,11 @@ public class QVTcorePrettyPrintVisitor extends QVTbasePrettyPrintVisitor impleme
}
@Override
+ public Object visitGuardVariable(@NonNull GuardVariable object) {
+ return visitVariable(object);
+ }
+
+ @Override
public Object visitMapping(@NonNull Mapping pMapping) {
context.append("map ");
context.appendName(pMapping);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreToStringVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreToStringVisitor.java
index 47c1a2cc4..4fab8fe58 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreToStringVisitor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreToStringVisitor.java
@@ -17,11 +17,13 @@ import org.eclipse.ocl.pivot.utilities.ToStringVisitor;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseToStringVisitor;
import org.eclipse.qvtd.pivot.qvtcore.Assignment;
import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtcore.BottomVariable;
import org.eclipse.qvtd.pivot.qvtcore.CoreDomain;
import org.eclipse.qvtd.pivot.qvtcore.CoreModel;
import org.eclipse.qvtd.pivot.qvtcore.CorePattern;
import org.eclipse.qvtd.pivot.qvtcore.EnforcementOperation;
import org.eclipse.qvtd.pivot.qvtcore.GuardPattern;
+import org.eclipse.qvtd.pivot.qvtcore.GuardVariable;
import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.OppositePropertyAssignment;
@@ -78,6 +80,11 @@ public class QVTcoreToStringVisitor extends QVTbaseToStringVisitor implements QV
}
@Override
+ public String visitBottomVariable(@NonNull BottomVariable object) {
+ return visitVariable(object);
+ }
+
+ @Override
public String visitCoreDomain(@NonNull CoreDomain object) {
appendQualifiedName(object);
return null;
@@ -110,6 +117,11 @@ public class QVTcoreToStringVisitor extends QVTbaseToStringVisitor implements QV
}
@Override
+ public String visitGuardVariable(@NonNull GuardVariable object) {
+ return visitVariable(object);
+ }
+
+ @Override
public String visitMapping(@NonNull Mapping object) {
append("mapping ");
appendName(object);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java
index cebc6a695..868e62942 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java
@@ -39,13 +39,17 @@ import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseEnvironmentFactory;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseEnvironmentFactory.CreateStrategy;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtcore.Area;
+import org.eclipse.qvtd.pivot.qvtcore.Assignment;
+import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
import org.eclipse.qvtd.pivot.qvtcore.CoreDomain;
import org.eclipse.qvtd.pivot.qvtcore.CoreModel;
import org.eclipse.qvtd.pivot.qvtcore.CorePattern;
+import org.eclipse.qvtd.pivot.qvtcore.GuardPattern;
import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.OppositePropertyAssignment;
import org.eclipse.qvtd.pivot.qvtcore.PropertyAssignment;
+import org.eclipse.qvtd.pivot.qvtcore.RealizedVariable;
public class QVTcoreUtil extends QVTbaseUtil
{
@@ -94,6 +98,10 @@ public class QVTcoreUtil extends QVTbaseUtil
return mapping;
}
+ public static @NonNull BottomPattern getBottomPattern(@NonNull Area area) {
+ return ClassUtil.nonNullState(area.getBottomPattern());
+ }
+
public static @Nullable Area getContainingArea(@Nullable EObject eObject) {
for ( ; eObject != null; eObject = eObject.eContainer()) {
if (eObject instanceof Area) {
@@ -125,6 +133,22 @@ public class QVTcoreUtil extends QVTbaseUtil
return (CoreDomain)getDomain((Rule)rule, typedModel);
}
+ public static @NonNull GuardPattern getGuardPattern(@NonNull Area area) {
+ return ClassUtil.nonNullState(area.getGuardPattern());
+ }
+
+ public static @NonNull List<@NonNull Assignment> getOwnedAssignments(@NonNull BottomPattern bottomPattern) {
+ return ClassUtil.nullFree(bottomPattern.getAssignment());
+ }
+
+ public static @NonNull List<@NonNull RealizedVariable> getOwnedRealizedVariables(@NonNull BottomPattern bottomPattern) {
+ return ClassUtil.nullFree(bottomPattern.getRealizedVariable());
+ }
+
+ public static @NonNull List<@NonNull Variable> getOwnedVariables(@NonNull CorePattern corePattern) {
+ return ClassUtil.nullFree(corePattern.getVariable());
+ }
+
public static @NonNull Property getTargetProperty(@NonNull NavigationAssignment asNavigationAssignment) {
if (asNavigationAssignment instanceof PropertyAssignment) {
return ClassUtil.nonNullState(((PropertyAssignment)asNavigationAssignment).getTargetProperty());
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationHelper.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationHelper.java
index 7f8d9f54f..dda5fa42d 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationHelper.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationHelper.java
@@ -11,8 +11,13 @@
package org.eclipse.qvtd.pivot.qvtrelation.utilities;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.pivot.OCLExpression;
+import org.eclipse.ocl.pivot.Type;
import org.eclipse.ocl.pivot.utilities.EnvironmentFactory;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseHelper;
+import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationFactory;
+import org.eclipse.qvtd.pivot.qvtrelation.SharedVariable;
/**
* QVTrelationHelper provides helper routines to assist creation of QVTrelation model elements.
@@ -22,4 +27,13 @@ public class QVTrelationHelper extends QVTbaseHelper
public QVTrelationHelper(@NonNull EnvironmentFactory environmentFactory) {
super(environmentFactory);
}
+
+ public @NonNull SharedVariable createSharedVariable(@NonNull String name, @NonNull Type asType, boolean isRequired, @Nullable OCLExpression asInitExpression) {
+ SharedVariable asVariable = QVTrelationFactory.eINSTANCE.createSharedVariable();
+ asVariable.setName(name);
+ asVariable.setType(asType);
+ asVariable.setIsRequired(isRequired);
+ asVariable.setOwnedInit(asInitExpression);
+ return asVariable;
+ }
} \ No newline at end of file
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationPrettyPrintVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationPrettyPrintVisitor.java
index 88f92e9b5..ca05f557c 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationPrettyPrintVisitor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationPrettyPrintVisitor.java
@@ -24,6 +24,8 @@ import org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment;
import org.eclipse.qvtd.pivot.qvtrelation.RelationImplementation;
import org.eclipse.qvtd.pivot.qvtrelation.RelationModel;
import org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation;
+import org.eclipse.qvtd.pivot.qvtrelation.SharedVariable;
+import org.eclipse.qvtd.pivot.qvtrelation.TemplateVariable;
import org.eclipse.qvtd.pivot.qvtrelation.util.QVTrelationVisitor;
import org.eclipse.qvtd.pivot.qvttemplate.ObjectTemplateExp;
import org.eclipse.qvtd.pivot.qvttemplate.TemplateExp;
@@ -109,10 +111,20 @@ public class QVTrelationPrettyPrintVisitor extends QVTtemplatePrettyPrintVisitor
}
@Override
+ public Object visitSharedVariable(@NonNull SharedVariable object) {
+ return visitVariable(object);
+ }
+
+ @Override
public Object visitTemplateExp(@NonNull TemplateExp object) {
context.appendName(object);
context.append(" : ");
context.appendTypedMultiplicity(object);
return null;
}
+
+ @Override
+ public Object visitTemplateVariable(@NonNull TemplateVariable object) {
+ return visitVariable(object);
+ }
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationToStringVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationToStringVisitor.java
index 8530db7b2..795723d42 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationToStringVisitor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationToStringVisitor.java
@@ -27,6 +27,8 @@ import org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment;
import org.eclipse.qvtd.pivot.qvtrelation.RelationImplementation;
import org.eclipse.qvtd.pivot.qvtrelation.RelationModel;
import org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation;
+import org.eclipse.qvtd.pivot.qvtrelation.SharedVariable;
+import org.eclipse.qvtd.pivot.qvtrelation.TemplateVariable;
import org.eclipse.qvtd.pivot.qvtrelation.util.QVTrelationVisitor;
import org.eclipse.qvtd.pivot.qvttemplate.utilities.QVTtemplateToStringVisitor;
@@ -130,7 +132,7 @@ public class QVTrelationToStringVisitor extends QVTtemplateToStringVisitor imple
}
append("domain ");
appendName(object);
-/* append(" ");
+ /* append(" ");
boolean isFirst = true;
for (DomainPattern pattern : object.getPattern()) {
if (!isFirst) {
@@ -176,4 +178,14 @@ public class QVTrelationToStringVisitor extends QVTtemplateToStringVisitor imple
append(")");
return null;
}
+
+ @Override
+ public String visitSharedVariable(@NonNull SharedVariable object) {
+ return visitVariable(object);
+ }
+
+ @Override
+ public String visitTemplateVariable(@NonNull TemplateVariable object) {
+ return visitVariable(object);
+ }
}
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/as2cs/QVTcoreDeclarationVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/as2cs/QVTcoreDeclarationVisitor.java
index b595ac3b7..27deec27a 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/as2cs/QVTcoreDeclarationVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/as2cs/QVTcoreDeclarationVisitor.java
@@ -62,11 +62,13 @@ import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtcore.Assignment;
import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtcore.BottomVariable;
import org.eclipse.qvtd.pivot.qvtcore.CoreDomain;
import org.eclipse.qvtd.pivot.qvtcore.CoreModel;
import org.eclipse.qvtd.pivot.qvtcore.CorePattern;
import org.eclipse.qvtd.pivot.qvtcore.EnforcementOperation;
import org.eclipse.qvtd.pivot.qvtcore.GuardPattern;
+import org.eclipse.qvtd.pivot.qvtcore.GuardVariable;
import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.OppositePropertyAssignment;
@@ -332,6 +334,11 @@ public class QVTcoreDeclarationVisitor extends QVTbaseDeclarationVisitor impleme
}
@Override
+ public ElementCS visitBottomVariable(@NonNull BottomVariable object) {
+ return visitVariable(object);
+ }
+
+ @Override
public ElementCS visitCoreDomain(@NonNull CoreDomain asCoreDomain) {
DomainCS csDomain = createCoreDomain(asCoreDomain);
csDomain.setPivot(asCoreDomain);
@@ -431,6 +438,11 @@ public class QVTcoreDeclarationVisitor extends QVTbaseDeclarationVisitor impleme
}
@Override
+ public ElementCS visitGuardVariable(@NonNull GuardVariable object) {
+ return visitVariable(object);
+ }
+
+ @Override
public ElementCS visitMapping(@NonNull Mapping asMapping) {
String defaultName = asMapping.getContext() != null ? null : "«null»";
MappingCS csMapping = context.refreshNamedElement(MappingCS.class, QVTcoreCSPackage.Literals.MAPPING_CS, asMapping, defaultName);
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java
index c8244ff56..3f5b45a30 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java
@@ -45,10 +45,12 @@ import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtcore.Assignment;
import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtcore.BottomVariable;
import org.eclipse.qvtd.pivot.qvtcore.CoreDomain;
import org.eclipse.qvtd.pivot.qvtcore.CoreModel;
import org.eclipse.qvtd.pivot.qvtcore.EnforcementOperation;
import org.eclipse.qvtd.pivot.qvtcore.GuardPattern;
+import org.eclipse.qvtd.pivot.qvtcore.GuardVariable;
import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtcore.QVTcoreFactory;
@@ -369,7 +371,12 @@ public class QVTcoreCSContainmentVisitor extends AbstractQVTcoreCSContainmentVis
@Override
public Continuation<?> visitUnrealizedVariableCS(@NonNull UnrealizedVariableCS csElement) {
- refreshNamedElement(Variable.class, PivotPackage.Literals.VARIABLE, csElement);
+ if (csElement.eContainer() instanceof GuardPatternCS) {
+ refreshNamedElement(GuardVariable.class, QVTcorePackage.Literals.GUARD_VARIABLE, csElement);
+ }
+ else {
+ refreshNamedElement(BottomVariable.class, QVTcorePackage.Literals.BOTTOM_VARIABLE, csElement);
+ }
return null;
}
}
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSContainmentVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSContainmentVisitor.java
index d9d48394d..275bfed4c 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSContainmentVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSContainmentVisitor.java
@@ -32,6 +32,7 @@ import org.eclipse.ocl.xtext.base.cs2as.Continuation;
import org.eclipse.ocl.xtext.base.cs2as.SingleContinuation;
import org.eclipse.ocl.xtext.base.utilities.BaseCSResource;
import org.eclipse.ocl.xtext.basecs.PathNameCS;
+import org.eclipse.ocl.xtext.essentialoclcs.VariableCS;
import org.eclipse.qvtd.pivot.qvtbase.Function;
import org.eclipse.qvtd.pivot.qvtbase.FunctionParameter;
import org.eclipse.qvtd.pivot.qvtbase.QVTbasePackage;
@@ -396,4 +397,10 @@ public class QVTimperativeCSContainmentVisitor extends AbstractQVTimperativeCSCo
QVTbaseUtil.getContextVariable(standardLibrary, asTransformation);
return null;
}
+
+ @Override
+ public Continuation<?> visitVariableCS(@NonNull VariableCS csElement) {
+ refreshNamedElement(LoopVariable.class, QVTimperativePackage.Literals.LOOP_VARIABLE, csElement);
+ return null;
+ }
}
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2as/QVTrelationCSContainmentVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2as/QVTrelationCSContainmentVisitor.java
index 000658a6a..a4030d41e 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2as/QVTrelationCSContainmentVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/cs2as/QVTrelationCSContainmentVisitor.java
@@ -23,7 +23,6 @@ import org.eclipse.ocl.pivot.Model;
import org.eclipse.ocl.pivot.Namespace;
import org.eclipse.ocl.pivot.OCLExpression;
import org.eclipse.ocl.pivot.Operation;
-import org.eclipse.ocl.pivot.PivotFactory;
import org.eclipse.ocl.pivot.PivotPackage;
import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.Variable;
@@ -51,12 +50,15 @@ import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtrelation.DomainPattern;
import org.eclipse.qvtd.pivot.qvtrelation.Key;
+import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationFactory;
import org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage;
import org.eclipse.qvtd.pivot.qvtrelation.Relation;
import org.eclipse.qvtd.pivot.qvtrelation.RelationDomain;
import org.eclipse.qvtd.pivot.qvtrelation.RelationDomainAssignment;
import org.eclipse.qvtd.pivot.qvtrelation.RelationModel;
import org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation;
+import org.eclipse.qvtd.pivot.qvtrelation.SharedVariable;
+import org.eclipse.qvtd.pivot.qvtrelation.TemplateVariable;
import org.eclipse.qvtd.pivot.qvtrelation.utilities.QVTrelationUtil;
import org.eclipse.qvtd.pivot.qvttemplate.CollectionTemplateExp;
import org.eclipse.qvtd.pivot.qvttemplate.ObjectTemplateExp;
@@ -117,7 +119,7 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
if (pKey != null) {
pKey.setIdentifies(csElement.getClassId());
PivotUtilInternal.refreshList(pKey.getPart(), csElement.getPropertyIds());
- List<Property> oppositePart = new ArrayList<Property>();
+ List<Property> oppositePart = new ArrayList<>();
for (PathNameCS oppositePropertyId : csElement.getOwnedOppositePropertyIds()) {
Element element = oppositePropertyId.getReferredElement();
if (element instanceof Property) {
@@ -140,7 +142,7 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
public BasicContinuation<?> execute() {
TypedModel pTypedModel = PivotUtil.getPivot(TypedModel.class, csElement);
if (pTypedModel != null) {
- List<org.eclipse.ocl.pivot.Package> newUsedPackage = new ArrayList<org.eclipse.ocl.pivot.Package>();
+ List<org.eclipse.ocl.pivot.Package> newUsedPackage = new ArrayList<>();
for (Namespace metamodelId : csElement.getMetamodelIds()) {
if (metamodelId instanceof Model) {
newUsedPackage.addAll(((Model)metamodelId).getOwnedPackages());
@@ -235,7 +237,7 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
String name = getElementTemplateName((ElementTemplateCS) csMember);
VariableExp asVariableExp = context.refreshModelElement(VariableExp.class, PivotPackage.Literals.VARIABLE_EXP, csMember);
if (name == null) {
- Variable asMemberVariable = PivotFactory.eINSTANCE.createVariable();
+ Variable asMemberVariable = QVTrelationFactory.eINSTANCE.createSharedVariable();
asMemberVariable.setName(QVTrelationUtil.DUMMY_VARIABLE_NAME + specialVariables.size());
asMemberVariable.setIsImplicit(true);
specialVariables.add(asMemberVariable);
@@ -261,7 +263,7 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
}
}
else {
- asRestVariable = context.refreshModelElement(Variable.class, PivotPackage.Literals.VARIABLE, csRestTemplate);
+ asRestVariable = context.refreshModelElement(SharedVariable.class, QVTrelationPackage.Literals.SHARED_VARIABLE, csRestTemplate);
asRestVariable.setIsImplicit(true);
asRestVariable.setTypeValue(null);
asRestVariable.setIsRequired(true);
@@ -278,7 +280,7 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
protected void resolveTemplateVariable(@NonNull TemplateCS csElement, @NonNull TemplateExp pivotElement) {
Variable variable = pivotElement.getBindsTo();
if (variable == null) {
- variable = ClassUtil.nonNullEMF(PivotFactory.eINSTANCE.createVariable());
+ variable = QVTrelationFactory.eINSTANCE.createTemplateVariable();
pivotElement.setBindsTo(variable);
}
context.refreshName(variable, csElement.getName());
@@ -309,10 +311,10 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
context.refreshPivotList(DomainPattern.class, asPatterns, csElement.getOwnedPattern());
context.refreshPivotList(RelationDomainAssignment.class, pivotElement.getDefaultAssignment(), csElement.getOwnedDefaultValues());
if (asPatterns.size() > 0) {
- List<Variable> rootVariables = new ArrayList<Variable>();
+ List<Variable> rootVariables = new ArrayList<>();
for (DomainPattern asPattern : asPatterns) {
if (asPattern != null) {
- // List<@NonNull Variable> boundVariables = new ArrayList<@NonNull Variable>();
+ // List<@NonNull Variable> boundVariables = new ArrayList<>();
TemplateExp asTemplate = asPattern.getTemplateExpression();
if (asTemplate != null) {
rootVariables.add(asTemplate.getBindsTo());
@@ -395,18 +397,18 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
public Continuation<?> visitPrimitiveTypeDomainCS(@NonNull PrimitiveTypeDomainCS csElement) {
@NonNull RelationDomain pivotElement = context.refreshModelElement(RelationDomain.class, QVTrelationPackage.Literals.RELATION_DOMAIN, csElement);
@NonNull DomainPattern asPattern = context.refreshModelElement(DomainPattern.class, QVTrelationPackage.Literals.DOMAIN_PATTERN, null);
- List<DomainPattern> asPatterns = new ArrayList<DomainPattern>();
+ List<DomainPattern> asPatterns = new ArrayList<>();
asPatterns.add(asPattern);
PivotUtilInternal.refreshList(pivotElement.getPattern(), asPatterns);
@NonNull TemplateExp template = context.refreshModelElement(TemplateExp.class, QVTtemplatePackage.Literals.OBJECT_TEMPLATE_EXP, null);
asPattern.setTemplateExpression(template);
- @NonNull Variable rootVariable = context.refreshModelElement(Variable.class, PivotPackage.Literals.VARIABLE, null);
+ @NonNull TemplateVariable rootVariable = context.refreshModelElement(TemplateVariable.class, QVTrelationPackage.Literals.TEMPLATE_VARIABLE, null);
context.refreshName(rootVariable, csElement.getName());
template.setBindsTo(rootVariable);
- List<Variable> rootVariables = new ArrayList<Variable>();
+ List<Variable> rootVariables = new ArrayList<>();
rootVariables.add(rootVariable);
PivotUtilInternal.refreshList(pivotElement.getRootVariable(), rootVariables);
- List<Variable> pivotVariables = new ArrayList<Variable>();
+ List<Variable> pivotVariables = new ArrayList<>();
pivotVariables.add(rootVariable);
PivotUtilInternal.refreshList(asPattern.getBindsTo(), pivotVariables);
return null;
@@ -463,7 +465,7 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
domain.setIsEnforceable(isEnforceable);
}
}
- List<@NonNull Variable> relationVariables = new ArrayList<@NonNull Variable>();
+ List<@NonNull Variable> relationVariables = new ArrayList<>();
//
// Gather explicit local variables.
//
@@ -487,12 +489,12 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
//
// Resolve the special variables.
//
- List<@NonNull Variable> specialVariables = new ArrayList<@NonNull Variable>();
+ List<@NonNull Variable> specialVariables = new ArrayList<>();
for (@NonNull AbstractDomainCS csAbstractDomain : ClassUtil.nullFree(csElement.getOwnedDomains())) {
if (csAbstractDomain instanceof DomainCS) {
for (@NonNull DomainPatternCS csDomainPatternCS : ClassUtil.nullFree(((DomainCS)csAbstractDomain).getOwnedPattern())) {
DomainPattern asPattern = PivotUtil.getPivot(DomainPattern.class, csDomainPatternCS);
- List<@NonNull Variable> boundVariables = new ArrayList<@NonNull Variable>();
+ List<@NonNull Variable> boundVariables = new ArrayList<>();
TemplateCS csTemplate = csDomainPatternCS.getOwnedTemplate();
if (csTemplate != null) {
processSpecialVariables(relationVariables, boundVariables, specialVariables, csTemplate);
@@ -569,7 +571,7 @@ public class QVTrelationCSContainmentVisitor extends AbstractQVTrelationCSContai
@Override
public Continuation<?> visitVarDeclarationIdCS(@NonNull VarDeclarationIdCS csElement) {
@SuppressWarnings("unused")
- Variable pivotElement = refreshNamedElement(Variable.class, PivotPackage.Literals.VARIABLE, csElement);
+ SharedVariable pivotElement = refreshNamedElement(SharedVariable.class, QVTrelationPackage.Literals.SHARED_VARIABLE, csElement);
return null;
}
}
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/scoping/QVTrelationPathElementCSAttribution.java b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/scoping/QVTrelationPathElementCSAttribution.java
index 35baf8bb9..a3fdde940 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/scoping/QVTrelationPathElementCSAttribution.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/scoping/QVTrelationPathElementCSAttribution.java
@@ -21,6 +21,7 @@ import org.eclipse.ocl.pivot.internal.scoping.ScopeView;
import org.eclipse.ocl.pivot.utilities.PivotUtil;
import org.eclipse.ocl.xtext.base.attributes.PathElementCSAttribution;
import org.eclipse.qvtd.pivot.qvtrelation.Relation;
+import org.eclipse.qvtd.pivot.qvtrelation.utilities.QVTrelationHelper;
import org.eclipse.qvtd.pivot.qvtrelation.utilities.QVTrelationUtil;
import org.eclipse.qvtd.xtext.qvtrelationcs.RelationCS;
@@ -36,10 +37,11 @@ public class QVTrelationPathElementCSAttribution extends PathElementCSAttributio
if (eObject instanceof RelationCS) {
Relation relation = PivotUtil.getPivot(Relation.class, (RelationCS)eObject);
if (relation != null) {
+ QVTrelationHelper helper = new QVTrelationHelper(environmentView.getEnvironmentFactory());
List<Variable> variables = relation.getVariable();
AnyType oclAnyType = environmentView.getStandardLibrary().getOclAnyType();
String variableName = QVTrelationUtil.DUMMY_VARIABLE_NAME + variables.size();
- Variable asVariable = PivotUtil.createVariable(variableName, oclAnyType, true, null);
+ Variable asVariable = helper.createSharedVariable(variableName, oclAnyType, true, null);
asVariable.setIsImplicit(true);
variables.add(asVariable);
environmentView.addElement(QVTrelationUtil.DUMMY_VARIABLE_NAME, asVariable);
@@ -49,9 +51,9 @@ public class QVTrelationPathElementCSAttribution extends PathElementCSAttributio
}
return null;
}
-// else if (name == null) {
-// env
-// }
+ // else if (name == null) {
+ // env
+ // }
return super.computeLookup(target, environmentView, scopeView);
}
}

Back to the top