Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-09-09 09:24:16 +0000
committerEd Willink2016-09-19 11:17:45 +0000
commit9f085f66e27da33706c7bccddc90efb8db5c607d (patch)
tree35b8a08289a2357057ed4ec08488a8a154a40cd3
parent8b79971bb034eab985ab20796b348ee8595e72c5 (diff)
downloadorg.eclipse.qvtd-9f085f66e27da33706c7bccddc90efb8db5c607d.tar.gz
org.eclipse.qvtd-9f085f66e27da33706c7bccddc90efb8db5c607d.tar.xz
org.eclipse.qvtd-9f085f66e27da33706c7bccddc90efb8db5c607d.zip
[500369] Support SetStatement
-rw-r--r--plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java161
-rw-r--r--plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java40
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/BasicRegion2Mapping.java14
-rw-r--r--plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/AbstractQVTimperativeStepperVisitor.java18
-rw-r--r--plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/QVTiStepperVisitor.java6
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/AbstractDomainUsageAnalysis.java64
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/RootDomainUsageAnalysis.java14
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/attributes/SetStatementAttribution.java36
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java24
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiAbstractTracingEvaluationVisitor.java19
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitor.java92
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitorDecorator.java18
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiExecutor.java4
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiIncrementalExecutor.java46
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java131
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTuneUpVisitor.java22
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/scoping/QVTimperativePivotScoping.java2
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/AssignmentComparator.java27
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeHelper.java25
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativePrettyPrintVisitor.java43
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeToStringVisitor.java41
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java41
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/icons/SetStatement.gif (renamed from plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/icons/PropertyAssignment.gif)bin146 -> 146 bytes
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/labeling/QVTimperativeLabelProvider.java8
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/outline/QVTimperativeOutlineTreeProvider.java4
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/as2cs/QVTimperativeDeclarationVisitor.java53
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSContainmentVisitor.java11
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPostOrderVisitor.java28
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPreOrderVisitor.java6
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/formatting/QVTimperativeFormatter.java10
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java1
31 files changed, 483 insertions, 526 deletions
diff --git a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java
index fca2e1dd9..17d9b49d9 100644
--- a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java
+++ b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/analyzer/QVTiAS2CGVisitor.java
@@ -105,6 +105,7 @@ import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtimperative.Area;
import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtimperative.BottomStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionVariable;
@@ -117,10 +118,8 @@ import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.OppositePropertyAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.VariablePredicate;
@@ -392,10 +391,7 @@ public class QVTiAS2CGVisitor extends AS2CGVisitor implements QVTimperativeVisit
for (@NonNull BottomPattern pBottomPattern : pBottomPatterns) {
List<@NonNull Assignment> assignment = ClassUtil.nullFree(pBottomPattern.getAssignment());
for (@NonNull Assignment pAssignment : assignment) {
- if (pAssignment instanceof PropertyAssignment) {
- cgPropertyAssignments.add(doVisit(CGPropertyAssignment.class, pAssignment));
- }
- else if (pAssignment instanceof ConnectionAssignment) {
+ if (pAssignment instanceof ConnectionAssignment) {
cgConnectionAssignments.add(doVisit(CGConnectionAssignment.class, pAssignment));
}
else {
@@ -709,6 +705,11 @@ public class QVTiAS2CGVisitor extends AS2CGVisitor implements QVTimperativeVisit
}
@Override
+ public @Nullable CGNamedElement visitBottomStatement(@NonNull BottomStatement object) {
+ return visitStatement(object);
+ }
+
+ @Override
public @Nullable CGNamedElement visitConnectionAssignment(@NonNull ConnectionAssignment asConnectionAssignment) {
Variable asVariable = asConnectionAssignment.getTargetVariable();
if (asVariable == null) {
@@ -913,21 +914,77 @@ public class QVTiAS2CGVisitor extends AS2CGVisitor implements QVTimperativeVisit
}
@Override
- public @Nullable CGNamedElement visitNavigationAssignment(@NonNull NavigationAssignment asNavigationAssignment) {
- Transformation asTransformation = ClassUtil.nonNullModel(QVTbaseUtil.getContainingTransformation(asNavigationAssignment));
+ public @Nullable CGNamedElement visitPattern(@NonNull Pattern object) {
+ return visiting(object);
+ }
+
+ @Override
+ public @Nullable CGIfExp visitPredicate(@NonNull Predicate asPredicate) {
+ CGIfExp cgPredicate = CGModelFactory.eINSTANCE.createCGIfExp();
+ cgPredicate.setTypeId(analyzer.getTypeId(TypeId.BOOLEAN));
+ cgPredicate.setRequired(true);
+ OCLExpression asConditionExpression = asPredicate.getConditionExpression();
+ assert asConditionExpression != null;
+ cgPredicate.setCondition(doVisit(CGValuedElement.class, asConditionExpression));
+ CGConstantExp cgElse = analyzer.createCGConstantExp(asConditionExpression, analyzer.getBoolean(false));
+ setAst(cgElse, asConditionExpression);
+ cgElse.setTypeId(analyzer.getTypeId(TypeId.BOOLEAN));
+ cgElse.setRequired(true);
+ cgPredicate.setElseExpression(cgElse);
+ return cgPredicate;
+ }
+
+ /* @Override
+ public @Nullable CGNamedElement visitMiddlePropertyAssignment(@NonNull MiddlePropertyAssignment asPropertyAssignment) {
+// Property asProperty = ClassUtil.nonNullModel(asPropertyAssignment.getTargetProperty());
+ CGMiddlePropertyAssignment cgPropertyAssignment = QVTiCGModelFactory.eINSTANCE.createCGMiddlePropertyAssignment();
+// setPivot(cgPropertyAssignment, asPredicate);
+ cgPropertyAssignment.setSlotValue(doVisit(CGValuedElement.class, asPropertyAssignment.getSlotExpression()));
+ Property asProperty = asPropertyAssignment.getTargetProperty();
+ cgPropertyAssignment.setReferredProperty(asProperty);
+// cgPredicate.setName(asPredicate.getName());
+ cgPropertyAssignment.setTypeId(analyzer.getTypeId(TypeId.OCL_VOID));
+// cgMappingCallBinding.setValueName(localnameasMappingCallBinding.getBoundVariable().getName());
+ cgPropertyAssignment.setInitValue(doVisit(CGValuedElement.class, asPropertyAssignment.getValue()));
+ EStructuralFeature eStructuralFeature = (EStructuralFeature) asProperty.getESObject();
+ if (eStructuralFeature != null) {
+ try {
+ genModelHelper.getGetAccessor(eStructuralFeature);
+ cgPropertyAssignment.setEStructuralFeature(eStructuralFeature);
+ } catch (GenModelException e) {
+ }
+ }
+ return cgPropertyAssignment;
+ } */
+
+ @Override
+ public @Nullable CGNamedElement visitRealizedVariable(@NonNull RealizedVariable object) {
+ // CGExecutorType cgExecutorType = analyzer.createExecutorType(pTypeExp.getReferredType());
+ // cgTypeExp.setExecutorType(cgExecutorType);
+ return visiting(object);
+ }
+
+ @Override
+ public @Nullable CGNamedElement visitRule(@NonNull Rule object) {
+ return visiting(object);
+ }
+
+ @Override
+ public @Nullable CGNamedElement visitSetStatement(@NonNull SetStatement asSetStatement) {
+ Transformation asTransformation = ClassUtil.nonNullModel(QVTbaseUtil.getContainingTransformation(asSetStatement));
QVTiTransformationAnalysis transformationAnalysis = analyzer.getCodeGenerator().getTransformationAnalysis(asTransformation);
- Integer cacheIndex = transformationAnalysis.getCacheIndex(asNavigationAssignment);
+ Integer cacheIndex = transformationAnalysis.getCacheIndex(asSetStatement);
if (cacheIndex != null) {
// Property asProperty = ClassUtil.nonNullModel(asPropertyAssignment.getTargetProperty());
CGMiddlePropertyAssignment cgPropertyAssignment = QVTiCGModelFactory.eINSTANCE.createCGMiddlePropertyAssignment();
- setAst(cgPropertyAssignment, asNavigationAssignment);
- cgPropertyAssignment.setSlotValue(doVisit(CGValuedElement.class, asNavigationAssignment.getSlotExpression()));
- Property asProperty = QVTimperativeUtil.getTargetProperty(asNavigationAssignment);
+ setAst(cgPropertyAssignment, asSetStatement);
+ cgPropertyAssignment.setSlotValue(doVisit(CGValuedElement.class, asSetStatement.getSlotExpression()));
+ Property asProperty = QVTimperativeUtil.getTargetProperty(asSetStatement);
cgPropertyAssignment.setReferredProperty(asProperty);
// cgPredicate.setName(asPredicate.getName());
cgPropertyAssignment.setTypeId(analyzer.getTypeId(TypeId.OCL_VOID));
// cgMappingCallBinding.setValueName(localnameasMappingCallBinding.getBoundVariable().getName());
- cgPropertyAssignment.setInitValue(doVisit(CGValuedElement.class, asNavigationAssignment.getValue()));
+ cgPropertyAssignment.setInitValue(doVisit(CGValuedElement.class, asSetStatement.getValue()));
EStructuralFeature eStructuralFeature = (EStructuralFeature) asProperty.getESObject();
if (eStructuralFeature != null) {
try {
@@ -940,8 +997,8 @@ public class QVTiAS2CGVisitor extends AS2CGVisitor implements QVTimperativeVisit
return cgPropertyAssignment;
}
else {
- Property asTargetProperty = QVTimperativeUtil.getTargetProperty(asNavigationAssignment);
- LibraryProperty libraryProperty = metamodelManager.getImplementation(asNavigationAssignment, null, asTargetProperty);
+ Property asTargetProperty = QVTimperativeUtil.getTargetProperty(asSetStatement);
+ LibraryProperty libraryProperty = metamodelManager.getImplementation(asSetStatement, null, asTargetProperty);
CGPropertyAssignment cgPropertyAssignment = null;
if (isEcoreProperty(libraryProperty)) {
EStructuralFeature eStructuralFeature = (EStructuralFeature) asTargetProperty.getESObject();
@@ -974,13 +1031,13 @@ public class QVTiAS2CGVisitor extends AS2CGVisitor implements QVTimperativeVisit
if (cgPropertyAssignment == null) {
cgPropertyAssignment = QVTiCGModelFactory.eINSTANCE.createCGPropertyAssignment();
}
- setAst(cgPropertyAssignment, asNavigationAssignment);
- cgPropertyAssignment.setSlotValue(doVisit(CGValuedElement.class, asNavigationAssignment.getSlotExpression()));
+ setAst(cgPropertyAssignment, asSetStatement);
+ cgPropertyAssignment.setSlotValue(doVisit(CGValuedElement.class, asSetStatement.getSlotExpression()));
cgPropertyAssignment.setReferredProperty(asTargetProperty);
// cgPredicate.setName(asPredicate.getName());
cgPropertyAssignment.setTypeId(analyzer.getTypeId(TypeId.OCL_VOID));
// cgMappingCallBinding.setValueName(localnameasMappingCallBinding.getBoundVariable().getName());
- cgPropertyAssignment.setInitValue(doVisit(CGValuedElement.class, asNavigationAssignment.getValue()));
+ cgPropertyAssignment.setInitValue(doVisit(CGValuedElement.class, asSetStatement.getValue()));
CGExecutorProperty cgExecutorProperty = analyzer.createExecutorProperty(asTargetProperty);
cgPropertyAssignment.setExecutorProperty(cgExecutorProperty);
@@ -989,72 +1046,6 @@ public class QVTiAS2CGVisitor extends AS2CGVisitor implements QVTimperativeVisit
}
@Override
- public @Nullable CGNamedElement visitPattern(@NonNull Pattern object) {
- return visiting(object);
- }
-
- @Override
- public @Nullable CGIfExp visitPredicate(@NonNull Predicate asPredicate) {
- CGIfExp cgPredicate = CGModelFactory.eINSTANCE.createCGIfExp();
- cgPredicate.setTypeId(analyzer.getTypeId(TypeId.BOOLEAN));
- cgPredicate.setRequired(true);
- OCLExpression asConditionExpression = asPredicate.getConditionExpression();
- assert asConditionExpression != null;
- cgPredicate.setCondition(doVisit(CGValuedElement.class, asConditionExpression));
- CGConstantExp cgElse = analyzer.createCGConstantExp(asConditionExpression, analyzer.getBoolean(false));
- setAst(cgElse, asConditionExpression);
- cgElse.setTypeId(analyzer.getTypeId(TypeId.BOOLEAN));
- cgElse.setRequired(true);
- cgPredicate.setElseExpression(cgElse);
- return cgPredicate;
- }
-
- /* @Override
- public @Nullable CGNamedElement visitMiddlePropertyAssignment(@NonNull MiddlePropertyAssignment asPropertyAssignment) {
-// Property asProperty = ClassUtil.nonNullModel(asPropertyAssignment.getTargetProperty());
- CGMiddlePropertyAssignment cgPropertyAssignment = QVTiCGModelFactory.eINSTANCE.createCGMiddlePropertyAssignment();
-// setPivot(cgPropertyAssignment, asPredicate);
- cgPropertyAssignment.setSlotValue(doVisit(CGValuedElement.class, asPropertyAssignment.getSlotExpression()));
- Property asProperty = asPropertyAssignment.getTargetProperty();
- cgPropertyAssignment.setReferredProperty(asProperty);
-// cgPredicate.setName(asPredicate.getName());
- cgPropertyAssignment.setTypeId(analyzer.getTypeId(TypeId.OCL_VOID));
-// cgMappingCallBinding.setValueName(localnameasMappingCallBinding.getBoundVariable().getName());
- cgPropertyAssignment.setInitValue(doVisit(CGValuedElement.class, asPropertyAssignment.getValue()));
- EStructuralFeature eStructuralFeature = (EStructuralFeature) asProperty.getESObject();
- if (eStructuralFeature != null) {
- try {
- genModelHelper.getGetAccessor(eStructuralFeature);
- cgPropertyAssignment.setEStructuralFeature(eStructuralFeature);
- } catch (GenModelException e) {
- }
- }
- return cgPropertyAssignment;
- } */
-
- @Override
- public @Nullable CGNamedElement visitOppositePropertyAssignment(@NonNull OppositePropertyAssignment asPropertyAssignment) {
- return visitNavigationAssignment(asPropertyAssignment);
- }
-
- @Override
- public @Nullable CGNamedElement visitPropertyAssignment(@NonNull PropertyAssignment asPropertyAssignment) {
- return visitNavigationAssignment(asPropertyAssignment);
- }
-
- @Override
- public @Nullable CGNamedElement visitRealizedVariable(@NonNull RealizedVariable object) {
- // CGExecutorType cgExecutorType = analyzer.createExecutorType(pTypeExp.getReferredType());
- // cgTypeExp.setExecutorType(cgExecutorType);
- return visiting(object);
- }
-
- @Override
- public @Nullable CGNamedElement visitRule(@NonNull Rule object) {
- return visiting(object);
- }
-
- @Override
public @Nullable CGNamedElement visitStatement(@NonNull Statement object) {
return visiting(object);
}
diff --git a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java
index ded250000..96cf4d679 100644
--- a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java
+++ b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java
@@ -100,15 +100,11 @@ import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtbase.analysis.DomainUsage;
import org.eclipse.qvtd.pivot.qvtimperative.Area;
-import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
-import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionVariable;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationAnalysis;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
import org.eclipse.qvtd.runtime.evaluation.AbstractInvocation;
@@ -188,24 +184,6 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
}
protected void doAddRealization(@NonNull CGRealizedVariable cgRealizedVariable) {
- RealizedVariable pRealizedVariable = (RealizedVariable)cgRealizedVariable.getAst();
- Area pArea = QVTimperativeUtil.getContainingArea(pRealizedVariable);
- if (pArea != null) {
- BottomPattern pBottomPattern = pArea.getBottomPattern();
- if (pBottomPattern != null) {
- for (@NonNull Assignment pAssignment : ClassUtil.nullFree(pBottomPattern.getAssignment())) {
- if (pAssignment instanceof PropertyAssignment) {
- Property pProperty = ((PropertyAssignment)pAssignment).getTargetProperty();
- if (pProperty != null) {
- Property pOppositeProperty = pProperty.getOpposite();
- if ((pOppositeProperty != null) && pOppositeProperty.isIsComposite()) {
- // FIXME must check for null asssignment and correct target return;
- }
- }
- }
- }
- }
- }
CGTypedModel cgTypedModel = cgRealizedVariable.getTypedModel();
//
js.append(QVTiGlobalContext.MODELS_NAME);
@@ -343,10 +321,10 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
CGValuedElement cgInit = getExpression(cgPropertyAssignment.getInitValue());
EPackage ePackage = ClassUtil.nonNullModel(eStructuralFeature.getEContainingClass().getEPackage());
boolean isHazardous = false;
- Element asNavigationAssignment = cgPropertyAssignment.getAst();
- Mapping asMapping = QVTimperativeUtil.getContainingMapping(asNavigationAssignment);
- if ((asMapping != null) && (asNavigationAssignment instanceof NavigationAssignment)) {
- isHazardous = transformationAnalysis.isHazardousWrite(asMapping, (NavigationAssignment)asNavigationAssignment);
+ Element asSetStatement = cgPropertyAssignment.getAst();
+ Mapping asMapping = QVTimperativeUtil.getContainingMapping(asSetStatement);
+ if ((asMapping != null) && (asSetStatement instanceof SetStatement)) {
+ isHazardous = transformationAnalysis.isHazardousWrite(asMapping, (SetStatement)asSetStatement);
}
if (isHazardous || isIncremental) {
js.append("objectManager.assigned(");
@@ -370,10 +348,10 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato
CGValuedElement cgInit = getExpression(cgPropertyAssignment.getInitValue());
EPackage ePackage = ClassUtil.nonNullModel(eStructuralFeature.getEContainingClass().getEPackage());
boolean isHazardous = false;
- Element asNavigationAssignment = cgPropertyAssignment.getAst();
- Mapping asMapping = QVTimperativeUtil.getContainingMapping(asNavigationAssignment);
- if ((asMapping != null) && (asNavigationAssignment instanceof NavigationAssignment)) {
- isHazardous = transformationAnalysis.isHazardousWrite(asMapping, (NavigationAssignment)asNavigationAssignment);
+ Element asSetStatement = cgPropertyAssignment.getAst();
+ Mapping asMapping = QVTimperativeUtil.getContainingMapping(asSetStatement);
+ if ((asMapping != null) && (asSetStatement instanceof SetStatement)) {
+ isHazardous = transformationAnalysis.isHazardousWrite(asMapping, (SetStatement)asSetStatement);
}
if (isHazardous || isIncremental) {
js.append("objectManager.assigned(");
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 6e3a8bd75..492be8464 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
@@ -92,8 +92,8 @@ import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
import org.eclipse.qvtd.pivot.qvtimperative.GuardPattern;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.util.AbstractExtendingQVTimperativeVisitor;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.AssignmentComparator;
@@ -723,7 +723,7 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
return variable;
}
- private void createClassPropertyAssignments(@NonNull Iterable<@NonNull List<@NonNull NavigableEdge>> classAssignments) {
+ private void createClassSetStatements(@NonNull Iterable<@NonNull List<@NonNull NavigableEdge>> classAssignments) {
for (@NonNull List<@NonNull NavigableEdge> edges : classAssignments) {
for (@NonNull NavigableEdge edge : edges) {
Node sourceNode = edge.getSource();
@@ -731,8 +731,8 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
OCLExpression slotVariableExp = createVariableExp(sourceNode);
Property property = edge.getProperty();
OCLExpression targetVariableExp = createVariableExp(targetNode);
- PropertyAssignment propertyAssignment = QVTimperativeUtil.createPropertyAssignment(slotVariableExp, property, targetVariableExp);
- mapping.getBottomPattern().getAssignment().add(propertyAssignment);
+ SetStatement setStatement = QVTimperativeUtil.createSetStatement((Variable) ((VariableExp)slotVariableExp).getReferredVariable(), property, targetVariableExp);
+ mapping.getOwnedStatements().add(setStatement);
}
}
}
@@ -1161,8 +1161,8 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
valueExp = expressionCreator.getExpression(targetNode); // FIXME debugging
}
if (valueExp != null) {
- PropertyAssignment propertyAssignment = QVTimperativeUtil.createPropertyAssignment(slotVariableExp, property, valueExp);
- bottomPattern.getAssignment().add(propertyAssignment);
+ SetStatement propertyAssignment = QVTimperativeUtil.createSetStatement((Variable) ((VariableExp)slotVariableExp).getReferredVariable(), property, valueExp);
+ mapping.getOwnedStatements().add(propertyAssignment);
}
else {
System.err.println("No assignment in " + this + " to " + slotVariableExp + "." + property);
@@ -1183,7 +1183,7 @@ public class BasicRegion2Mapping extends AbstractRegion2Mapping
if (classAssignments != null) {
pruneClassAssignments(classAssignments);
Collection<@NonNull List<@NonNull NavigableEdge>> values = classAssignments.values();
- createClassPropertyAssignments(values);
+ createClassSetStatements(values);
}
@SuppressWarnings("null")
@NonNull EList<@NonNull Assignment> bottomAssignments = bottomPattern.getAssignment();
diff --git a/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/AbstractQVTimperativeStepperVisitor.java b/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/AbstractQVTimperativeStepperVisitor.java
index 9be5aae9b..764a4e2d1 100644
--- a/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/AbstractQVTimperativeStepperVisitor.java
+++ b/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/AbstractQVTimperativeStepperVisitor.java
@@ -106,23 +106,13 @@ implements QVTimperativeVisitor<IStepper>
}
@Override
- public @Nullable IStepper visitNavigationAssignment(org.eclipse.qvtd.pivot.qvtimperative.@NonNull NavigationAssignment object) {
- return visitAssignment(object);
- }
-
- @Override
- public @Nullable IStepper visitOppositePropertyAssignment(org.eclipse.qvtd.pivot.qvtimperative.@NonNull OppositePropertyAssignment object) {
- return visitNavigationAssignment(object);
- }
-
- @Override
- public @Nullable IStepper visitPropertyAssignment(org.eclipse.qvtd.pivot.qvtimperative.@NonNull PropertyAssignment object) {
- return visitNavigationAssignment(object);
+ public @Nullable IStepper visitRealizedVariable(org.eclipse.qvtd.pivot.qvtimperative.@NonNull RealizedVariable object) {
+ return visitVariable(object);
}
@Override
- public @Nullable IStepper visitRealizedVariable(org.eclipse.qvtd.pivot.qvtimperative.@NonNull RealizedVariable object) {
- return visitVariable(object);
+ public @Nullable IStepper visitSetStatement(org.eclipse.qvtd.pivot.qvtimperative.@NonNull SetStatement object) {
+ return visitBottomStatement(object);
}
@Override
diff --git a/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/QVTiStepperVisitor.java b/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/QVTiStepperVisitor.java
index 8e6b08f01..5776d4259 100644
--- a/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/QVTiStepperVisitor.java
+++ b/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/stepper/QVTiStepperVisitor.java
@@ -20,6 +20,7 @@ import org.eclipse.qvtd.pivot.qvtbase.Predicate;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtimperative.BottomStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionVariable;
@@ -51,6 +52,11 @@ public class QVTiStepperVisitor extends AbstractQVTimperativeStepperVisitor
}
@Override
+ public IStepper visitBottomStatement(@NonNull BottomStatement object) {
+ return NonStepper.INSTANCE;
+ }
+
+ @Override
public @Nullable IStepper visitConnectionAssignment(@NonNull ConnectionAssignment object) {
return visitAssignment(object);
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/AbstractDomainUsageAnalysis.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/AbstractDomainUsageAnalysis.java
index 965a38bc5..9df1ebe27 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/AbstractDomainUsageAnalysis.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/AbstractDomainUsageAnalysis.java
@@ -83,10 +83,8 @@ import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
import org.eclipse.qvtd.pivot.qvtimperative.GuardPattern;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.OppositePropertyAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.util.AbstractExtendingQVTimperativeVisitor;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
@@ -108,22 +106,6 @@ public abstract class AbstractDomainUsageAnalysis extends AbstractExtendingQVTim
return element2usage.get(element);
}
- protected @NonNull DomainUsage doNavigationAssignment(@NonNull Property property, @NonNull NavigationAssignment object) {
- DomainUsage slotUsage = visit(object.getSlotExpression());
- DomainUsage valueUsage = visit(object.getValue());
- DomainUsage knownSourceUsage = getRootAnalysis().property2containingClassUsage.get(property);
- if (knownSourceUsage != null) {
- DomainUsage knownTargetUsage = getRootAnalysis().getUsage(property);
- assert knownTargetUsage != null;
- intersection(knownSourceUsage, slotUsage);
- intersection(knownTargetUsage, valueUsage);
- return knownSourceUsage; //intersection(knownTargetUsage, valueUsage);
- }
- else {
- return slotUsage; //intersection(slotUsage, valueUsage);
- }
- }
-
protected @NonNull DomainUsage doNavigationCallExp(@NonNull Property property, @NonNull NavigationCallExp object) {
DomainUsage actualSourceUsage = visit(object.getOwnedSource());
DomainUsage knownPropertyUsage = visit(property);
@@ -144,6 +126,22 @@ public abstract class AbstractDomainUsageAnalysis extends AbstractExtendingQVTim
return usage;
}
+ protected @NonNull DomainUsage doSetStatement(@NonNull Property property, @NonNull SetStatement object) {
+ DomainUsage slotUsage = visit(object.getSlotExpression());
+ DomainUsage valueUsage = visit(object.getValue());
+ DomainUsage knownSourceUsage = getRootAnalysis().property2containingClassUsage.get(property);
+ if (knownSourceUsage != null) {
+ DomainUsage knownTargetUsage = getRootAnalysis().getUsage(property);
+ assert knownTargetUsage != null;
+ intersection(knownSourceUsage, slotUsage);
+ intersection(knownTargetUsage, valueUsage);
+ return knownSourceUsage; //intersection(knownTargetUsage, valueUsage);
+ }
+ else {
+ return slotUsage; //intersection(slotUsage, valueUsage);
+ }
+ }
+
protected @NonNull DomainUsage getAllInstancesUsage(@NonNull OperationCallExp object, @NonNull DomainUsage sourceUsage) {
return sourceUsage;
}
@@ -572,15 +570,6 @@ public abstract class AbstractDomainUsageAnalysis extends AbstractExtendingQVTim
}
@Override
- public @NonNull DomainUsage visitNavigationAssignment(@NonNull NavigationAssignment object) {
- Property property = QVTimperativeUtil.getTargetProperty(object);
- // if ("middleRoot.name := hsvRoot.name".equals(object.toString())) {
- // property = object.getTargetProperty();
- // }
- return doNavigationAssignment(property, object);
- }
-
- @Override
public @NonNull DomainUsage visitNullLiteralExp(@NonNull NullLiteralExp object) {
return getRootAnalysis().createVariableUsage(getRootAnalysis().getAnyMask());
}
@@ -710,11 +699,6 @@ public abstract class AbstractDomainUsageAnalysis extends AbstractExtendingQVTim
}
@Override
- public @NonNull DomainUsage visitOppositePropertyAssignment(@NonNull OppositePropertyAssignment object) {
- return visitNavigationAssignment(object);
- }
-
- @Override
public @NonNull DomainUsage visitOppositePropertyCallExp(@NonNull OppositePropertyCallExp object) {
Property property = ClassUtil.nonNullState(object.getReferredProperty());
Property oppositeProperty = ClassUtil.nonNullState(property.getOpposite());
@@ -753,11 +737,6 @@ public abstract class AbstractDomainUsageAnalysis extends AbstractExtendingQVTim
}
@Override
- public @NonNull DomainUsage visitPropertyAssignment(@NonNull PropertyAssignment object) {
- return visitNavigationAssignment(object);
- }
-
- @Override
public @NonNull DomainUsage visitPropertyCallExp(@NonNull PropertyCallExp object) {
Property property = ClassUtil.nonNullState(object.getReferredProperty());
return doNavigationCallExp(property, object);
@@ -782,6 +761,15 @@ public abstract class AbstractDomainUsageAnalysis extends AbstractExtendingQVTim
}
@Override
+ public @NonNull DomainUsage visitSetStatement(@NonNull SetStatement object) {
+ Property property = QVTimperativeUtil.getTargetProperty(object);
+ // if ("middleRoot.name := hsvRoot.name".equals(object.toString())) {
+ // property = object.getTargetProperty();
+ // }
+ return doSetStatement(property, object);
+ }
+
+ @Override
public @NonNull DomainUsage visitShadowExp(@NonNull ShadowExp object) {
DomainUsage usage = visit(object.getType());
for (@SuppressWarnings("null")@NonNull ShadowPart part : object.getOwnedParts()) {
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/RootDomainUsageAnalysis.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/RootDomainUsageAnalysis.java
index af20aba41..b8506c013 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/RootDomainUsageAnalysis.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/analysis/RootDomainUsageAnalysis.java
@@ -55,7 +55,7 @@ import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtimperative.Area;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.util.QVTimperativeVisitor;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
@@ -372,19 +372,19 @@ public class RootDomainUsageAnalysis extends AbstractDomainUsageAnalysis impleme
return analysis;
}
- protected void analyzePropertyAssignments(@NonNull Transformation transformation) {
+ protected void analyzeSetStatements(@NonNull Transformation transformation) {
for (TreeIterator<EObject> tit = transformation.eAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
- if (eObject instanceof PropertyAssignment) {
- PropertyAssignment propertyAssignment = (PropertyAssignment)eObject;
+ if (eObject instanceof SetStatement) {
+ SetStatement setStatement = (SetStatement)eObject;
// if ("s.name := sn".equals(eObject.toString())) {
// eObject.toString();
// }
- OCLExpression slotExpression = propertyAssignment.getSlotExpression();
+ OCLExpression slotExpression = setStatement.getSlotExpression();
assert slotExpression != null;
DomainUsage domainUsage = getUsage(slotExpression);
if (!domainUsage.isOutput() && !domainUsage.isMiddle()) {
- Property targetProperty = ClassUtil.nonNullState(propertyAssignment.getTargetProperty());
+ Property targetProperty = QVTimperativeUtil.getTargetProperty(setStatement);
// System.out.println("Dirty " + targetProperty + " for " + eObject);
dirtyProperties.add(targetProperty);
EObject eProperty = targetProperty.getESObject();
@@ -493,7 +493,7 @@ public class RootDomainUsageAnalysis extends AbstractDomainUsageAnalysis impleme
setUsage(ownedContext, getAnyUsage());
}
visit(transformation);
- analyzePropertyAssignments(transformation);
+ analyzeSetStatements(transformation);
return element2usage;
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/attributes/SetStatementAttribution.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/attributes/SetStatementAttribution.java
new file mode 100644
index 000000000..93e4dca10
--- /dev/null
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/attributes/SetStatementAttribution.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2013, 2014 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.qvtd.pivot.qvtimperative.attributes;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.PivotPackage;
+import org.eclipse.ocl.pivot.internal.scoping.EmptyAttribution;
+import org.eclipse.ocl.pivot.internal.scoping.EnvironmentView;
+import org.eclipse.ocl.pivot.internal.scoping.ScopeView;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
+
+public class SetStatementAttribution extends EmptyAttribution
+{
+ public static final SetStatementAttribution INSTANCE = new SetStatementAttribution();
+
+ @Override
+ public ScopeView computeLookup(@NonNull EObject target, @NonNull EnvironmentView environmentView, @NonNull ScopeView scopeView) {
+ SetStatement asSetStatement = (SetStatement)target;
+ if (environmentView.getRequiredType() == PivotPackage.Literals.PROPERTY) { // FIXME should be detecting ancestor
+ environmentView.addElementsOfScope(asSetStatement.getSlotExpression().getType(), scopeView);
+ return null;
+ }
+ else {
+ return super.computeLookup(target, environmentView, scopeView);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java
index c0cad2d4a..9ed5e3766 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/BasicQVTiExecutor.java
@@ -63,8 +63,8 @@ import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
@@ -436,17 +436,6 @@ public class BasicQVTiExecutor extends AbstractExecutor implements QVTiExecutor
}
@Override
- public void internalExecuteNavigationAssignment(@NonNull NavigationAssignment navigationAssignment, @NonNull Object slotObject, @Nullable Object ecoreValue, @Nullable Object childKey) {
- Property targetProperty = QVTimperativeUtil.getTargetProperty(navigationAssignment);
- targetProperty.initValue(slotObject, ecoreValue);
- QVTiModelManager modelManager = getModelManager();
- Integer cacheIndex = modelManager.getTransformationAnalysis().getCacheIndex(navigationAssignment);
- if (cacheIndex != null) {
- modelManager.setUnnavigableOpposite(cacheIndex, slotObject, ecoreValue);
- }
- }
-
- @Override
public @Nullable Object internalExecuteOperationCallExp(@NonNull OperationCallExp operationCallExp,
@Nullable Object @NonNull [] boxedSourceAndArgumentValues) {
Operation referredOperation = operationCallExp.getReferredOperation();
@@ -478,6 +467,17 @@ public class BasicQVTiExecutor extends AbstractExecutor implements QVTiExecutor
}
@Override
+ public void internalExecuteSetStatement(@NonNull SetStatement setStatement, @NonNull Object slotObject, @Nullable Object ecoreValue, @Nullable Object childKey) {
+ Property targetProperty = QVTimperativeUtil.getTargetProperty(setStatement);
+ targetProperty.initValue(slotObject, ecoreValue);
+ QVTiModelManager modelManager = getModelManager();
+ Integer cacheIndex = modelManager.getTransformationAnalysis().getCacheIndex(setStatement);
+ if (cacheIndex != null) {
+ modelManager.setUnnavigableOpposite(cacheIndex, slotObject, ecoreValue);
+ }
+ }
+
+ @Override
public @Nullable Object internalExecuteTransformation(@NonNull Transformation transformation, @NonNull EvaluationVisitor undecoratedVisitor) {
Rule rule = NameUtil.getNameable(transformation.getRule(), QVTimperativeUtil.ROOT_MAPPING_NAME);
if (rule == null) {
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiAbstractTracingEvaluationVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiAbstractTracingEvaluationVisitor.java
index 91ab89153..ebaa45d0e 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiAbstractTracingEvaluationVisitor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiAbstractTracingEvaluationVisitor.java
@@ -32,17 +32,18 @@ import org.eclipse.ocl.pivot.values.InvalidValueException;
import org.eclipse.qvtd.pivot.qvtbase.Predicate;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
-import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
import org.eclipse.qvtd.pivot.qvtimperative.GuardPattern;
+import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeModel;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.VariablePredicate;
+import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
/**
* The Class QVTiTracingEvaluationVisitor is a decorator visitor that prints
@@ -296,20 +297,20 @@ public abstract class QVTiAbstractTracingEvaluationVisitor extends QVTiEvaluatio
* @see org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEvaluationVisitorDecorator#visitPropertyAssignment(org.eclipse.qvtd.pivot.qvtcorebase.PropertyAssignment)
*/
@Override
- public @Nullable Object visitPropertyAssignment(@NonNull PropertyAssignment propertyAssignment) {
+ public @Nullable Object visitSetStatement(@NonNull SetStatement setStatement) {
try {
- Object value = safeVisit(propertyAssignment.getValue());
+ Object value = safeVisit(setStatement.getValue());
// Unbox to asign to ecore type
value = delegate.getEnvironmentFactory().getIdResolver().unboxedValueOf(value);
- logger.info(getIndent() + "VisitPropertyAssignment " + propertyAssignment.getSlotExpression()
- + "." + propertyAssignment.getTargetProperty().getName() + " = " + prettyPrint(value));
+ logger.info(getIndent() + "VisitSetStatement " + setStatement.getSlotExpression()
+ + "." + QVTimperativeUtil.getTargetProperty(setStatement).getName() + " = " + prettyPrint(value));
} catch (InvalidValueException ex) {
- logger.info(getIndent() + "VisitPropertyAssignment " + propertyAssignment.getSlotExpression()
- + "." + propertyAssignment.getTargetProperty().getName() + " = InvalidValueException" );
+ logger.info(getIndent() + "VisitSetStatement " + setStatement.getSlotExpression()
+ + "." + QVTimperativeUtil.getTargetProperty(setStatement).getName() + " = InvalidValueException" );
}
//indentLevel++;
- Object result = delegate.visitPropertyAssignment(propertyAssignment);
+ Object result = delegate.visitSetStatement(setStatement);
//indentLevel--;
return result;
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitor.java
index db27dd9aa..5cad01098 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitor.java
@@ -39,6 +39,7 @@ import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtimperative.BottomStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionVariable;
@@ -51,10 +52,8 @@ import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.OppositePropertyAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.VariablePredicate;
@@ -114,6 +113,11 @@ public class QVTiEvaluationVisitor extends BasicEvaluationVisitor implements IQV
}
@Override
+ public @Nullable Object visitBottomStatement(@NonNull BottomStatement object) {
+ return visitStatement(object); // MappingStatement is abstract
+ }
+
+ @Override
public @Nullable Object visitConnectionAssignment(@NonNull ConnectionAssignment connectionAssignment) {
ConnectionVariable targetVariable = connectionAssignment.getTargetVariable() ;
if (targetVariable != null) {
@@ -266,47 +270,6 @@ public class QVTiEvaluationVisitor extends BasicEvaluationVisitor implements IQV
return visitStatement(object); // MappingStatement is abstract
}
- @Override
- public @Nullable Object visitNavigationAssignment(@NonNull NavigationAssignment navigationAssignment) {
- Object slotObject = navigationAssignment.getSlotExpression().accept(undecoratedVisitor);
- if (slotObject instanceof EObject) {
- Integer childKey = null;
- try {
- Object boxedValue = navigationAssignment.getValue().accept(undecoratedVisitor);
- Property targetProperty = QVTimperativeUtil.getTargetProperty(navigationAssignment);
- Class<?> instanceClass = PivotUtil.getEcoreInstanceClass(targetProperty);
- Object ecoreValue = idResolver.ecoreValueOf(instanceClass, boxedValue);
- Property oppositeProperty = targetProperty.getOpposite();
- if (oppositeProperty != null) {
- Type type = oppositeProperty.getType();
- if (type instanceof CollectionType) {
- boolean isOrdered = ((CollectionType)type).isOrdered();
- if (isOrdered) {
-
- }
- }
- }
- executor.internalExecuteNavigationAssignment(navigationAssignment, slotObject, ecoreValue, childKey);
- return null;
- }
- catch (InvocationFailedException e) {
- executor.internalExecuteNavigationAssignment(navigationAssignment, slotObject, e, childKey);
- // throw e;
- }
- // } else if (slotObject == null){
- // throw new InvalidValueException("Null source for '" + navigationAssignment.toString() + "'");
- } else {
- throw new IllegalArgumentException("Unsupported " + navigationAssignment.eClass().getName()
- + " specification. The assignment slot expression '" + navigationAssignment.toString() + "'evaluates to non-ecore value: " + NameUtil.debugFullName(slotObject));
- }
- return true;
- }
-
- @Override
- public @Nullable Object visitOppositePropertyAssignment(@NonNull OppositePropertyAssignment navigationAssignment) {
- return visitNavigationAssignment(navigationAssignment);
- }
-
/* @Override
public Object visitOppositePropertyCallExp(@NonNull OppositePropertyCallExp oppositePropertyCallExp) {
QVTiModelManager modelManager = (QVTiModelManager) context.getModelManager();
@@ -349,11 +312,6 @@ public class QVTiEvaluationVisitor extends BasicEvaluationVisitor implements IQV
}
@Override
- public @Nullable Object visitPropertyAssignment(@NonNull PropertyAssignment navigationAssignment) {
- return visitNavigationAssignment(navigationAssignment);
- }
-
- @Override
public @Nullable Object visitRealizedVariable(@NonNull RealizedVariable realizedVariable) {
return executor.internalExecuteRealizedVariable(realizedVariable, undecoratedVisitor);
}
@@ -364,6 +322,42 @@ public class QVTiEvaluationVisitor extends BasicEvaluationVisitor implements IQV
}
@Override
+ public @Nullable Object visitSetStatement(@NonNull SetStatement setStatement) {
+ Object slotObject = setStatement.getSlotExpression().accept(undecoratedVisitor);
+ if (slotObject instanceof EObject) {
+ Integer childKey = null;
+ try {
+ Object boxedValue = setStatement.getValue().accept(undecoratedVisitor);
+ Property targetProperty = QVTimperativeUtil.getTargetProperty(setStatement);
+ Class<?> instanceClass = PivotUtil.getEcoreInstanceClass(targetProperty);
+ Object ecoreValue = idResolver.ecoreValueOf(instanceClass, boxedValue);
+ Property oppositeProperty = targetProperty.getOpposite();
+ if (oppositeProperty != null) {
+ Type type = oppositeProperty.getType();
+ if (type instanceof CollectionType) {
+ boolean isOrdered = ((CollectionType)type).isOrdered();
+ if (isOrdered) {
+
+ }
+ }
+ }
+ executor.internalExecuteSetStatement(setStatement, slotObject, ecoreValue, childKey);
+ return null;
+ }
+ catch (InvocationFailedException e) {
+ executor.internalExecuteSetStatement(setStatement, slotObject, e, childKey); // FIXME This leads to an AssertionError in PropertyImpl.initValue
+ // throw e;
+ }
+ // } else if (slotObject == null){
+ // throw new InvalidValueException("Null source for '" + navigationAssignment.toString() + "'");
+ } else {
+ throw new IllegalArgumentException("Unsupported " + setStatement.eClass().getName()
+ + " specification. The assignment slot expression '" + setStatement.toString() + "'evaluates to non-ecore value: " + NameUtil.debugFullName(slotObject));
+ }
+ return true;
+ }
+
+ @Override
public @Nullable Object visitStatement(@NonNull Statement object) {
return visitNamedElement(object); // Statement is abstract
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitorDecorator.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitorDecorator.java
index fc52421ed..927d1710f 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitorDecorator.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitorDecorator.java
@@ -30,15 +30,15 @@ import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
-import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
-import org.eclipse.qvtd.pivot.qvtimperative.ImperativePattern;
import org.eclipse.qvtd.pivot.qvtimperative.GuardPattern;
+import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeModel;
+import org.eclipse.qvtd.pivot.qvtimperative.ImperativePattern;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
/**
@@ -294,24 +294,24 @@ implements IQVTiEvaluationVisitor {
* Delegates to my decorated visitor.
*/
@Override
- public @Nullable Object visitPropertyAssignment(@NonNull PropertyAssignment propertyAssignment) {
- return delegate.visitPropertyAssignment(propertyAssignment);
+ public @Nullable Object visitRealizedVariable(@NonNull RealizedVariable realizedVariable) {
+ return delegate.visitRealizedVariable(realizedVariable);
}
/**
* Delegates to my decorated visitor.
*/
@Override
- public @Nullable Object visitRealizedVariable(@NonNull RealizedVariable realizedVariable) {
- return delegate.visitRealizedVariable(realizedVariable);
+ public @Nullable Object visitRule(@NonNull Rule rule) {
+ return delegate.visitRule(rule);
}
/**
* Delegates to my decorated visitor.
*/
@Override
- public @Nullable Object visitRule(@NonNull Rule rule) {
- return delegate.visitRule(rule);
+ public @Nullable Object visitSetStatement(@NonNull SetStatement setStatement) {
+ return delegate.visitSetStatement(setStatement);
}
/**
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiExecutor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiExecutor.java
index a5a7116bf..6a4750095 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiExecutor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiExecutor.java
@@ -20,8 +20,8 @@ import org.eclipse.ocl.pivot.internal.evaluation.ExecutorInternal;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
public interface QVTiExecutor extends ExecutorInternal
{
@@ -34,8 +34,8 @@ public interface QVTiExecutor extends ExecutorInternal
@NonNull QVTiModelManager getModelManager();
@Nullable Object internalExecuteMapping(@NonNull Mapping mapping, @NonNull EvaluationVisitor undecoratedVisitor);
@Nullable Object internalExecuteMappingCall(@NonNull MappingCall mappingCall, @NonNull Object @NonNull [] boundValues, @NonNull EvaluationVisitor undecoratedVisitor);
- void internalExecuteNavigationAssignment(@NonNull NavigationAssignment navigationAssignment, @NonNull Object slotObject, @Nullable Object ecoreValue, @Nullable Object childKey);
@Nullable Object internalExecuteRealizedVariable(@NonNull RealizedVariable realizedVariable, @NonNull EvaluationVisitor undecoratedVisitor);
+ void internalExecuteSetStatement(@NonNull SetStatement setStatement, @NonNull Object slotObject, @Nullable Object ecoreValue, @Nullable Object childKey);
@Nullable Object internalExecuteTransformation(@NonNull Transformation transformation, @NonNull EvaluationVisitor undecoratedVisitor);
void loadModel(@NonNull String inName, @NonNull URI inURI, @Nullable String contentType);
void replace(@NonNull TypedElement referredVariable, @Nullable Object value, boolean checkType);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiIncrementalExecutor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiIncrementalExecutor.java
index 106704501..198dd8856 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiIncrementalExecutor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiIncrementalExecutor.java
@@ -32,8 +32,8 @@ import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.graphs.GraphStringBuilder;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
import org.eclipse.qvtd.runtime.evaluation.AbstractComputation;
import org.eclipse.qvtd.runtime.evaluation.AbstractInvocation;
@@ -266,20 +266,36 @@ public class QVTiIncrementalExecutor extends BasicQVTiExecutor
}
@Override
- public void internalExecuteNavigationAssignment(@NonNull NavigationAssignment navigationAssignment, @NonNull Object sourceObject, @Nullable Object ecoreValue, @Nullable Object childKey) {
- super.internalExecuteNavigationAssignment(navigationAssignment, sourceObject, ecoreValue, childKey);
+ public @Nullable Object internalExecuteRealizedVariable(@NonNull RealizedVariable realizedVariable, @NonNull EvaluationVisitor undecoratedVisitor) {
+ Object element = super.internalExecuteRealizedVariable(realizedVariable, undecoratedVisitor);
+ if ((element != null) && (mode == Mode.INCREMENTAL)) {
+ Invocation.Incremental currentInvocation2 = currentInvocation;
+ assert currentInvocation2 != null;
+ objectManager.created(currentInvocation2, element);
+ /* DomainUsage domainUsage = getEvaluationEnvironment().getUsageFor(realizedVariable);
+ ClassStatus classStatus = statusManager.getClassStatus(domainUsage, realizedVariable.getType(), (EObject)element);
+ MappingStatus mappingStatus = findMappingStatus();
+ assert mappingStatus != null;
+ mappingStatus.getOutputs().add(classStatus); */
+ }
+ return element;
+ }
+
+ @Override
+ public void internalExecuteSetStatement(@NonNull SetStatement setStatement, @NonNull Object sourceObject, @Nullable Object ecoreValue, @Nullable Object childKey) {
+ super.internalExecuteSetStatement(setStatement, sourceObject, ecoreValue, childKey);
if (mode == Mode.LAZY) {
- Mapping asMapping = QVTimperativeUtil.getContainingMapping(navigationAssignment);
+ Mapping asMapping = QVTimperativeUtil.getContainingMapping(setStatement);
assert asMapping != null;
- if (transformationAnalysis.isHazardousWrite(asMapping, navigationAssignment)) {
- Property targetProperty = QVTimperativeUtil.getTargetProperty(navigationAssignment);
+ if (transformationAnalysis.isHazardousWrite(asMapping, setStatement)) {
+ Property targetProperty = QVTimperativeUtil.getTargetProperty(setStatement);
assert targetProperty != null;
EStructuralFeature eFeature = (EStructuralFeature)targetProperty.getESObject();
objectManager.assigned(sourceObject, eFeature, ecoreValue, childKey);
}
}
else {
- Property targetProperty = QVTimperativeUtil.getTargetProperty(navigationAssignment);
+ Property targetProperty = QVTimperativeUtil.getTargetProperty(setStatement);
assert targetProperty != null;
EStructuralFeature eFeature = (EStructuralFeature)targetProperty.getESObject();
Invocation.Incremental currentInvocation2 = currentInvocation;
@@ -287,20 +303,4 @@ public class QVTiIncrementalExecutor extends BasicQVTiExecutor
objectManager.assigned(currentInvocation2, sourceObject, eFeature, ecoreValue, childKey);
}
}
-
- @Override
- public @Nullable Object internalExecuteRealizedVariable(@NonNull RealizedVariable realizedVariable, @NonNull EvaluationVisitor undecoratedVisitor) {
- Object element = super.internalExecuteRealizedVariable(realizedVariable, undecoratedVisitor);
- if ((element != null) && (mode == Mode.INCREMENTAL)) {
- Invocation.Incremental currentInvocation2 = currentInvocation;
- assert currentInvocation2 != null;
- objectManager.created(currentInvocation2, element);
- /* DomainUsage domainUsage = getEvaluationEnvironment().getUsageFor(realizedVariable);
- ClassStatus classStatus = statusManager.getClassStatus(domainUsage, realizedVariable.getType(), (EObject)element);
- MappingStatus mappingStatus = findMappingStatus();
- assert mappingStatus != null;
- mappingStatus.getOutputs().add(classStatus); */
- }
- return element;
- }
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java
index 3aa5326f7..61de06241 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java
@@ -32,6 +32,7 @@ import org.eclipse.ocl.pivot.PrimitiveType;
import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.PropertyCallExp;
import org.eclipse.ocl.pivot.Type;
+import org.eclipse.ocl.pivot.VariableExp;
import org.eclipse.ocl.pivot.ids.IdManager;
import org.eclipse.ocl.pivot.ids.OperationId;
import org.eclipse.ocl.pivot.ids.TypeId;
@@ -50,8 +51,7 @@ import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.analysis.QVTimperativeDomainUsageAnalysis;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
@@ -63,7 +63,7 @@ import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
* Salient characteristics are:
* <br>
* - the source types of allInstances() calls
- * - cache indexes of MiddlePropertyAssignment/MiddlePropertyCallExp
+ * - cache indexes of MiddleSetStatement/MiddlePropertyCallExp
*/
public class QVTiTransformationAnalysis
{
@@ -77,59 +77,59 @@ public class QVTiTransformationAnalysis
/**
* Set of all types for which allInstances() is invoked.
*/
- private final @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class> allInstancesClasses = new HashSet<org.eclipse.ocl.pivot.@NonNull Class>();
+ private final @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class> allInstancesClasses = new HashSet<>();
/**
* Map from navigable property to sequential index in any TypedModel.
*/
- private final @NonNull Map<@NonNull Property, @NonNull Integer> property2cacheIndex = new HashMap<@NonNull Property, @NonNull Integer>();
+ private final @NonNull Map<@NonNull Property, @NonNull Integer> property2cacheIndex = new HashMap<>();
/**
* Map from navigable property to sequential index in a checkable TypedModel.
*/
- private final @NonNull Map<Property, Integer> sourceProperty2cacheIndex = new HashMap<Property, Integer>();
+ private final @NonNull Map<@NonNull Property, @NonNull Integer> sourceProperty2cacheIndex = new HashMap<>();
/**
* Map from propertyAssignment to the cache index of an un-navigable lookup cache to be updated by the assignment.
*/
- private final @NonNull Map<NavigationAssignment, Integer> navigationAssignment2cacheIndex = new HashMap<NavigationAssignment, Integer>();
+ private final @NonNull Map<@NonNull SetStatement, @NonNull Integer> setStatement2cacheIndex = new HashMap<>();
/**
* Map from oppositePropertyCallExp to the cache index identifying the relevant un-navigable lookup cache.
*/
- private final @NonNull Map<OppositePropertyCallExp, Integer> oppositePropertyCallExp2cacheIndex = new HashMap<OppositePropertyCallExp, Integer>();
+ private final @NonNull Map<@NonNull OppositePropertyCallExp, @NonNull Integer> oppositePropertyCallExp2cacheIndex = new HashMap<>();
/**
* Map from operation to the properties that it may access.
*/
- private final @NonNull Map<Operation, Set<NavigationCallExp>> operation2property = new HashMap<Operation, Set<NavigationCallExp>>();
+ private final @NonNull Map<@NonNull Operation, @NonNull Set<@NonNull NavigationCallExp>> operation2property = new HashMap<>();
/**
* Map from mapping to the properties that it may access.
*/
- private final @NonNull Map<Mapping, Set<NavigationCallExp>> mapping2property = new HashMap<Mapping, Set<NavigationCallExp>>();
+ private final @NonNull Map<@NonNull Mapping, @NonNull Set<@NonNull NavigationCallExp>> mapping2property = new HashMap<>();
/**
* Map from mapping to the properties that it may assign.
*/
- private final @NonNull Map<Mapping, Set<PropertyAssignment>> mapping2propertyAssignments = new HashMap<Mapping, Set<PropertyAssignment>>();
+ private final @NonNull Map<@NonNull Mapping, @NonNull Set<@NonNull SetStatement>> mapping2propertyAssignments = new HashMap<>();
/**
* Mappings that have an isPolled input.
*/
- private final @NonNull Set<Mapping> hazardousMappings = new HashSet<Mapping>();
+ private final @NonNull Set<@NonNull Mapping> hazardousMappings = new HashSet<>();
- private final @NonNull Set<Property> hazardousProperties = new HashSet<Property>();
+ private final @NonNull Set<@NonNull Property> hazardousProperties = new HashSet<>();
/**
- * The PropertyAssignments to each Property.
+ * The SetStatements to each Property.
*/
- private final @NonNull Map<Property, Set<PropertyAssignment>> property2propertyAssignments = new HashMap<Property, Set<PropertyAssignment>>();
+ private final @NonNull Map<@NonNull Property, @NonNull Set<@NonNull SetStatement>> property2propertyAssignments = new HashMap<>();
/**
* Map of all oclContainer() accesses.
*/
- private final @NonNull Map<Type, List<Type>> parentClass2childClasses = new HashMap<Type, List<Type>>();
+ private final @NonNull Map<@NonNull Type, @NonNull List<@NonNull Type>> parentClass2childClasses = new HashMap<>();
public QVTiTransformationAnalysis(@NonNull EnvironmentFactoryInternal environmentFactory) {
this.environmentFactory = environmentFactory;
@@ -164,61 +164,65 @@ public class QVTiTransformationAnalysis
return cacheIndex;
}
- private @NonNull Set<NavigationCallExp> analyzeMappingPropertyAccesses(@NonNull Mapping mapping) {
- Set<NavigationCallExp> accessedProperties = mapping2property.get(mapping);
+ private @NonNull Set<@NonNull NavigationCallExp> analyzeMappingPropertyAccesses(@NonNull Mapping mapping) {
+ Set<@NonNull NavigationCallExp> accessedProperties = mapping2property.get(mapping);
if (accessedProperties != null) {
return accessedProperties;
}
- accessedProperties = new HashSet<NavigationCallExp>();
+ accessedProperties = new HashSet<>();
mapping2property.put(mapping, accessedProperties);
analyzeTree(accessedProperties, mapping.eAllContents());
return accessedProperties;
}
- private @NonNull Set<PropertyAssignment> analyzeMappingPropertyAssignments(@NonNull Mapping mapping) {
- Set<PropertyAssignment> assignedProperties = mapping2propertyAssignments.get(mapping);
+ private @NonNull Set<@NonNull SetStatement> analyzeMappingSetStatements(@NonNull Mapping mapping) {
+ Set<@NonNull SetStatement> assignedProperties = mapping2propertyAssignments.get(mapping);
if (assignedProperties == null) {
- assignedProperties = new HashSet<PropertyAssignment>();
+ assignedProperties = new HashSet<>();
mapping2propertyAssignments.put(mapping, assignedProperties);
}
for (TreeIterator<EObject> treeIterator = mapping.eAllContents(); treeIterator.hasNext(); ) {
EObject eObject = treeIterator.next();
- if (eObject instanceof PropertyAssignment) {
- assignedProperties.add((PropertyAssignment) eObject);
+ if (eObject instanceof SetStatement) {
+ assignedProperties.add((SetStatement) eObject);
}
}
return assignedProperties;
}
- private @NonNull Set<NavigationCallExp> analyzeOperation(@NonNull Operation operation) {
- Set<NavigationCallExp> operationProperties = operation2property.get(operation);
+ private @NonNull Set<@NonNull NavigationCallExp> analyzeOperation(@NonNull Operation operation) {
+ Set<@NonNull NavigationCallExp> operationProperties = operation2property.get(operation);
if (operationProperties != null) {
return operationProperties;
}
- operationProperties = new HashSet<NavigationCallExp>();
+ operationProperties = new HashSet<>();
operation2property.put(operation, operationProperties);
analyzeTree(operationProperties, operation.eAllContents());
return operationProperties;
}
private void analyzeProperties() {
- Set<Mapping> hazardousMappings = getHazardousMappings();
- for (Map.Entry<Mapping, Set<NavigationCallExp>> entry : getMapping2Property().entrySet()) {
+ Set<@NonNull Mapping> hazardousMappings = getHazardousMappings();
+ for (Map.Entry<@NonNull Mapping, @NonNull Set<@NonNull NavigationCallExp>> entry : getMapping2Property().entrySet()) {
Mapping mapping = entry.getKey();
if (hazardousMappings.contains(mapping)) {
- for (@SuppressWarnings("null")@NonNull NavigationCallExp hazardousPropertyCallExp : entry.getValue()) {
+ for (@NonNull NavigationCallExp hazardousPropertyCallExp : entry.getValue()) {
Property hazardousProperty = PivotUtil.getReferredProperty(hazardousPropertyCallExp);
hazardousProperties.add(hazardousProperty);
- hazardousProperties.add(hazardousProperty.getOpposite());
+ Property oppositeProperty = hazardousProperty.getOpposite();
+ if (oppositeProperty != null) {
+ hazardousProperties.add(oppositeProperty);
+ }
}
}
}
- for (Set<PropertyAssignment> propertyAssignments : mapping2propertyAssignments.values()) {
- for (PropertyAssignment propertyAssignment : propertyAssignments) {
+ for (@NonNull Set<@NonNull SetStatement> propertyAssignments : mapping2propertyAssignments.values()) {
+ for (@NonNull SetStatement propertyAssignment : propertyAssignments) {
Property property = propertyAssignment.getTargetProperty();
- Set<PropertyAssignment> assignments = property2propertyAssignments.get(property);
+ assert property != null;
+ Set<@NonNull SetStatement> assignments = property2propertyAssignments.get(property);
if (assignments == null) {
- assignments = new HashSet<PropertyAssignment>();
+ assignments = new HashSet<>();
property2propertyAssignments.put(property, assignments);
}
assignments.add(propertyAssignment);
@@ -242,10 +246,12 @@ public class QVTiTransformationAnalysis
LibraryFeature implementation = referredProperty.getImplementation();
if (implementation instanceof OclElementOclContainerProperty) {
Type childType = asPropertyCallExp.getOwnedSource().getType();
+ assert childType != null;
Type parentType = asPropertyCallExp.getType();
- List<Type> childClasses = parentClass2childClasses .get(parentType);
+ assert parentType != null;
+ List<@NonNull Type> childClasses = parentClass2childClasses .get(parentType);
if (childClasses == null) {
- childClasses = new ArrayList<Type>();
+ childClasses = new ArrayList<>();
parentClass2childClasses.put(parentType, childClasses);
}
if (!childClasses.contains(childType)) {
@@ -276,7 +282,7 @@ public class QVTiTransformationAnalysis
//
// First pass
// - identify all allInstances() source types
- // - identify all PropertyAssignments
+ // - identify all SetStatements
// - identify all assigned PropertyCallExp and allocate a cacheIndex
//
Type oclElementType = environmentFactory.getStandardLibrary().getOclElementType();
@@ -284,13 +290,13 @@ public class QVTiTransformationAnalysis
OperationId allInstancesOperationId = oclElementType.getTypeId().getOperationId(0, "allInstances", IdManager.getParametersId());
OperationId objectsOfKindOperationId = modelType.getTypeId().getOperationId(1, "objectsOfKind", IdManager.getParametersId(TypeId.T_1));
OperationId objectsOfTypeOperationId = modelType.getTypeId().getOperationId(1, "objectsOfType", IdManager.getParametersId(TypeId.T_1));
- List<PropertyAssignment> propertyAssignments = new ArrayList<PropertyAssignment>();
+ List<@NonNull SetStatement> propertyAssignments = new ArrayList<>();
for (TreeIterator<EObject> tit = transformation.eAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
if (eObject instanceof Mapping) {
Mapping mapping = (Mapping)eObject;
analyzeMappingPropertyAccesses(mapping);
- analyzeMappingPropertyAssignments(mapping);
+ analyzeMappingSetStatements(mapping);
if (mapping.getCheckedProperties().size() > 0) {
hazardousMappings.add(mapping);
}
@@ -310,6 +316,7 @@ public class QVTiTransformationAnalysis
MappingCallBinding mappingCallBinding = (MappingCallBinding)eObject;
if (mappingCallBinding.isIsPolled()) {
Mapping mapping = mappingCallBinding.getMappingCall().getReferredMapping();
+ assert mapping != null;
hazardousMappings.add(mapping);
}
}
@@ -321,8 +328,8 @@ public class QVTiTransformationAnalysis
oppositePropertyCallExp2cacheIndex.put(oppositePropertyCallExp, cacheIndex);
}
}
- else if (eObject instanceof PropertyAssignment) {
- propertyAssignments.add((PropertyAssignment)eObject);
+ else if (eObject instanceof SetStatement) {
+ propertyAssignments.add((SetStatement)eObject);
}
else if (eObject instanceof OperationCallExp) {
OperationCallExp operationCallExp = (OperationCallExp)eObject;
@@ -353,14 +360,14 @@ public class QVTiTransformationAnalysis
}
//
// Second pass
- // - install cacheIndex allocated to MiddlePropertyCallExp in each MiddlePropertyAssignment
+ // - install cacheIndex allocated to MiddlePropertyCallExp in each MiddleSetStatement
//
- for (PropertyAssignment propertyAssignment : propertyAssignments) {
+ for (@NonNull SetStatement propertyAssignment : propertyAssignments) {
Property navigableProperty = propertyAssignment.getTargetProperty();
if (navigableProperty != null) {
Integer cacheIndex = property2cacheIndex.get(navigableProperty);
if (cacheIndex != null) { // No need to set cacheIndex if it is never accessed by an OppositePropertyCallExp
- navigationAssignment2cacheIndex.put(propertyAssignment, cacheIndex);
+ setStatement2cacheIndex.put(propertyAssignment, cacheIndex);
}
}
}
@@ -376,8 +383,8 @@ public class QVTiTransformationAnalysis
return oppositePropertyCallExp2cacheIndex.get(oppositePropertyCallExp);
}
- public @Nullable Integer getCacheIndex(@NonNull NavigationAssignment navigationAssignment) {
- return navigationAssignment2cacheIndex.get(navigationAssignment);
+ public @Nullable Integer getCacheIndex(@NonNull SetStatement setStatement) {
+ return setStatement2cacheIndex.get(setStatement);
}
public int getCacheIndexes() {
@@ -392,7 +399,7 @@ public class QVTiTransformationAnalysis
return domainAnalysis;
}
- public @NonNull Set<Mapping> getHazardousMappings() {
+ public @NonNull Set<@NonNull Mapping> getHazardousMappings() {
return hazardousMappings;
}
@@ -400,14 +407,14 @@ public class QVTiTransformationAnalysis
* Return a Map from each instanceClasses to the subset of instanceClasses that are transitive superClasses of the particular instanceClass.
*/
public @NonNull Map<org.eclipse.ocl.pivot.@NonNull Class, @Nullable List<org.eclipse.ocl.pivot.@NonNull Class>> getInstancesClassAnalysis(@NonNull Iterable<org.eclipse.ocl.pivot.@NonNull Class> instanceClasses) {
- Map<org.eclipse.ocl.pivot.@NonNull Class, @Nullable List<org.eclipse.ocl.pivot.@NonNull Class>> instancesClassAnalysis = new HashMap<org.eclipse.ocl.pivot.@NonNull Class, @Nullable List<org.eclipse.ocl.pivot.@NonNull Class>>();
+ Map<org.eclipse.ocl.pivot.@NonNull Class, @Nullable List<org.eclipse.ocl.pivot.@NonNull Class>> instancesClassAnalysis = new HashMap<>();
MetamodelManagerInternal metamodelManager = environmentFactory.getMetamodelManager();
for (org.eclipse.ocl.pivot.@NonNull Class instanceClass : instanceClasses) {
CompleteClass completeInstanceClass = metamodelManager.getCompleteClass(instanceClass);
instancesClassAnalysis.put(completeInstanceClass.getPrimaryClass(), null);
}
for (org.eclipse.ocl.pivot.@NonNull Class instanceClass : instancesClassAnalysis.keySet()) {
- List<org.eclipse.ocl.pivot.Class> superInstanceClasses = new ArrayList<org.eclipse.ocl.pivot.Class>();
+ List<org.eclipse.ocl.pivot.Class> superInstanceClasses = new ArrayList<>();
superInstanceClasses.add(instanceClass);
CompleteClass completeClass = metamodelManager.getCompleteClass(instanceClass);
for (@NonNull CompleteClass superCompleteClass : completeClass.getProperSuperCompleteClasses()) {
@@ -421,11 +428,11 @@ public class QVTiTransformationAnalysis
return instancesClassAnalysis;
}
- public @NonNull Map<Mapping, Set<NavigationCallExp>> getMapping2Property() {
+ public @NonNull Map<@NonNull Mapping, @NonNull Set<@NonNull NavigationCallExp>> getMapping2Property() {
return mapping2property;
}
- public @NonNull Map<Mapping, Set<PropertyAssignment>> getMapping2PropertyAssignments() {
+ public @NonNull Map<Mapping, @NonNull Set<@NonNull SetStatement>> getMapping2SetStatements() {
return mapping2propertyAssignments;
}
@@ -450,7 +457,7 @@ public class QVTiTransformationAnalysis
return opposite2cacheIndex;
} */
- public @NonNull Map<Property, Integer> getSourceCaches() {
+ public @NonNull Map<@NonNull Property, @NonNull Integer> getSourceCaches() {
return sourceProperty2cacheIndex;
}
@@ -465,11 +472,11 @@ public class QVTiTransformationAnalysis
public boolean hasHazardousWrite(@NonNull MappingCall mappingCall) {
Mapping mapping = mappingCall.getReferredMapping();
- Set<PropertyAssignment> propertyAssignments = mapping2propertyAssignments.get(mapping);
+ Set<@NonNull SetStatement> propertyAssignments = mapping2propertyAssignments.get(mapping);
if (propertyAssignments == null) {
return false;
}
- for (PropertyAssignment propertyAssignment : propertyAssignments) {
+ for (@NonNull SetStatement propertyAssignment : propertyAssignments) {
Property assignedProperty = propertyAssignment.getTargetProperty();
if (hazardousProperties.contains(assignedProperty)) {
return true;
@@ -482,11 +489,11 @@ public class QVTiTransformationAnalysis
}
public boolean isAssigned(@NonNull Property targetProperty, @NonNull DomainUsage domainUsage) {
- Set<PropertyAssignment> propertyAssignments = property2propertyAssignments.get(targetProperty);
+ Set<@NonNull SetStatement> propertyAssignments = property2propertyAssignments.get(targetProperty);
if (propertyAssignments == null) {
return false;
}
- for (PropertyAssignment propertyAssignment : propertyAssignments) {
+ for (@NonNull SetStatement propertyAssignment : propertyAssignments) {
OCLExpression slotExpression = propertyAssignment.getSlotExpression();
DomainUsage slotUsage = domainAnalysis.basicGetUsage(slotExpression);
if (domainUsage == slotUsage) {
@@ -507,11 +514,11 @@ public class QVTiTransformationAnalysis
Type parentType = targetProperty.getOwningClass();
Type childType = targetProperty.getType();
assert childType != null;
- for (Map.Entry<Type, List<Type>> entry : parentClass2childClasses.entrySet()) {
+ for (Map.Entry<@NonNull Type, @NonNull List<@NonNull Type>> entry : parentClass2childClasses.entrySet()) {
Type entryType = entry.getKey();
assert entryType != null;
if (parentType.conformsTo(standardLibrary, entryType)) {
- for (Type type : entry.getValue()) {
+ for (@NonNull Type type : entry.getValue()) {
if (type.conformsTo(standardLibrary, childType)) {
return true;
}
@@ -552,9 +559,9 @@ public class QVTiTransformationAnalysis
return false;
}
- public boolean isHazardousWrite(@NonNull Mapping asMapping, @NonNull NavigationAssignment asNavigationAssignment) {
- Property asProperty = QVTimperativeUtil.getTargetProperty(asNavigationAssignment);
- OCLExpression asSource = asNavigationAssignment.getSlotExpression();
+ public boolean isHazardousWrite(@NonNull Mapping asMapping, @NonNull SetStatement asSetStatement) {
+ Property asProperty = QVTimperativeUtil.getTargetProperty(asSetStatement);
+ VariableExp asSource = asSetStatement.getSlotExpression();
DomainUsage domainUsage = getDomainUsageAnalysis().basicGetUsage(asSource);
if (domainUsage != null) {
TypedModel typedModel = domainUsage.getTypedModel(asSource);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTuneUpVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTuneUpVisitor.java
index 6ca1cc67b..4d4a67055 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTuneUpVisitor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTuneUpVisitor.java
@@ -47,7 +47,6 @@ import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativeFactory;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
@@ -108,22 +107,6 @@ public class QVTiTuneUpVisitor extends AbstractExtendingQVTimperativeVisitor<Boo
else if (assignment instanceof VariableAssignment) {
variableAssignments.add(assignment);
}
- else if (assignment instanceof PropertyAssignment) {
- PropertyAssignment propertyAssignment = (PropertyAssignment)assignment;
- OCLExpression slot = propertyAssignment.getSlotExpression();
- if ((slot != null) && (slot.accept(this) != Boolean.TRUE)) {
- propertyAssignment.setSlotExpression(null); // Avoid a child stealing detection
- VariableExp variableExp = rewritePropertyAssignmentTerm(object, variableAssignments, slot);
- propertyAssignment.setSlotExpression(variableExp);
- }
- OCLExpression value = propertyAssignment.getValue();
- if ((value != null) && (value.accept(this) != Boolean.TRUE)) {
- propertyAssignment.setValue(null); // Avoid a child stealing detection
- VariableExp variableExp = rewritePropertyAssignmentTerm(object, variableAssignments, value);
- propertyAssignment.setValue(variableExp);
- }
- propertyAssignments.add(propertyAssignment);
- }
else {
assignment.accept(this);
}
@@ -273,6 +256,11 @@ public class QVTiTuneUpVisitor extends AbstractExtendingQVTimperativeVisitor<Boo
}
@Override
+ public Boolean visitStatement(@NonNull Statement object) {
+ return Boolean.TRUE;
+ }
+
+ @Override
public @Nullable Boolean visitTransformation(@NonNull Transformation object) {
for (Rule rule : object.getRule()) {
rule.accept(this);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/scoping/QVTimperativePivotScoping.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/scoping/QVTimperativePivotScoping.java
index 06d8d21c9..99353a9fa 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/scoping/QVTimperativePivotScoping.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/scoping/QVTimperativePivotScoping.java
@@ -19,6 +19,7 @@ import org.eclipse.qvtd.pivot.qvtimperative.attributes.CoreDomainAttribution;
import org.eclipse.qvtd.pivot.qvtimperative.attributes.MappingAttribution;
import org.eclipse.qvtd.pivot.qvtimperative.attributes.MappingCallBindingAttribution;
import org.eclipse.qvtd.pivot.qvtimperative.attributes.MappingLoopAttribution;
+import org.eclipse.qvtd.pivot.qvtimperative.attributes.SetStatementAttribution;
import org.eclipse.qvtd.pivot.qvtimperative.attributes.QVTimperativeBottomPatternAttribution;
import org.eclipse.qvtd.pivot.qvtimperative.attributes.QVTimperativeGuardPatternAttribution;
@@ -32,5 +33,6 @@ public class QVTimperativePivotScoping
registry.put(QVTimperativePackage.Literals.MAPPING, MappingAttribution.INSTANCE);
registry.put(QVTimperativePackage.Literals.MAPPING_CALL_BINDING, MappingCallBindingAttribution.INSTANCE);
registry.put(QVTimperativePackage.Literals.MAPPING_LOOP, MappingLoopAttribution.INSTANCE);
+ registry.put(QVTimperativePackage.Literals.SET_STATEMENT, SetStatementAttribution.INSTANCE);
}
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/AssignmentComparator.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/AssignmentComparator.java
index a14d33486..5f777de17 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/AssignmentComparator.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/AssignmentComparator.java
@@ -21,14 +21,12 @@ import java.util.Set;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.Variable;
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.TreeIterable;
import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
/**
@@ -45,29 +43,8 @@ public class AssignmentComparator implements Comparator<@NonNull Assignment>
@Override
public int compare(@NonNull Assignment o1, @NonNull Assignment o2) {
- if (o1 instanceof PropertyAssignment) {
- if (o2 instanceof PropertyAssignment) {
- Property p1 = ((PropertyAssignment)o1).getTargetProperty();
- Property p2 = ((PropertyAssignment)o2).getTargetProperty();
- String n1 = p1.getName();
- String n2 = p2.getName();
- int diff = ClassUtil.safeCompareTo(n1, n2);
- if (diff != 0) {
- return diff;
- }
- n1 = p1.toString();
- n2 = p2.toString();
- return ClassUtil.safeCompareTo(n1, n2);
- }
- else {
- return 1;
- }
- }
- else if (o1 instanceof VariableAssignment) {
- if (o2 instanceof PropertyAssignment) {
- return -1;
- }
- else if (o2 instanceof VariableAssignment) {
+ if (o1 instanceof VariableAssignment) {
+ if (o2 instanceof VariableAssignment) {
Map<@NonNull Variable, @NonNull Set<@NonNull Variable>> variable2referencedVariables2 = variable2referencedVariables;
if (variable2referencedVariables2 == null) {
variable2referencedVariables2 = variable2referencedVariables = computeReferencedVariableClosure();
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeHelper.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeHelper.java
index 22e28964e..ca5041ea0 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeHelper.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeHelper.java
@@ -20,11 +20,9 @@ import org.eclipse.ocl.pivot.utilities.EnvironmentFactory;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseHelper;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionVariable;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.OppositePropertyAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativeFactory;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
/**
@@ -52,23 +50,6 @@ public class QVTimperativeHelper extends QVTbaseHelper
return asVariable;
}
- public @NonNull NavigationAssignment createNavigationAssignment(@NonNull OCLExpression asSlotExpression, @NonNull Property asProperty, @NonNull OCLExpression asValueExpression) {
- NavigationAssignment asNavigationAssignment;
- if (asProperty.isIsImplicit()) {
- OppositePropertyAssignment asPropertyAssignment = QVTimperativeFactory.eINSTANCE.createOppositePropertyAssignment();
- asPropertyAssignment.setTargetProperty(asProperty.getOpposite());
- asNavigationAssignment = asPropertyAssignment;
- }
- else {
- PropertyAssignment asPropertyAssignment = QVTimperativeFactory.eINSTANCE.createPropertyAssignment();
- asPropertyAssignment.setTargetProperty(asProperty);
- asNavigationAssignment = asPropertyAssignment;
- }
- asNavigationAssignment.setSlotExpression(asSlotExpression);
- asNavigationAssignment.setValue(asValueExpression);
- return asNavigationAssignment;
- }
-
public @NonNull RealizedVariable createRealizedVariable(@NonNull String name, @NonNull Type type) {
RealizedVariable realizedVariable = QVTimperativeFactory.eINSTANCE.createRealizedVariable();
realizedVariable.setName(name);
@@ -77,6 +58,10 @@ public class QVTimperativeHelper extends QVTbaseHelper
return realizedVariable;
}
+ public @NonNull SetStatement createSetStatement(@NonNull Variable asVariable, @NonNull Property asProperty, @NonNull OCLExpression asValueExpression) {
+ return QVTimperativeUtil.createSetStatement(asVariable, asProperty, asValueExpression);
+ }
+
public @NonNull VariableAssignment createVariableAssignment(@NonNull Variable asVariable, @NonNull OCLExpression asValueExpression) {
VariableAssignment asVariableAssignment = QVTimperativeFactory.eINSTANCE.createVariableAssignment();
asVariableAssignment.setTargetVariable(asVariable);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativePrettyPrintVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativePrettyPrintVisitor.java
index e9baec9b8..75ede3489 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativePrettyPrintVisitor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativePrettyPrintVisitor.java
@@ -22,6 +22,7 @@ import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbasePrettyPrintVisitor;
import org.eclipse.qvtd.pivot.qvtimperative.Area;
import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtimperative.BottomStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionVariable;
@@ -34,10 +35,8 @@ import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.OppositePropertyAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.VariablePredicate;
@@ -89,6 +88,11 @@ public class QVTimperativePrettyPrintVisitor extends QVTbasePrettyPrintVisitor i
}
@Override
+ public Object visitBottomStatement(@NonNull BottomStatement object) {
+ return visitStatement(object);
+ }
+
+ @Override
public Object visitConnectionAssignment(@NonNull ConnectionAssignment asConnectionAssignment) {
context.appendName(asConnectionAssignment.getTargetVariable());
context.append(" += ");
@@ -215,33 +219,12 @@ public class QVTimperativePrettyPrintVisitor extends QVTbasePrettyPrintVisitor i
}
@Override
- public Object visitNavigationAssignment(@NonNull NavigationAssignment asNavigationAssignment) {
- safeVisit(asNavigationAssignment.getSlotExpression());
- context.append(".");
- context.appendName(QVTimperativeUtil.getTargetProperty(asNavigationAssignment));
- context.append(" := ");
- safeVisit(asNavigationAssignment.getValue());
- context.append(";\n");
- return null;
- }
-
- @Override
- public Object visitOppositePropertyAssignment(@NonNull OppositePropertyAssignment asNavigationAssignment) {
- return visitNavigationAssignment(asNavigationAssignment);
- }
-
- @Override
public Object visitPredicate(@NonNull Predicate pPredicate) {
safeVisit(pPredicate.getConditionExpression());
return null;
}
@Override
- public Object visitPropertyAssignment(@NonNull PropertyAssignment asNavigationAssignment) {
- return visitNavigationAssignment(asNavigationAssignment);
- }
-
- @Override
public Object visitRealizedVariable(@NonNull RealizedVariable pRealizedVariable) {
context.append("realize ");
visitVariable(pRealizedVariable);
@@ -249,6 +232,18 @@ public class QVTimperativePrettyPrintVisitor extends QVTbasePrettyPrintVisitor i
}
@Override
+ public Object visitSetStatement(@NonNull SetStatement asSetStatement) {
+ context.append("set ");
+ safeVisit(asSetStatement.getSlotExpression());
+ context.append(".");
+ context.appendName(QVTimperativeUtil.getTargetProperty(asSetStatement));
+ context.append(" := ");
+ safeVisit(asSetStatement.getValue());
+ context.append(";\n");
+ return null;
+ }
+
+ @Override
public Object visitStatement(@NonNull Statement object) {
return visiting(object);
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeToStringVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeToStringVisitor.java
index 9f5313401..a9e7abd71 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeToStringVisitor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeToStringVisitor.java
@@ -19,6 +19,7 @@ import org.eclipse.ocl.pivot.utilities.ToStringVisitor;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseToStringVisitor;
import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtimperative.BottomStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionVariable;
@@ -31,11 +32,9 @@ import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.OppositePropertyAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativePackage;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.VariablePredicate;
@@ -88,6 +87,11 @@ public class QVTimperativeToStringVisitor extends QVTbaseToStringVisitor impleme
}
@Override
+ public String visitBottomStatement(@NonNull BottomStatement object) {
+ return visitStatement(object);
+ }
+
+ @Override
public @Nullable String visitConnectionAssignment(@NonNull ConnectionAssignment connectionAssignment) {
appendName(connectionAssignment.getTargetVariable());
append(" += ");
@@ -182,33 +186,24 @@ public class QVTimperativeToStringVisitor extends QVTbaseToStringVisitor impleme
@Override
public @Nullable String visitMappingStatement(@NonNull MappingStatement object) {
- return null;
+ return visitStatement(object);
}
@Override
- public String visitNavigationAssignment(@NonNull NavigationAssignment asNavigationAssignment) {
- safeVisit(asNavigationAssignment.getSlotExpression());
- append(".");
- appendName(QVTimperativeUtil.getTargetProperty(asNavigationAssignment));
- append(" := ");
- safeVisit(asNavigationAssignment.getValue());
+ public String visitRealizedVariable(@NonNull RealizedVariable variable) {
+ // append("realized ");
+ visitVariable(variable);
return null;
}
@Override
- public String visitOppositePropertyAssignment(@NonNull OppositePropertyAssignment asNavigationAssignment) {
- return visitNavigationAssignment(asNavigationAssignment);
- }
-
- @Override
- public String visitPropertyAssignment(@NonNull PropertyAssignment asNavigationAssignment) {
- return visitNavigationAssignment(asNavigationAssignment);
- }
-
- @Override
- public String visitRealizedVariable(@NonNull RealizedVariable variable) {
- // append("realized ");
- visitVariable(variable);
+ public String visitSetStatement(@NonNull SetStatement asSetStatement) {
+ append("set ");
+ safeVisit(asSetStatement.getSlotExpression());
+ append(".");
+ appendName(QVTimperativeUtil.getTargetProperty(asSetStatement));
+ append(" := ");
+ safeVisit(asSetStatement.getValue());
return null;
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java
index 3fea951d7..e0b11f954 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeUtil.java
@@ -49,18 +49,16 @@ import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseEnvironmentFactory.Create
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtimperative.Area;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
-import org.eclipse.qvtd.pivot.qvtimperative.ImperativePattern;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeModel;
+import org.eclipse.qvtd.pivot.qvtimperative.ImperativePattern;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.OppositePropertyAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativeFactory;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.VariablePredicate;
import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
@@ -205,14 +203,6 @@ public class QVTimperativeUtil extends QVTbaseUtil
return property;
}
- public static @NonNull PropertyAssignment createPropertyAssignment(@NonNull OCLExpression slotExpression, @NonNull Property targetProperty, @NonNull OCLExpression value) {
- PropertyAssignment propertyAssignment = QVTimperativeFactory.eINSTANCE.createPropertyAssignment();
- propertyAssignment.setSlotExpression(slotExpression);
- propertyAssignment.setTargetProperty(targetProperty);
- propertyAssignment.setValue(value);
- return propertyAssignment;
- }
-
/* public static @NonNull PropertyCallExp createPropertyCallExp(@NonNull OCLExpression source, @NonNull Property property) {
PropertyCallExp propertyCallExp = PivotFactory.eINSTANCE.createPropertyCallExp();
propertyCallExp.setOwnedSource(source);
@@ -229,6 +219,21 @@ public class QVTimperativeUtil extends QVTbaseUtil
return realizedVariable;
}
+ public static @NonNull SetStatement createSetStatement(@NonNull Variable asVariable, @NonNull Property asProperty, @NonNull OCLExpression asValueExpression) {
+ SetStatement asSetAssignment = QVTimperativeFactory.eINSTANCE.createSetStatement();
+ if (asProperty.isIsImplicit()) {
+ asSetAssignment.setTargetProperty(asProperty.getOpposite());
+ asSetAssignment.setIsOpposite(true);
+ }
+ else {
+ asSetAssignment.setTargetProperty(asProperty);
+ asSetAssignment.setIsOpposite(false);
+ }
+ asSetAssignment.setSlotExpression(createVariableExp(asVariable));
+ asSetAssignment.setValue(asValueExpression);
+ return asSetAssignment;
+ }
+
public static @NonNull Transformation createTransformation(@NonNull String name) {
Transformation transformation = QVTbaseFactory.eINSTANCE.createTransformation();
transformation.setName(name);
@@ -295,15 +300,9 @@ public class QVTimperativeUtil extends QVTbaseUtil
return (ImperativeDomain)getDomain((Rule)rule, typedModel);
}
- public static @NonNull Property getTargetProperty(@NonNull NavigationAssignment asNavigationAssignment) {
- if (asNavigationAssignment instanceof PropertyAssignment) {
- return ClassUtil.nonNullState(((PropertyAssignment)asNavigationAssignment).getTargetProperty());
- }
- else if (asNavigationAssignment instanceof OppositePropertyAssignment) {
- Property referredProperty = ClassUtil.nonNullState(((OppositePropertyAssignment)asNavigationAssignment).getTargetProperty());
- return ClassUtil.nonNullState(referredProperty.getOpposite());
- }
- throw new UnsupportedOperationException("Unsupported " + asNavigationAssignment.eClass().getName());
+ public static @NonNull Property getTargetProperty(@NonNull SetStatement asSetStatement) {
+ Property referredProperty = ClassUtil.nonNullState(asSetStatement.getTargetProperty());
+ return asSetStatement.isIsOpposite() ? ClassUtil.nonNullState(referredProperty.getOpposite()) : referredProperty;
}
public static @Nullable TypedModel getTypedModel(@Nullable Area area) {
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/icons/PropertyAssignment.gif b/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/icons/SetStatement.gif
index 085b712fb..085b712fb 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/icons/PropertyAssignment.gif
+++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/icons/SetStatement.gif
Binary files differ
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/labeling/QVTimperativeLabelProvider.java b/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/labeling/QVTimperativeLabelProvider.java
index 906763cd7..c359486af 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/labeling/QVTimperativeLabelProvider.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/labeling/QVTimperativeLabelProvider.java
@@ -28,8 +28,8 @@ import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.xtext.qvtbase.ui.labeling.QVTbaseLabelProvider;
import org.eclipse.qvtd.xtext.qvtimperativecs.DomainCS;
@@ -91,8 +91,8 @@ public class QVTimperativeLabelProvider extends QVTbaseLabelProvider
return "MappingCallBinding.gif";
}
- protected String image(PropertyAssignment ele) {
- return QVTIMPERATIVE_UI_ICONS + "PropertyAssignment.gif";
+ protected String image(SetStatement ele) {
+ return QVTIMPERATIVE_UI_ICONS + "SetStatement.gif";
}
protected String image(RealizedVariable ele) {
@@ -147,7 +147,7 @@ public class QVTimperativeLabelProvider extends QVTbaseLabelProvider
return "«predicate»";
}
- protected String text(PropertyAssignment ele) {
+ protected String text(SetStatement ele) {
assert ele != null;
Namespace namespace = PivotUtil.getNamespace(ele.eContainer());
if (namespace == null) {
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/outline/QVTimperativeOutlineTreeProvider.java b/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/outline/QVTimperativeOutlineTreeProvider.java
index 8ae0a14e9..d4a71f168 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/outline/QVTimperativeOutlineTreeProvider.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative.ui/src/org/eclipse/qvtd/xtext/qvtimperative/ui/outline/QVTimperativeOutlineTreeProvider.java
@@ -20,7 +20,7 @@ import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
import org.eclipse.qvtd.pivot.qvtimperative.GuardPattern;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.xtext.qvtbase.ui.outline.QVTbaseOutlineTreeProvider;
import org.eclipse.qvtd.xtext.qvtimperativecs.DirectionCS;
@@ -77,7 +77,7 @@ public class QVTimperativeOutlineTreeProvider extends QVTbaseOutlineTreeProvider
}
}
- protected void _createChildren(IOutlineNode parentNode, PropertyAssignment ele) {
+ protected void _createChildren(IOutlineNode parentNode, SetStatement ele) {
createNode(parentNode, ele.getValue());
}
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/as2cs/QVTimperativeDeclarationVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/as2cs/QVTimperativeDeclarationVisitor.java
index 96b2d7e44..94317c5ea 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/as2cs/QVTimperativeDeclarationVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/as2cs/QVTimperativeDeclarationVisitor.java
@@ -58,7 +58,6 @@ import org.eclipse.ocl.xtext.basecs.RootPackageCS;
import org.eclipse.ocl.xtext.basecs.TypedRefCS;
import org.eclipse.ocl.xtext.essentialoclcs.EssentialOCLCSPackage;
import org.eclipse.ocl.xtext.essentialoclcs.ExpCS;
-import org.eclipse.ocl.xtext.essentialoclcs.NameExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.VariableCS;
import org.eclipse.qvtd.pivot.qvtbase.BaseModel;
import org.eclipse.qvtd.pivot.qvtbase.Domain;
@@ -73,22 +72,21 @@ import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtimperative.Area;
import org.eclipse.qvtd.pivot.qvtimperative.Assignment;
import org.eclipse.qvtd.pivot.qvtimperative.BottomPattern;
+import org.eclipse.qvtd.pivot.qvtimperative.BottomStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionStatement;
import org.eclipse.qvtd.pivot.qvtimperative.ConnectionVariable;
-import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
-import org.eclipse.qvtd.pivot.qvtimperative.ImperativePattern;
import org.eclipse.qvtd.pivot.qvtimperative.GuardPattern;
+import org.eclipse.qvtd.pivot.qvtimperative.ImperativeDomain;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeModel;
+import org.eclipse.qvtd.pivot.qvtimperative.ImperativePattern;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.NavigationAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.OppositePropertyAssignment;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.VariablePredicate;
@@ -114,6 +112,7 @@ import org.eclipse.qvtd.xtext.qvtimperativecs.PredicateOrAssignmentCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.QVTimperativeCSPackage;
import org.eclipse.qvtd.xtext.qvtimperativecs.QueryCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.RealizedVariableCS;
+import org.eclipse.qvtd.xtext.qvtimperativecs.SetStatementCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.StatementCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.TopLevelCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.TransformationCS;
@@ -396,6 +395,11 @@ public class QVTimperativeDeclarationVisitor extends QVTbaseDeclarationVisitor i
}
@Override
+ public ElementCS visitBottomStatement(@NonNull BottomStatement object) {
+ return visitStatement(object);
+ }
+
+ @Override
public ElementCS visitConnectionAssignment(@NonNull ConnectionAssignment asConnectionAssignment) {
PredicateOrAssignmentCS csAssignment = context.refreshElement(PredicateOrAssignmentCS.class, QVTimperativeCSPackage.Literals.PREDICATE_OR_ASSIGNMENT_CS, asConnectionAssignment);
csAssignment.setPivot(asConnectionAssignment);
@@ -590,22 +594,6 @@ public class QVTimperativeDeclarationVisitor extends QVTbaseDeclarationVisitor i
}
@Override
- public ElementCS visitNavigationAssignment(@NonNull NavigationAssignment asNavigationAssignment) {
- PredicateOrAssignmentCS csAssignment = context.refreshElement(PredicateOrAssignmentCS.class, QVTimperativeCSPackage.Literals.PREDICATE_OR_ASSIGNMENT_CS, asNavigationAssignment);
- ExpCS csSlotExp = createExpCS(asNavigationAssignment.getSlotExpression());
- NameExpCS csPropName = createNameExpCS(QVTimperativeUtil.getTargetProperty(asNavigationAssignment));
- csAssignment.setOwnedTarget(createInfixExpCS(csSlotExp, ".", csPropName));
- csAssignment.setOwnedInitExpression(createExpCS(asNavigationAssignment.getValue()));
- csAssignment.setIsDefault(asNavigationAssignment.isIsDefault());
- return csAssignment;
- }
-
- @Override
- public ElementCS visitOppositePropertyAssignment(@NonNull OppositePropertyAssignment asNavigationAssignment) {
- return visitNavigationAssignment(asNavigationAssignment);
- }
-
- @Override
public ElementCS visitPackage(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
// List<org.eclipse.ocl.pivot.@NonNull Class> asClasses = ClassUtil.nullFree(asPackage.getOwnedClasses());
// List<org.eclipse.ocl.pivot.@NonNull Package> asPackages = ClassUtil.nullFree(asPackage.getOwnedPackages());
@@ -660,18 +648,6 @@ public class QVTimperativeDeclarationVisitor extends QVTbaseDeclarationVisitor i
}
@Override
- public ElementCS visitPropertyAssignment(@NonNull PropertyAssignment asPropertyAssignment) {
- PredicateOrAssignmentCS csAssignment = context.refreshElement(PredicateOrAssignmentCS.class, QVTimperativeCSPackage.Literals.PREDICATE_OR_ASSIGNMENT_CS, asPropertyAssignment);
- csAssignment.setPivot(asPropertyAssignment);
- ExpCS csSlotExp = createExpCS(asPropertyAssignment.getSlotExpression());
- NameExpCS csPropName = createNameExpCS(asPropertyAssignment.getTargetProperty());
- csAssignment.setOwnedTarget(createInfixExpCS(csSlotExp, ".", csPropName));
- csAssignment.setOwnedInitExpression(createExpCS(asPropertyAssignment.getValue()));
- csAssignment.setIsDefault(asPropertyAssignment.isIsDefault());
- return csAssignment;
- }
-
- @Override
public ElementCS visitRealizedVariable(@NonNull RealizedVariable asRealizedVariable) {
RealizedVariableCS csRealizedVariable = context.refreshNamedElement(RealizedVariableCS.class, QVTimperativeCSPackage.Literals.REALIZED_VARIABLE_CS, asRealizedVariable);
csRealizedVariable.setPivot(asRealizedVariable);
@@ -686,6 +662,15 @@ public class QVTimperativeDeclarationVisitor extends QVTbaseDeclarationVisitor i
}
@Override
+ public ElementCS visitSetStatement(@NonNull SetStatement asSetStatement) {
+ SetStatementCS csStatement = context.refreshElement(SetStatementCS.class, QVTimperativeCSPackage.Literals.SET_STATEMENT_CS, asSetStatement);
+ csStatement.setReferredVariable((Variable) asSetStatement.getSlotExpression().getReferredVariable());
+ csStatement.setReferredProperty(QVTimperativeUtil.getTargetProperty(asSetStatement));
+ csStatement.setOwnedInitExpression(createExpCS(asSetStatement.getValue()));
+ return csStatement;
+ }
+
+ @Override
public ElementCS visitStatement(@NonNull Statement object) {
return visiting(object);
}
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 e5f2f52ee..0604e4e29 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
@@ -58,10 +58,10 @@ import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
import org.eclipse.qvtd.pivot.qvtimperative.MappingStatement;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativeFactory;
import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativePackage;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.Statement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.xtext.qvtimperativecs.BottomPatternCS;
@@ -77,6 +77,7 @@ import org.eclipse.qvtd.xtext.qvtimperativecs.ParamDeclarationCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.PatternCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.PredicateCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.PredicateOrAssignmentCS;
+import org.eclipse.qvtd.xtext.qvtimperativecs.SetStatementCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.QueryCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.RealizedVariableCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.TopLevelCS;
@@ -356,7 +357,7 @@ public class QVTimperativeCSContainmentVisitor extends AbstractQVTimperativeCSCo
}
}
else {
- context.refreshModelElement(PropertyAssignment.class, QVTimperativePackage.Literals.PROPERTY_ASSIGNMENT, csElement);
+ throw new IllegalStateException();
}
return null;
}
@@ -381,6 +382,12 @@ public class QVTimperativeCSContainmentVisitor extends AbstractQVTimperativeCSCo
}
@Override
+ public @Nullable Continuation<?> visitSetStatementCS(@NonNull SetStatementCS csElement) {
+ context.refreshModelElement(SetStatement.class, QVTimperativePackage.Literals.SET_STATEMENT, csElement);
+ return null;
+ }
+
+ @Override
public Continuation<?> visitTopLevelCS(@NonNull TopLevelCS csElement) {
importPackages(csElement);
@NonNull ImperativeModel asModel = refreshRoot(ImperativeModel.class, QVTimperativePackage.Literals.IMPERATIVE_MODEL, csElement);
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPostOrderVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPostOrderVisitor.java
index 0b77eafbd..38b164cbb 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPostOrderVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPostOrderVisitor.java
@@ -18,6 +18,7 @@ import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.CollectionType;
import org.eclipse.ocl.pivot.NavigationCallExp;
import org.eclipse.ocl.pivot.OCLExpression;
+import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.Type;
import org.eclipse.ocl.pivot.Variable;
import org.eclipse.ocl.pivot.VariableExp;
@@ -41,9 +42,9 @@ import org.eclipse.qvtd.pivot.qvtimperative.GuardPattern;
import org.eclipse.qvtd.pivot.qvtimperative.Mapping;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding;
import org.eclipse.qvtd.pivot.qvtimperative.MappingLoop;
-import org.eclipse.qvtd.pivot.qvtimperative.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativeFactory;
import org.eclipse.qvtd.pivot.qvtimperative.RealizedVariable;
+import org.eclipse.qvtd.pivot.qvtimperative.SetStatement;
import org.eclipse.qvtd.pivot.qvtimperative.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtimperative.VariablePredicate;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
@@ -60,6 +61,7 @@ import org.eclipse.qvtd.xtext.qvtimperativecs.ParamDeclarationCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.PatternCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.PredicateCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.PredicateOrAssignmentCS;
+import org.eclipse.qvtd.xtext.qvtimperativecs.SetStatementCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.QueryCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.RealizeableVariableCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.RealizedVariableCS;
@@ -94,7 +96,7 @@ public class QVTimperativeCSPostOrderVisitor extends AbstractQVTimperativeCSPost
super(context);
}
- protected @Nullable Assignment refreshPropertyAssignment(@NonNull NavigationCallExp propertyCallExp, @NonNull PredicateOrAssignmentCS csConstraint) {
+ /* protected @Nullable Statement refreshPropertyAssignment(@NonNull NavigationCallExp propertyCallExp, @NonNull PredicateOrAssignmentCS csConstraint) {
@Nullable PropertyAssignment propertyAssignment;
// Property referredProperty = propertyCallExp.getReferredProperty();
// Property oppositeProperty = referredProperty.getOpposite();
@@ -110,7 +112,7 @@ public class QVTimperativeCSPostOrderVisitor extends AbstractQVTimperativeCSPost
// propertyAssignment.setIsOpposite(target instanceof FeatureCallExp); // FIXME isOpposite
}
return propertyAssignment;
- }
+ } */
protected @Nullable Assignment refreshVariableAssignment(@NonNull VariableExp variableExp, @NonNull PredicateOrAssignmentCS csConstraint) {
Assignment assignment = PivotUtil.getPivot(Assignment.class, csConstraint);
@@ -146,7 +148,8 @@ public class QVTimperativeCSPostOrderVisitor extends AbstractQVTimperativeCSPost
if (csInitialiser != null) {
Assignment assignment = null;
if (target instanceof NavigationCallExp) {
- assignment = refreshPropertyAssignment((NavigationCallExp)target, csConstraint);
+ throw new IllegalStateException();
+ // assignment = refreshPropertyAssignment((NavigationCallExp)target, csConstraint);
}
else if (target instanceof VariableExp) {
assignment = refreshVariableAssignment((VariableExp)target, csConstraint);
@@ -351,6 +354,23 @@ public class QVTimperativeCSPostOrderVisitor extends AbstractQVTimperativeCSPost
}
@Override
+ public Continuation<?> visitSetStatementCS(@NonNull SetStatementCS csElement) {
+ SetStatement setStatement = PivotUtil.getPivot(SetStatement.class, csElement);
+ if (setStatement != null) {
+ Variable targetVariable = csElement.getReferredVariable();
+ setStatement.setSlotExpression(PivotUtil.createVariableExp(targetVariable));
+ Property targetProperty = csElement.getReferredProperty();
+ ExpCS csInitialiser = csElement.getOwnedInitExpression();
+ OCLExpression target = csInitialiser != null ? context.visitLeft2Right(OCLExpression.class, csInitialiser) : null;
+ setStatement.setTargetProperty(targetProperty);
+ // propertyAssignment.setIsOpposite(target instanceof FeatureCallExp); // FIXME isOpposite
+ setStatement.setValue(target);
+ // pAssignments.add(assignment);
+ }
+ return null;
+ }
+
+ @Override
public Continuation<?> visitTopLevelCS(@NonNull TopLevelCS object) {
return null;
}
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPreOrderVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPreOrderVisitor.java
index e2e54890e..afecec058 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPreOrderVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPreOrderVisitor.java
@@ -52,6 +52,7 @@ import org.eclipse.qvtd.xtext.qvtimperativecs.MappingLoopCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.ParamDeclarationCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.PredicateCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.PredicateOrAssignmentCS;
+import org.eclipse.qvtd.xtext.qvtimperativecs.SetStatementCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.QueryCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.RealizeableVariableCS;
import org.eclipse.qvtd.xtext.qvtimperativecs.TopLevelCS;
@@ -291,6 +292,11 @@ public class QVTimperativeCSPreOrderVisitor extends AbstractQVTimperativeCSPreOr
}
@Override
+ public Continuation<?> visitSetStatementCS(@NonNull SetStatementCS csElement) {
+ return null;
+ }
+
+ @Override
public Continuation<?> visitTopLevelCS(@NonNull TopLevelCS csElement) {
return null;
}
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/formatting/QVTimperativeFormatter.java b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/formatting/QVTimperativeFormatter.java
index a3a76420c..f4e4ecdc6 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/formatting/QVTimperativeFormatter.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/formatting/QVTimperativeFormatter.java
@@ -29,6 +29,7 @@ import org.eclipse.qvtd.xtext.qvtimperative.services.QVTimperativeGrammarAccess.
import org.eclipse.qvtd.xtext.qvtimperative.services.QVTimperativeGrammarAccess.QueryCSElements;
import org.eclipse.qvtd.xtext.qvtimperative.services.QVTimperativeGrammarAccess.RealizedVariableCSElements;
import org.eclipse.qvtd.xtext.qvtimperative.services.QVTimperativeGrammarAccess.ScopeNameCSElements;
+import org.eclipse.qvtd.xtext.qvtimperative.services.QVTimperativeGrammarAccess.SetStatementCSElements;
import org.eclipse.qvtd.xtext.qvtimperative.services.QVTimperativeGrammarAccess.SourceBottomPatternCSElements;
import org.eclipse.qvtd.xtext.qvtimperative.services.QVTimperativeGrammarAccess.SourceDomainCSElements;
import org.eclipse.qvtd.xtext.qvtimperative.services.QVTimperativeGrammarAccess.SourceGuardPatternCSElements;
@@ -222,8 +223,8 @@ public class QVTimperativeFormatter extends AbstractEssentialOCLFormatter
MappingCSElements a = f.getMappingCSAccess();
c.setLinewrap(2).before(a.getMapKeyword_2());
c.setNoSpace().before(a.getSemicolonKeyword_6_2());
- c.setNoSpace().between(a.getLeftCurlyBracketKeyword_7(), a.getRightCurlyBracketKeyword_11());
- setBraces(c, a.getLeftCurlyBracketKeyword_7(), a.getRightCurlyBracketKeyword_11());
+ c.setNoSpace().between(a.getLeftCurlyBracketKeyword_7(), a.getRightCurlyBracketKeyword_12());
+ setBraces(c, a.getLeftCurlyBracketKeyword_7(), a.getRightCurlyBracketKeyword_12());
// c.setLinewrap(2).between(a.getDomainsAssignment_5(), a.getDomainsAssignment_5());
c.setLinewrap(1).before(a.getOwnedDomainsAssignment_8());
c.setLinewrap(1).before(a.getWhereKeyword_9_0());
@@ -337,6 +338,11 @@ public class QVTimperativeFormatter extends AbstractEssentialOCLFormatter
c.setNoSpace().around(a.getColonColonKeyword_2_1());
}
{
+ SetStatementCSElements a = f.getSetStatementCSAccess();
+ c.setLinewrap(1).before(a.getSetKeyword_0());
+ c.setNoSpace().before(a.getSemicolonKeyword_6());
+ }
+ {
SourceBottomPatternCSElements a = f.getSourceBottomPatternCSAccess();
c.setNoLinewrap().before(a.getLeftCurlyBracketKeyword_1());
c.setLinewrap().after(a.getLeftCurlyBracketKeyword_1());
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java
index 7bf996340..8eab30e06 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java
@@ -444,6 +444,7 @@ public class QVTiInterpreterTests extends LoadTestCase
public void testClassesCS2AS_bug456900() throws Exception {
MyQVT myQVT = createQVT();
QVTiEnvironmentFactory environmentFactory = myQVT.getEnvironmentFactory();
+ environmentFactory.setEvaluationTracingEnabled(true);
MyQvtiExecutor testEvaluator = new MyQvtiExecutor(environmentFactory, "ClassesCS2AS/bug456900", "ClassesCS2AS.qvti");
testEvaluator.saveTransformation(null);
testEvaluator.loadModel("leftCS", "example_input.xmi");

Back to the top