Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2018-04-19 09:05:48 +0000
committerEd Willink2018-04-19 10:51:56 +0000
commit2556c40c3391cc3bde48dab497752e2c5394bd60 (patch)
treec512c8125aece4db42f7d241ed50d99c41331125
parent067369fa434d27459497979cbb24314b6f00634c (diff)
downloadorg.eclipse.qvtd-2556c40c3391cc3bde48dab497752e2c5394bd60.tar.gz
org.eclipse.qvtd-2556c40c3391cc3bde48dab497752e2c5394bd60.tar.xz
org.eclipse.qvtd-2556c40c3391cc3bde48dab497752e2c5394bd60.zip
[517524] Use TypedModel.isTrace
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/AbstractCompilerChain.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformation2CoreTransformation.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtr/AbstractQVTr2QVTr.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/QVTs2QVTiVisitor.java15
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtbase/emf-gen/org/eclipse/qvtd/pivot/qvtbase/impl/TypedModelImpl.java6
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java8
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/analysis/RootDomainUsageAnalysis.java3
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java32
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java13
-rw-r--r--plugins/org.eclipse.qvtd.umlx/src/org/eclipse/qvtd/umlx/qvtr2umlx/QVTr2UMLX.java2
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java5
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/as2cs/QVTrelationDeclarationVisitor.java20
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/models/newATL2QVTr/NewATL2QVTr.qvtr4
14 files changed, 83 insertions, 33 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/AbstractCompilerChain.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/AbstractCompilerChain.java
index bc985cc41..ee3f23fef 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/AbstractCompilerChain.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/AbstractCompilerChain.java
@@ -463,7 +463,7 @@ public abstract class AbstractCompilerChain extends CompilerUtil implements Comp
List<@NonNull TypedModel> outputTypedModels = new ArrayList<>();
List<@NonNull TypedModel> intermediateTypedModels = new ArrayList<>();
for (@NonNull TypedModel typedModel : QVTcoreUtil.getModelParameters(transformation)) {
- if (!QVTbaseUtil.isTrace(typedModel)) {
+ if (!typedModel.isIsTrace()) {
String modelName = typedModel.getName();
if (enforcedOutputName.equals(modelName)) {
if (outputTypedModels.size() > 1) {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java
index d5aca6ab8..97a91701c 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/common/AbstractQVTc2QVTc.java
@@ -385,6 +385,8 @@ public abstract class AbstractQVTc2QVTc extends QVTcoreHelper
}
tmOut.setName(name);
tmOut.getUsedPackage().addAll(tmIn.getUsedPackage());
+ tmOut.setIsPrimitive(tmIn.isIsPrimitive());
+ tmOut.setIsTrace(tmIn.isIsTrace());
createAll(tmIn.getOwnedComments(), tmOut.getOwnedComments());
return tmOut;
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformation2CoreTransformation.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformation2CoreTransformation.java
index fe921f647..90003c67c 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformation2CoreTransformation.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformation2CoreTransformation.java
@@ -102,7 +102,7 @@ public class RelationalTransformation2CoreTransformation extends QVTcoreHelper
// Create a non-middle TypedModel per model parameter
//
for (@NonNull TypedModel relationTypedModel : ClassUtil.nullFree(relationalTransformation.getModelParameter())) {
- if (!QVTbaseUtil.isTrace(relationTypedModel)) {
+ if (!relationTypedModel.isIsTrace()) {
TypedModel coreTypedModel = createTypedModel(coreTransformation2, relationTypedModel.getName(), ClassUtil.nullFree(relationTypedModel.getUsedPackage()));
qvtr2qvtc.putTypedModel(relationTypedModel, coreTypedModel);
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtr/AbstractQVTr2QVTr.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtr/AbstractQVTr2QVTr.java
index 759165ef9..9eccb1eaa 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtr/AbstractQVTr2QVTr.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtr/AbstractQVTr2QVTr.java
@@ -352,6 +352,8 @@ public abstract class AbstractQVTr2QVTr extends QVTrelationHelper
// }
tmOut.setName(name);
tmOut.getUsedPackage().addAll(tmIn.getUsedPackage());
+ tmOut.setIsPrimitive(tmIn.isIsPrimitive());
+ tmOut.setIsTrace(tmIn.isIsTrace());
createAll(tmIn.getOwnedComments(), tmOut.getOwnedComments());
return tmOut;
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/QVTs2QVTiVisitor.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/QVTs2QVTiVisitor.java
index 48f315148..d63e52d2a 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/QVTs2QVTiVisitor.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/QVTs2QVTiVisitor.java
@@ -65,7 +65,6 @@ import org.eclipse.qvtd.pivot.qvtschedule.Region;
import org.eclipse.qvtd.pivot.qvtschedule.ScheduledRegion;
import org.eclipse.qvtd.pivot.qvtschedule.VariableNode;
import org.eclipse.qvtd.pivot.qvtschedule.util.AbstractExtendingQVTscheduleVisitor;
-import org.eclipse.qvtd.pivot.qvtschedule.utilities.QVTscheduleConstants;
import org.eclipse.qvtd.pivot.qvtschedule.utilities.QVTscheduleUtil;
import org.eclipse.qvtd.pivot.qvtschedule.utilities.SymbolNameBuilder;
import org.eclipse.qvtd.pivot.qvtschedule.utilities.SymbolNameReservation;
@@ -267,16 +266,16 @@ public class QVTs2QVTiVisitor extends AbstractExtendingQVTscheduleVisitor<@Nulla
assert typedModelName != null;
ImperativeTypedModel qvtiTypedModel = helper.createTypedModel(typedModelName);
qvtiTypedModel.getUsedPackage().addAll(qvtmTypedModel.getUsedPackage());
- if (QVTscheduleConstants.MIDDLE_DOMAIN_NAME.equals(typedModelName)) {
- assert qvtiMiddleTypedModel == null;
- qvtiMiddleTypedModel = qvtiTypedModel;
- }
- else if (QVTbaseUtil.TRACE_TYPED_MODEL_NAME.equals(typedModelName)) {
- assert qvtiMiddleTypedModel == null;
+ boolean isPrimitive = qvtmTypedModel.isIsPrimitive();
+ boolean isTrace = qvtmTypedModel.isIsTrace();
+ qvtiTypedModel.setIsPrimitive(isPrimitive);
+ qvtiTypedModel.setIsTrace(isTrace);
+ if (isTrace) {
+ assert qvtiMiddleTypedModel == null;
qvtiMiddleTypedModel = qvtiTypedModel;
}
qvtmTypedModel2qvtiTypedModel.put(qvtmTypedModel, qvtiTypedModel);
- if (!QVTbaseUtil.PRIMITIVE_TYPED_MODEL_NAME.equals(typedModelName)) {
+ if (!isPrimitive) {
qvtiTransformation.getModelParameter().add(qvtiTypedModel);
}
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtbase/emf-gen/org/eclipse/qvtd/pivot/qvtbase/impl/TypedModelImpl.java b/plugins/org.eclipse.qvtd.pivot.qvtbase/emf-gen/org/eclipse/qvtd/pivot/qvtbase/impl/TypedModelImpl.java
index df4635954..6a3b2ec8e 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtbase/emf-gen/org/eclipse/qvtd/pivot/qvtbase/impl/TypedModelImpl.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtbase/emf-gen/org/eclipse/qvtd/pivot/qvtbase/impl/TypedModelImpl.java
@@ -484,4 +484,10 @@ public class TypedModelImpl extends NamedElementImpl implements TypedModel {
public <R> R accept(@NonNull Visitor<R> visitor) {
return (R) ((QVTbaseVisitor<?>)visitor).visitTypedModel(this);
}
+
+ @Override
+ public void setName(String newName) {
+ // TODO Auto-generated method stub
+ super.setName(newName);
+ }
} //TypedModelImpl
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java b/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java
index 7028c2cd4..35ecb4fc6 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/utilities/QVTbaseUtil.java
@@ -185,7 +185,7 @@ public class QVTbaseUtil extends PivotUtil
public static @Nullable TypedModel basicGetTraceTypedModel(@NonNull Iterable<@NonNull TypedModel> modelParameters) {
for (@NonNull TypedModel typedModel : modelParameters) {
- if (isTrace(typedModel)) {
+ if (typedModel.isIsTrace()) {
return typedModel;
}
}
@@ -524,15 +524,19 @@ public class QVTbaseUtil extends PivotUtil
return false;
}
+ @Deprecated /* @deprecated use TypedModel.isIsTrace() */
public static boolean isTrace(@NonNull TypedModel typedModel) {
- // FIXME BUG 517524 introduce TypedModel.isImplicit.
+ // FIXME BUG 517524 exploit rather than check TypedModel.isImplicit.
String name = typedModel.getName(); // One old way
if (name == null) {
+ assert typedModel.isIsTrace();
return true;
}
if (TRACE_TYPED_MODEL_NAME.equals(name)) { // Another old way
+ assert typedModel.isIsTrace();
return true;
}
+ assert !typedModel.isIsTrace();
return false;
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/analysis/RootDomainUsageAnalysis.java b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/analysis/RootDomainUsageAnalysis.java
index c625f7a63..86d2a2c05 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/analysis/RootDomainUsageAnalysis.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/analysis/RootDomainUsageAnalysis.java
@@ -318,6 +318,7 @@ public abstract class RootDomainUsageAnalysis extends AbstractBaseDomainUsageAna
super(environmentFactory);
this.standardLibrary = context.getStandardLibrary();
primitiveTypeModel.setName(QVTbaseUtil.PRIMITIVE_TYPED_MODEL_NAME);
+ primitiveTypeModel.setIsPrimitive(true);
add(primitiveTypeModel);
validUsages.put(NONE_USAGE_BIT_MASK, getConstantUsage(NONE_USAGE_BIT_MASK));
validUsages.put(PRIMITIVE_USAGE_BIT_MASK, getConstantUsage(PRIMITIVE_USAGE_BIT_MASK));
@@ -374,7 +375,7 @@ public abstract class RootDomainUsageAnalysis extends AbstractBaseDomainUsageAna
if (typedModel == primitiveTypeModel) {
continue;
}
- if (QVTbaseUtil.isTrace(typedModel)) {
+ if (typedModel.isIsTrace()) {
traceTypedModel = typedModel;
// continue;
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java
index 274402edd..1ad515bef 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtcore/src/org/eclipse/qvtd/pivot/qvtcore/utilities/QVTcoreUtil.java
@@ -19,8 +19,10 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
@@ -219,7 +221,12 @@ public class QVTcoreUtil extends QVTbaseUtil
public static @NonNull ASResource loadTransformations(@NonNull QVTbaseEnvironmentFactory environmentFactory, @NonNull URI transformationURI, boolean keepDebug) throws IOException {
CreateStrategy savedStrategy = environmentFactory.setCreateStrategy(QVTcEnvironmentFactory.CREATE_STRATEGY);
try {
- return loadTransformations(CoreModel.class, environmentFactory, transformationURI, keepDebug);
+ ASResource asResource = loadTransformations(CoreModel.class, environmentFactory, transformationURI, keepDebug);
+ List<@NonNull TypedModel> missingIsTraces = rewriteMissingTypedModelIsTrace(asResource);
+ if (missingIsTraces != null) {
+ System.err.println("TypedModel.isTrace fixed up for '" + transformationURI + "'");
+ }
+ return asResource;
}
finally {
environmentFactory.setCreateStrategy(savedStrategy);
@@ -227,7 +234,28 @@ public class QVTcoreUtil extends QVTbaseUtil
}
/**
- * Sort the pattern variables into a least referenced foirst then alphabetical order.
+ * Rewrite asResource to ensure null-named TypedModel s are isImplicit.
+ */
+ public static @Nullable List<@NonNull TypedModel> rewriteMissingTypedModelIsTrace(@NonNull Resource asResource) {
+ List<@NonNull TypedModel> missingImplicits = null;
+ for (TreeIterator<EObject> tit = asResource.getAllContents(); tit.hasNext(); ) {
+ EObject eObject = tit.next();
+ if (eObject instanceof TypedModel) {
+ TypedModel typedModel = (TypedModel)eObject;
+ if ((typedModel.getName() == null) && !typedModel.isIsTrace()) {
+ if (missingImplicits == null) {
+ missingImplicits = new ArrayList<>();
+ }
+ missingImplicits.add(typedModel);
+ typedModel.setIsTrace(true);
+ }
+ }
+ }
+ return missingImplicits;
+ }
+
+ /**
+ * Sort the pattern variables into a least referenced first then alphabetical order.
*/
public static void sortPatternVariables(@NonNull List<@NonNull Variable> variables) {
if (variables.size() > 1) {
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java
index 752654a99..5c4c24339 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtrelation/src/org/eclipse/qvtd/pivot/qvtrelation/utilities/QVTrelationUtil.java
@@ -37,6 +37,7 @@ import org.eclipse.qvtd.pivot.qvtbase.Rule;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseEnvironmentFactory;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseEnvironmentFactory.CreateStrategy;
+import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtrelation.DomainPattern;
import org.eclipse.qvtd.pivot.qvtrelation.Key;
import org.eclipse.qvtd.pivot.qvtrelation.Relation;
@@ -375,7 +376,7 @@ public class QVTrelationUtil extends QVTtemplateUtil
EObject eObject = tit.next();
if (eObject instanceof RelationalTransformation) {
RelationalTransformation asTransformation = (RelationalTransformation)eObject;
- TypedModel traceTypedModel = NameUtil.getNameable(getModelParameters(asTransformation), TRACE_TYPED_MODEL_NAME);
+ TypedModel traceTypedModel = QVTbaseUtil.basicGetTraceTypedModel(getModelParameters(asTransformation));
if (traceTypedModel == null) {
if (helper == null) {
helper = new QVTrelationHelper(environmentFactory);
@@ -384,8 +385,16 @@ public class QVTrelationUtil extends QVTtemplateUtil
}
}
if (eObject instanceof Relation) {
+ VariableDeclaration traceClassVariable = null;
Relation asRelation = (Relation)eObject;
- Variable traceClassVariable = NameUtil.getNameable(getOwnedVariables(asRelation), TRACE_CLASS_NAME);
+ for (@NonNull VariableDeclaration variable : getOwnedVariables(asRelation)) {
+ if ((variable instanceof SharedVariable) && ((SharedVariable)variable).isIsImplicit()) {
+ traceClassVariable = variable;
+ }
+ }
+ if (traceClassVariable == null) { // Legacy rescue
+ traceClassVariable = NameUtil.getNameable(getOwnedVariables(asRelation), TRACE_CLASS_NAME);
+ }
if (traceClassVariable == null) {
if (helper == null) {
helper = new QVTrelationHelper(environmentFactory);
diff --git a/plugins/org.eclipse.qvtd.umlx/src/org/eclipse/qvtd/umlx/qvtr2umlx/QVTr2UMLX.java b/plugins/org.eclipse.qvtd.umlx/src/org/eclipse/qvtd/umlx/qvtr2umlx/QVTr2UMLX.java
index f9d6625ac..05ccc942f 100644
--- a/plugins/org.eclipse.qvtd.umlx/src/org/eclipse/qvtd/umlx/qvtr2umlx/QVTr2UMLX.java
+++ b/plugins/org.eclipse.qvtd.umlx/src/org/eclipse/qvtd/umlx/qvtr2umlx/QVTr2UMLX.java
@@ -530,7 +530,7 @@ public class QVTr2UMLX
//
Iterable<@NonNull TypedModel> modelParameters = QVTrelationUtil.getModelParameters(qvtrTransformation);
for (@NonNull TypedModel qvtrTypedModel : modelParameters) {
- if (!QVTbaseUtil.isTrace(qvtrTypedModel)) {
+ if (!qvtrTypedModel.isIsTrace()) {
for (org.eclipse.ocl.pivot.@NonNull Package asPackage : QVTrelationUtil.getUsedPackages(qvtrTypedModel)) {
TxPackageNode txPackageNode = asPackage2txPackageNode.get(asPackage);
if (txPackageNode == null) {
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java
index be8e3befd..0d7605db3 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSContainmentVisitor.java
@@ -214,7 +214,10 @@ public class QVTcoreCSContainmentVisitor extends AbstractQVTcoreCSContainmentVis
@Override
public Continuation<?> visitDirectionCS(@NonNull DirectionCS csElement) {
- refreshNamedElement(TypedModel.class, QVTbasePackage.Literals.TYPED_MODEL, csElement);
+ TypedModel asTypedModel = refreshNamedElement(TypedModel.class, QVTbasePackage.Literals.TYPED_MODEL, csElement);
+ if (csElement.getName() == null) {
+ asTypedModel.setIsTrace(true);
+ }
return new DirectionContentContinuation(context, csElement);
}
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/as2cs/QVTrelationDeclarationVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/as2cs/QVTrelationDeclarationVisitor.java
index 66e6fa546..ec63c2744 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/as2cs/QVTrelationDeclarationVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtrelation/src/org/eclipse/qvtd/xtext/qvtrelation/as2cs/QVTrelationDeclarationVisitor.java
@@ -38,7 +38,6 @@ import org.eclipse.ocl.pivot.Variable;
import org.eclipse.ocl.pivot.VariableDeclaration;
import org.eclipse.ocl.pivot.VariableExp;
import org.eclipse.ocl.pivot.internal.manager.Orphanage;
-import org.eclipse.ocl.pivot.internal.utilities.AbstractConversion;
import org.eclipse.ocl.pivot.internal.utilities.EnvironmentFactoryInternal;
import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
@@ -116,6 +115,8 @@ import org.eclipse.qvtd.xtext.qvtrelationcs.TransformationCS;
import org.eclipse.qvtd.xtext.qvtrelationcs.VarDeclarationCS;
import org.eclipse.qvtd.xtext.qvtrelationcs.VarDeclarationIdCS;
+import com.google.common.collect.Lists;
+
public class QVTrelationDeclarationVisitor extends QVTbaseDeclarationVisitor implements QVTrelationVisitor<ElementCS>
{
private static final Logger logger = Logger.getLogger(QVTrelationDeclarationVisitor.class);
@@ -134,16 +135,6 @@ public class QVTrelationDeclarationVisitor extends QVTbaseDeclarationVisitor imp
return csPathName;
}
- protected static class NotTraceTypedModelPredicate implements AbstractConversion.Predicate<@NonNull TypedModel>
- {
- public static @NonNull NotTraceTypedModelPredicate INSTANCE = new NotTraceTypedModelPredicate();
-
- @Override
- public boolean filter(@NonNull TypedModel typedModel) {
- return !QVTbaseUtil.isTrace(typedModel);
- }
- }
-
/**
* QVTrelationAliasAnalysis revises AliasAnalysis to support only those names explicitly defined (as a consequence
* of Unit AS elements).
@@ -617,7 +608,12 @@ public class QVTrelationDeclarationVisitor extends QVTbaseDeclarationVisitor imp
csTransformation.setOwnedPathName(csPathName);
context.refreshPathName(csPathName, owningPackage, null);
}
- context.refreshList(csTransformation.getOwnedModelDecls(), context.visitDeclarations(ModelDeclCS.class, QVTrelationUtil.getModelParameters(asTransformation), NotTraceTypedModelPredicate.INSTANCE));
+ List<@NonNull TypedModel> modelParameters = Lists.newArrayList(QVTrelationUtil.getModelParameters(asTransformation));
+ TypedModel traceTypedModel = QVTbaseUtil.basicGetTraceTypedModel(modelParameters);
+ if (traceTypedModel != null) {
+ modelParameters.remove(traceTypedModel);
+ }
+ context.refreshList(csTransformation.getOwnedModelDecls(), context.visitDeclarations(ModelDeclCS.class, modelParameters, null));
context.refreshList(csTransformation.getOwnedKeyDecls(), context.visitDeclarations(KeyDeclCS.class, asTransformation.getOwnedKey(), null));
context.refreshList(csTransformation.getOwnedQueries(), context.visitDeclarations(QueryCS.class, asTransformation.getOwnedOperations(), null));
context.refreshList(csTransformation.getOwnedRelations(), context.visitDeclarations(RelationCS.class, asTransformation.getRule(), null));
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/models/newATL2QVTr/NewATL2QVTr.qvtr b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/models/newATL2QVTr/NewATL2QVTr.qvtr
index 98ef04930..ab54662e0 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/models/newATL2QVTr/NewATL2QVTr.qvtr
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/models/newATL2QVTr/NewATL2QVTr.qvtr
@@ -262,7 +262,7 @@ package org::eclipse::qvtd::xtext::qvtrelation::tests::atl2qvtr {
transformation = qvtrTransformation,
variable = :SharedVariable {
name = 'trace',
- isTrace = true,
+ isImplicit = true,
type = pivotMM::OclElement
}
};
@@ -309,7 +309,7 @@ package org::eclipse::qvtd::xtext::qvtrelation::tests::atl2qvtr {
isRequired = true
},
modelParameter = : qvtbMM::TypedModel {
- isImplicit = true,
+ isTrace = true,
name = 'middle'
}
};

Back to the top