[506817] Provide this TypedModel for QVTc too
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 2e5b4e4..9cf34a9 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
@@ -96,6 +96,10 @@
@Override
public EObject get(Object oIn) {
+ if (oIn instanceof Transformation) {
+ getClass();
+ return (EObject) oIn;
+ }
EObject eOut = super.get(oIn);
if (eOut == null) {
eOut = context.equivalentTarget((Element)oIn);
@@ -736,7 +740,16 @@
vOut.setIsImplicit(vIn.isIsImplicit());
vOut.setIsRequired(vIn.isIsRequired());
Type tIn = vIn.getType();
- Type tVar = tIn != null ? context.equivalentTarget(tIn) : null;
+ Type tVar;
+ if (vOut.eContainer() instanceof Transformation) {
+ tVar = tIn;
+ }
+ else if (tIn != null) {
+ tVar = context.equivalentTarget(tIn);
+ }
+ else {
+ tVar = null;
+ }
vOut.setType(tVar);
Type tvIn = vIn.getTypeValue();
vOut.setTypeValue(tvIn != null ? context.equivalentTarget(tvIn) : null);
@@ -804,6 +817,9 @@
* @param context the context in which the trace is valid
*/
public void addTrace(@NonNull Element source, @NonNull Element target) {
+ if (source instanceof Transformation) {
+ getClass();
+ }
target2source.put(target, source);
//
NamedElement scope = scopeStack.peek();
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/usage/QVTcoreDomainUsageAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/usage/QVTcoreDomainUsageAnalysis.java
index 8abd25b..399058c 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/usage/QVTcoreDomainUsageAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/usage/QVTcoreDomainUsageAnalysis.java
@@ -281,14 +281,14 @@
public @NonNull DomainUsage visitTransformation(@NonNull Transformation object) {
RootDomainUsageAnalysis rootAnalysis = getRootAnalysis();
if (rootAnalysis != this) {
- return rootAnalysis.getNoneUsage();
+ return rootAnalysis.getThisUsage();
}
// for (TypedModel typedModel : object.getModelParameter()) { -- done in analyzeTransformation
// visit(typedModel);
// }
// System.out.println(" " + getClass().getSimpleName() + "@" + Integer.toHexString(System.identityHashCode(this)) + " : " + object);
VariableDeclaration ownedContext = QVTbaseUtil.getContextVariable(getEnvironmentFactory().getStandardLibrary(), object);
- setUsage(ownedContext, getRootAnalysis().getNoneUsage());
+ setUsage(ownedContext, getRootAnalysis().getThisUsage());
//
// Ensure all operations are analyzed even if not used.
//
@@ -311,7 +311,7 @@
for (Rule rule : object.getRule()) {
visit(rule);
}
- return getRootAnalysis().getNoneUsage();
+ return getRootAnalysis().getThisUsage();
}
@Override
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/as2cs/QVTcoreDeclarationVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/as2cs/QVTcoreDeclarationVisitor.java
index 5f7ae45..363f6e8 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/as2cs/QVTcoreDeclarationVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/as2cs/QVTcoreDeclarationVisitor.java
@@ -575,7 +575,7 @@
@Override
public ElementCS visitTypedModel(@NonNull TypedModel asTypedModel) {
- if (asTypedModel.isIsPrimitive()) {
+ if (asTypedModel.isIsPrimitive() || asTypedModel.isIsThis()) {
return null;
}
DirectionCS csDirection = context.refreshNamedElement(DirectionCS.class, QVTcoreCSPackage.Literals.DIRECTION_CS, asTypedModel, 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 2922969..fa524aa 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
@@ -380,6 +380,7 @@
List<TypedModel> newModelParameters = new ArrayList<>();
context.refreshPivotList(TypedModel.class, newModelParameters, csElement.getOwnedDirections());
newModelParameters.add(0, getHelper().createPrimitiveTypedModel());
+ newModelParameters.add(1, getHelper().createThisTypedModel());
PivotUtilInternal.refreshList(asTransformation.getModelParameter(), newModelParameters);
context.refreshPivotList(Property.class, asTransformation.getOwnedProperties(), csElement.getOwnedProperties());
QVTbaseUtil.getContextVariable(standardLibrary, asTransformation);
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSPostOrderVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSPostOrderVisitor.java
index e6ba86b..59ca165 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSPostOrderVisitor.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtcore/src/org/eclipse/qvtd/xtext/qvtcore/cs2as/QVTcoreCSPostOrderVisitor.java
@@ -11,6 +11,7 @@
package org.eclipse.qvtd.xtext.qvtcore.cs2as;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
@@ -28,6 +29,8 @@
import org.eclipse.ocl.xtext.essentialoclcs.ExpCS;
import org.eclipse.qvtd.pivot.qvtbase.Function;
import org.eclipse.qvtd.pivot.qvtbase.Predicate;
+import org.eclipse.qvtd.pivot.qvtbase.Transformation;
+import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
import org.eclipse.qvtd.pivot.qvtcore.Assignment;
import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
@@ -232,7 +235,14 @@
}
@Override
- public Continuation<?> visitTransformationCS(@NonNull TransformationCS object) {
+ public Continuation<?> visitTransformationCS(@NonNull TransformationCS csElement) {
+ Transformation asTransformation = PivotUtil.getPivot(Transformation.class, csElement);
+ if (asTransformation != null) {
+ TypedModel thisTypedModel = QVTbaseUtil.basicGetThisTypedModel(asTransformation);
+ if (thisTypedModel != null) {
+ context.refreshList(thisTypedModel.getUsedPackage(), Collections.singletonList(asTransformation.getOwningPackage()));
+ }
+ }
return null;
}
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 1c157bd..1717204 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
@@ -452,13 +452,12 @@
}
@Override
- public ElementCS visitImperativeModel(@NonNull ImperativeModel asModel) {
- assert asModel.eContainer() == null;
- TopLevelCS csDocument = context.refreshElement(TopLevelCS.class, QVTimperativeCSPackage.Literals.TOP_LEVEL_CS, asModel);
- csDocument.setPivot(asModel);
- context.refreshList(csDocument.getOwnedImports(), context.visitDeclarations(ImportCS.class, asModel.getOwnedImports(), null));
-
- buildModel(csDocument, asModel);
+ public ElementCS visitImperativeModel(@NonNull ImperativeModel iModel) {
+ assert iModel.eContainer() == null;
+ TopLevelCS csDocument = context.refreshElement(TopLevelCS.class, QVTimperativeCSPackage.Literals.TOP_LEVEL_CS, iModel);
+ csDocument.setPivot(iModel);
+ context.refreshList(csDocument.getOwnedImports(), context.visitDeclarations(ImportCS.class, iModel.getOwnedImports(), null));
+ buildModel(csDocument, iModel);
return csDocument;
}