[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;
 	}