diff options
author | Ed Willink | 2018-04-19 09:05:48 +0000 |
---|---|---|
committer | Ed Willink | 2018-04-19 10:51:56 +0000 |
commit | 2556c40c3391cc3bde48dab497752e2c5394bd60 (patch) | |
tree | c512c8125aece4db42f7d241ed50d99c41331125 | |
parent | 067369fa434d27459497979cbb24314b6f00634c (diff) | |
download | org.eclipse.qvtd-2556c40c3391cc3bde48dab497752e2c5394bd60.tar.gz org.eclipse.qvtd-2556c40c3391cc3bde48dab497752e2c5394bd60.tar.xz org.eclipse.qvtd-2556c40c3391cc3bde48dab497752e2c5394bd60.zip |
[517524] Use TypedModel.isTrace
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' } }; |