[cs2as] - Make the OCL2QVTiCGed Tx compiler use the new scheduler 
- Some cleanup
diff --git a/plugins/org.eclipse.qvtd.cs2as.build/src/org/eclipse/qvtd/cs2as/build/mwe/GenerateCGedQVTiTransformation.java b/plugins/org.eclipse.qvtd.cs2as.build/src/org/eclipse/qvtd/cs2as/build/mwe/GenerateCGedQVTiTransformation.java
index 9105056..ae1993f 100644
--- a/plugins/org.eclipse.qvtd.cs2as.build/src/org/eclipse/qvtd/cs2as/build/mwe/GenerateCGedQVTiTransformation.java
+++ b/plugins/org.eclipse.qvtd.cs2as.build/src/org/eclipse/qvtd/cs2as/build/mwe/GenerateCGedQVTiTransformation.java
@@ -20,11 +20,11 @@
 import org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent;
 import org.eclipse.emf.mwe.core.monitor.ProgressMonitor;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.utilities.XMIUtil;
 import org.eclipse.qvtd.cs2as.compiler.CS2ASJavaCompilerParameters;
 import org.eclipse.qvtd.cs2as.compiler.OCL2QVTiCGTxCompiler;
 import org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerParametersImpl;
 
-
 public  class GenerateCGedQVTiTransformation extends AbstractWorkflowComponent
 {
 	private final static @NonNull String BACKSLASH = "/";
diff --git a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/OCL2QVTiCGTxCompiler.java b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/OCL2QVTiCGTxCompiler.java
index d934082..022ea8c 100644
--- a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/OCL2QVTiCGTxCompiler.java
+++ b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/OCL2QVTiCGTxCompiler.java
@@ -11,6 +11,8 @@
 package org.eclipse.qvtd.cs2as.compiler;
 
 
+import java.util.HashMap;
+import java.util.Map;
 
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -18,11 +20,13 @@
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.ocl.pivot.evaluation.tx.Transformer;
 import org.eclipse.ocl.pivot.resource.BasicProjectManager;
-import org.eclipse.ocl.pivot.utilities.OCL;
+import org.eclipse.ocl.pivot.utilities.XMIUtil;
 import org.eclipse.ocl.xtext.completeocl.CompleteOCLStandaloneSetup;
-import org.eclipse.qvtd.compiler.internal.etl.PivotModel;
+import org.eclipse.qvtd.compiler.CompilerChain.Key;
 import org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerImpl;
-import org.eclipse.qvtd.cs2as.compiler.internal.OCL2QVTiBroker;
+import org.eclipse.qvtd.cs2as.compiler.internal.OCL2QVTiCompilerChain;
+import org.eclipse.qvtd.pivot.qvtbase.Transformation;
+import org.eclipse.qvtd.pivot.qvtcore.QVTcorePivotStandaloneSetup;
 import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
 import org.eclipse.qvtd.xtext.qvtimperative.QVTimperativeStandaloneSetup;
 
@@ -31,6 +35,7 @@
 	static {
 		CompleteOCLStandaloneSetup.doSetup();
 		QVTimperativeStandaloneSetup.doSetup();
+		QVTcorePivotStandaloneSetup.doSetup();
 	}
 		
 	@Override
@@ -41,33 +46,38 @@
 	
 	@Override
 	public Class<? extends Transformer> compileTransformation(@NonNull URI oclDocURI, @NonNull CS2ASJavaCompilerParameters params, @Nullable ResourceSet rSet, @NonNull String tracePropertyName) throws Exception {
+		return this.compileTransformation(rSet, params, tracePropertyName, oclDocURI);
+	}
+	
+	public Class<? extends Transformer> compileTransformation(@Nullable ResourceSet rSet, @NonNull CS2ASJavaCompilerParameters params, @NonNull String tracePropertyName, @NonNull URI oclDocURI, URI... extendedOCLDocURIs) 
+			throws Exception {
 		
 		QVTimperative qvt = QVTimperative.newInstance(BasicProjectManager.CLASS_PATH, rSet);
 		try {
-			PivotModel qvtiTransf = executeOCL2QVTi_MTC(qvt, oclDocURI.trimSegments(1), oclDocURI.lastSegment(), tracePropertyName);
-			return createCompiler().compileTransformation(qvt, qvtiTransf.getTransformation(), (CS2ASJavaCompilerParameters) params);	
+			Transformation qvtiTransf = executeOCL2QVTi_CompilerChain(qvt, tracePropertyName, oclDocURI, extendedOCLDocURIs);
+			return createCompiler().compileTransformation(qvt, qvtiTransf, (CS2ASJavaCompilerParameters) params);	
 		} finally {
-			qvt.dispose();	
+			qvt.dispose();
 		}
 	}
 	
 	protected CS2ASJavaCompilerImpl createCompiler() {
 		return new CS2ASJavaCompilerImpl();
 	}
-		
-	/**
-	 * @param ocl
-	 * @param baseURI
-	 * @param oclDocName
-	 * @param tracePropName the name of the CS2AS traceability property
-	 * @return the {@link PivotModel} corresponding to the final QVTi transformation
-	 * @throws Exception
-	 */
-	protected PivotModel executeOCL2QVTi_MTC(OCL ocl, URI baseURI, String oclDocName, String tracePropName) throws Exception {
-		
-		// FIXME Map<?, ?> savingOptions = this.savingOptions == null ? XMIUtil.createSaveOptions() : this.savingOptions;
-		OCL2QVTiBroker mtc = new OCL2QVTiBroker(baseURI, oclDocName, ocl, null, true, tracePropName);
-    	mtc.execute();
-    	return mtc.getiModel();
+
+	protected Transformation executeOCL2QVTi_CompilerChain(QVTimperative qvt, String tracePropName,  URI oclDocURI, URI... extendedOCLDocURIs) throws Exception {
+
+		Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> options = new HashMap<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>>();
+		// OCL2QVTp options
+		@NonNull Map<@NonNull Key<?>, @Nullable Object> ocl2qvtpOptions = new HashMap<@NonNull Key<?>, @Nullable Object>();
+		ocl2qvtpOptions.put(OCL2QVTiCompilerChain.TRACE_PROPERTY_NAME_KEY, tracePropName);
+		// Default options
+		@NonNull Map<@NonNull Key<?>, @Nullable Object> defStepOptions = new HashMap<@NonNull Key<?>, @Nullable Object>();
+		defStepOptions.put(OCL2QVTiCompilerChain.SAVE_OPTIONS_KEY, XMIUtil.createSaveOptions()); // FIXME parametrize save options ?
+		options.put(OCL2QVTiCompilerChain.DEFAULT_STEP, defStepOptions);
+		options.put(OCL2QVTiCompilerChain.QVTP_STEP, ocl2qvtpOptions);
+	
+		OCL2QVTiCompilerChain compilerChain = new OCL2QVTiCompilerChain(qvt, options, oclDocURI, extendedOCLDocURIs);
+    	return compilerChain.compile();
 	}
 }
diff --git a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiBroker.java b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiBroker.java
deleted file mode 100644
index b3b44e0..0000000
--- a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiBroker.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014, 2015 Willink Transformations Ltd., University of York 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:
- *     Adolfo Sanchez-Barbudo Herrera (University of York) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.qvtd.cs2as.compiler.internal;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.ocl.pivot.utilities.OCL;
-import org.eclipse.qvtd.compiler.internal.etl.EtlTask;
-import org.eclipse.qvtd.compiler.internal.etl.MtcBroker;
-import org.eclipse.qvtd.compiler.internal.etl.PivotModel;
-import org.eclipse.qvtd.compiler.internal.etl.QvtMtcExecutionException;
-
-/**
- * This is a quick extension of the MtcBroker, to exercise the OCL2QVTi code in test cases
- * 
- * @author asbh500
- * 
- */
-public class OCL2QVTiBroker extends MtcBroker {
-	
-	private static final String OCL2QVTP_MIDDLE_MODEL = "etl/ocl2qvtp.etl";
-	
-	private static final String OCL2QVTP_MIDDLE_FOLDED = "etl/ocl2qvtp_v2.etl";
-
-	private static final String OCLSTDLIB_URI = "http://www.eclipse.org/ocl/2015/Library.oclas";
-	
-	private static final String ECORE_URI = "http://www.eclipse.org/emf/2002/Ecore";
-	
-	private static final String PIVOT_URI = "http://www.eclipse.org/ocl/2015/Pivot";
-	
-	private static final String QVTB_URI ="http://www.eclipse.org/qvt/2015/QVTbase";
-	
-	private static final String QVTCB_URI = "http://www.eclipse.org/qvt/2015/QVTcoreBase";
-	
-	private static final String QVTI_URI = "http://www.eclipse.org/qvt/2015/QVTimperative";
-		
-	private static final String QVTI_FULL_NS = QVTI_URI + ',' + QVTCB_URI + ',' +  QVTB_URI + ',' +  PIVOT_URI;
-	
-	private static final String TRACES_FULL_NS = PIVOT_URI + ',' + ECORE_URI;
-	
-	private @NonNull List<URI> oclASUris = new ArrayList<URI>();	
-	private @Nullable List<URI> tracesASUris = new ArrayList<URI>();
-	private @Nullable List<URI> qvtpUris = new ArrayList<URI>();
-	private @NonNull PivotModelUtil pmUtil;
-	private @Nullable String traceabilityPropName;
-
-	/**
-	 * @param baseURI the base {@link URI} on which the OCL document resides
-	 * @param oclDocName the name of the OCL document (e.g myCS2AS.ocl)
-	 * @param ocl an {@link OCL} instance to parse the OCL document
-	 * @param savingOptions some optional savingOptions
-	 * @throws Exception
-	 */
-	public OCL2QVTiBroker(@NonNull URI baseURI, @NonNull String oclDocName, @NonNull OCL ocl, @Nullable Map<?, ?> savingOptions )
-		throws Exception {
-		this(baseURI,  Collections.singletonList(oclDocName), ocl, savingOptions);
-	}	
-
-	/**
-	 * @param baseURI the base {@link URI} on which the OCL document resides
-	 * @param oclDocName the name of the OCL document (e.g myCS2AS.ocl)
-	 * @param ocl an {@link OCL} instance to parse the OCL document
-	 * @param savingOptions some optional savingOptions
-	 * @param usesMiddleFoldedInInputs true if the generated QVTp transformation should use middle folded in inputs approach
-	 * @param traceabilityPropName the name of the traceability property of CS elements (when using middleFoldedInInputs)
-	 * @throws Exception
-	 */
-	public OCL2QVTiBroker(@NonNull URI baseURI, @NonNull String oclDocName, @NonNull OCL ocl, @Nullable Map<?, ?> savingOptions,
-			boolean usesMiddleFoldedInInputs, @Nullable String traceabilityPropName)
-		throws Exception {
-		
-		this(baseURI, Collections.singletonList(oclDocName),  ocl, savingOptions, usesMiddleFoldedInInputs, traceabilityPropName);
-		
-	}
-	
-	
-	public OCL2QVTiBroker(@NonNull URI baseURI, @NonNull List<String> oclDocs, @NonNull OCL ocl, @Nullable Map<?, ?> savingOptions )
-			throws Exception {
-			this(baseURI, oclDocs, ocl, savingOptions, true, "ast");
-	}	
-	public OCL2QVTiBroker(@NonNull URI baseURI, @NonNull List<String> oclDocs, @NonNull OCL ocl, @Nullable Map<?, ?> savingOptions,
-			boolean usesMiddleFoldedInInputs, @Nullable String traceabilityPropName)
-		throws Exception {
-		
-		super(baseURI, oclDocs.get(0),  ocl.getEnvironmentFactory(), savingOptions);
-		this.pmUtil = new PivotModelUtil( ocl.getEnvironmentFactory());
-		for (String oclDocName : oclDocs) {
-			URI oclDocUri = baseURI.appendSegment(oclDocName);
-			URI oclASUri = ocl.parse(oclDocUri).getURI();
-			URI modelsBaseURI = oclASUri.trimFileExtension().trimFileExtension();
-			this.oclASUris.add(oclASUri);
-			this.qvtpUris.add(modelsBaseURI.appendFileExtension("qvtp.qvtias"));
-			if (!usesMiddleFoldedInInputs) {
-				this.tracesASUris.add(modelsBaseURI.appendFileExtension("ecore.oclas"));
-			}
-		}
-		this.traceabilityPropName = traceabilityPropName;
-	}
-	@Override
-	public void execute() throws QvtMtcExecutionException {
-		
-		pModel = prepareQVTpModel();
-		
-		prepare();
-		sModel = qvtpToQvts(pModel);
-		qvtpFlatScheduling(pModel, sModel);
-		// qvtpNestingScheduling(pModel, sModel);
-		if (createGraphml) {
-			qvtsToGraphML(sModel);
-		}
-		iModel = qvtpQvtsToQvti(pModel, sModel);
-	}
-	
-
-	public Resource newExecute() throws QvtMtcExecutionException {
-		pModel = prepareQVTpModel();
-		
-		prepare();
-		try {
-			iResource = qvtp2qvti(true);
-		} catch (QvtMtcExecutionException e) {
-			throw e;
-		} catch (IOException e) {
-			throw new QvtMtcExecutionException("Failed to create regions", e);
-		}
-		return iResource;
-	}
-	
-	
-	protected PivotModel prepareQVTpModel() throws QvtMtcExecutionException {
-				
-		if (oclASUris.size() > 1) {
-			throw new IllegalStateException("Deprecated OCL2QVTiBroker doesn't support multiple ocl documents. Use "+ OCL2QVTiCompilerChain.class.getName());
-		}
-		URI oclASUri = oclASUris.get(0);
-		PivotModel pModel = (tracesASUris.isEmpty())	? runOCL2QVTp_MiddleFolded(oclASUri, qvtpUris.get(0), traceabilityPropName) 
-				: runOCL2QVTp_MiddleModel(oclASUri, qvtpUris.get(0), tracesASUris.get(0));
-		
-		assertNoResourceErrors("pModel", pModel.getResource());
-		return pModel;
-	}
-	protected PivotModel runOCL2QVTp_MiddleModel (URI oclDocURI, URI qvtiFileURI, URI tracesMMURI) throws QvtMtcExecutionException {
-		
-		try {
-			EtlTask etl = new EtlTask(OCL2QVTiBroker.class.getResource(OCL2QVTP_MIDDLE_MODEL).toURI());
-			pModel = createQVTpModel(qvtiFileURI);
-			etl.addModel(createOCLModel(oclDocURI));
-			etl.addModel(pModel);
-			etl.addModel(createTracesModel(tracesMMURI));
-			etl.addModel(createOclStdLibModel());
-			etl.execute();
-
-		} catch (URISyntaxException e) {
-			throw new QvtMtcExecutionException("Exception launching OCL 2 QVTp transformation", e);
-		}
-		
-		return pModel;
-	}
-	
-	protected PivotModel runOCL2QVTp_MiddleFolded (URI oclDocURI, URI qvtiFileURI) throws QvtMtcExecutionException {
-		return runOCL2QVTp_MiddleFolded(oclDocURI, qvtiFileURI, "ast");
-	}
-	
-	protected PivotModel runOCL2QVTp_MiddleFolded (URI oclDocURI, URI qvtiFileURI, String traceabilityPropName) throws QvtMtcExecutionException {
-
-		PivotModel oclModel = createOCLModel(oclDocURI);
-		pModel= createQVTpModel(qvtiFileURI);
-		
-		OCL2QVTp ocl2qvtp = new OCL2QVTp(environmentFactory, traceabilityPropName);
-		Resource resource = ocl2qvtp.run(oclModel.getResource().getResourceSet() , oclDocURI); // NB. cModel is the .ocl doc
-		
-		pModel.getResource().getContents().addAll(resource.getContents());
-		return pModel;
-	}
-	
-	private PivotModel createOCLModel(URI oclDocURI) throws QvtMtcExecutionException {
-		String oclDocModelName = "OCL";
-		return pmUtil.createPivotModel(oclDocURI.toString(), oclDocModelName, "", PIVOT_URI, true, false, true, true, true, savingOptions);
-		
-	}
-	
-	private PivotModel createQVTpModel(URI qvtpFileURI) throws QvtMtcExecutionException { 
-		String qvtiModelName = "QVTp";
-		String qvtiModelAlises = "QVTi,QVT"; // FIXME further steps should configure the aliases
-		return pmUtil.createPivotModel(qvtpFileURI.toString(), qvtiModelName, qvtiModelAlises, QVTC_FULL_NS, false, true, false, true, true, savingOptions);
-	}
-	
-	private PivotModel createTracesModel(URI tracesMMURI) throws QvtMtcExecutionException { 
-		String tracesMModelName = "MiddleMM";
-		return pmUtil.createPivotModel(tracesMMURI.toString(), tracesMModelName, "", TRACES_FULL_NS , true, false, true, false, true, savingOptions);
-	}
-	
-	private PivotModel createOclStdLibModel() throws QvtMtcExecutionException {
-		String oclStdlibName = "OclStdLib";
-		return pmUtil.createPivotModel(OCLSTDLIB_URI, oclStdlibName, "", PIVOT_URI, true, false, true, false, true, savingOptions);
-	}
-}
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.qvtd.cs2as.compiler.tests/META-INF/MANIFEST.MF
index 5151e34..cf5590c 100644
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/META-INF/MANIFEST.MF
@@ -17,19 +17,4 @@
  org.eclipse.xsd;bundle-version="[2.11.0,3.0.0)";resolution:=optional
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: example1.source,
- example1.source.impl,
- example1.source.util,
- example1.target,
- example1.target.impl,
- example1.target.util,
- example2.classes,
- example2.classes.impl,
- example2.classes.util,
- example2.classescs,
- example2.classescs.impl,
- example2.classescs.util,
- example2.classescstraces,
- example2.classescstraces.impl,
- example2.classescstraces.util,
- org.eclipse.qvtd.cs2as.compiler.tests
+Export-Package: org.eclipse.qvtd.cs2as.compiler.tests
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/ExecutionBenchmarks.java b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/ExecutionBenchmarks.java
index 7235b14..a76d8ce 100644
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/ExecutionBenchmarks.java
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/ExecutionBenchmarks.java
@@ -41,7 +41,7 @@
 import org.junit.Before;
 import org.junit.Test;
 
-import cg._classescs2as_qvtp_qvtias.classescs2as_qvtp_qvtias;
+import cg._classescs2as_qvtp_qvtcas.classescs2as_qvtp_qvtcas;
 
 /**
  * @author asbh500
@@ -126,13 +126,13 @@
 			
 			URI baseURI = TESTS_BASE_URI.appendSegment("example2");
 			
-			trackExample_CG(myQVT, classescs2as_qvtp_qvtias.class, baseURI, "model1", results);
-			trackExample_CG(myQVT, classescs2as_qvtp_qvtias.class, baseURI, "model2", results);
-			trackExample_CG(myQVT, classescs2as_qvtp_qvtias.class, baseURI, "model3", results);
-			trackExample_CG(myQVT, classescs2as_qvtp_qvtias.class, baseURI, "model4", results);
-			trackExample_CG(myQVT, classescs2as_qvtp_qvtias.class, baseURI, "model5", results);
-			trackExample_CG(myQVT, classescs2as_qvtp_qvtias.class, baseURI, "model6", results);
-			trackExample_CG(myQVT, classescs2as_qvtp_qvtias.class, baseURI, "model7", results);
+			trackExample_CG(myQVT, classescs2as_qvtp_qvtcas.class, baseURI, "model1", results);
+			trackExample_CG(myQVT, classescs2as_qvtp_qvtcas.class, baseURI, "model2", results);
+			trackExample_CG(myQVT, classescs2as_qvtp_qvtcas.class, baseURI, "model3", results);
+			trackExample_CG(myQVT, classescs2as_qvtp_qvtcas.class, baseURI, "model4", results);
+			trackExample_CG(myQVT, classescs2as_qvtp_qvtcas.class, baseURI, "model5", results);
+			trackExample_CG(myQVT, classescs2as_qvtp_qvtcas.class, baseURI, "model6", results);
+			trackExample_CG(myQVT, classescs2as_qvtp_qvtcas.class, baseURI, "model7", results);
 			
 			myQVT.dispose();
 			
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java
index 74d7ebc..e8bd74c 100644
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java
@@ -229,13 +229,22 @@
 			Resource r = rSet.createResource(modelURI);
 			r.save(TestsXMLUtil.defaultSavingOptions);
 		}
+		
+		protected  @NonNull Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> createTestCasesCompilerOptions() {
+			Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> options = new HashMap<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>>();
+			Map<@NonNull Key<?>, @Nullable Object> defStepOptions = new HashMap<@NonNull Key<?>, @Nullable Object>();
+			defStepOptions.put(OCL2QVTiCompilerChain.SAVE_OPTIONS_KEY, TestsXMLUtil.defaultSavingOptions);
+			// TODO problem hen validating  defStepOptions.put(OCL2QVTiCompilerChain.VALIDATE_KEY, true);
+			options.put(OCL2QVTiCompilerChain.DEFAULT_STEP, defStepOptions);
+			return options;
+		}
 	}
 
 	// For testing purpose
 	private static class OCL2QVTiCompilerTester extends OCL2QVTiCompilerChain {
 
 		public OCL2QVTiCompilerTester(@NonNull URI baseURI, @NonNull String oclDocName, @NonNull QVTimperative metaModelManager) {
-			super(metaModelManager, createTestCasesCompilerOptions(), baseURI.appendSegment(oclDocName));
+			super(metaModelManager, null, baseURI.appendSegment(oclDocName));
 		}
 	
 		// For testing purpose
@@ -716,13 +725,6 @@
 		return (ASResource) asResource;
 	}
 
-	private static @NonNull Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> createTestCasesCompilerOptions() {
-		Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> options = new HashMap<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>>();
-		Map<@NonNull Key<?>, @Nullable Object> defStepOptions = new HashMap<@NonNull Key<?>, @Nullable Object>();
-		defStepOptions.put(OCL2QVTiCompilerChain.SAVE_OPTIONS_KEY, TestsXMLUtil.defaultSavingOptions);
-		// TODO problem hen validating  defStepOptions.put(OCL2QVTiCompilerChain.VALIDATE_KEY, true);
-		options.put(OCL2QVTiCompilerChain.DEFAULT_STEP, defStepOptions);
-		return options;
-	}
+
 	
 }
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/common/LookupResult.java b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/common/LookupResult.java
deleted file mode 100644
index 25ba0e2..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/common/LookupResult.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.eclipse.qvtd.cs2as.compiler.tests.common;
-
-import java.util.List;
-
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-
-public interface LookupResult<NE> {
-	
-	@Nullable
-	NE getSingleResult();
-	
-	@NonNull
-	List<NE> getAllResult();
-	
-	int size();
-}
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/common/LookupResultImpl.java b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/common/LookupResultImpl.java
deleted file mode 100644
index f9d4a93..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/common/LookupResultImpl.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.eclipse.qvtd.cs2as.compiler.tests.common;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-
-public class LookupResultImpl<NE> implements LookupResult<NE> {
-	
-	private List<NE> results = new ArrayList<NE>();
-	
-	public LookupResultImpl(List<NE> results){
-		this.results.addAll(results);
-	}
-	
-	@Override
-	@NonNull
-	public List<NE> getAllResult() {
-		return Collections.unmodifiableList(results);
-	}
-	
-	@Override
-	@Nullable
-	public NE getSingleResult() {
-		return results.size() == 0 ? null : results.get(0);
-	}
-	
-	@Override
-	public int size() {
-		return results.size();
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/.gitignore
deleted file mode 100644
index 635be60..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/new_cg/
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/.gitignore
index e0b49e5..2479ef9 100644
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/.gitignore
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/.gitignore
@@ -1,5 +1,9 @@
-/_SimplerKiama_qvtp_qvtias/
+/_classescs2asV2_qvtp_qvtcas/
 /_classescs2asV2_qvtp_qvtias/
+/_SimplerKiama_qvtp_qvtcas/
+/_Source2Target_qvtp_qvtcas/
 /_Source2Target_qvtp_qvtias/
+/_Source2TargetBase_qvtp_qvtcas/
 /_Source2TargetBase_qvtp_qvtias/
+/_Source2TargetDerived_qvtp_qvtcas/
 /_Source2TargetDerived_qvtp_qvtias/
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_SimplerKiama_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_SimplerKiama_qvtp_qvtcas/.gitignore
deleted file mode 100644
index 5cd66bd..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_SimplerKiama_qvtp_qvtcas/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/SimplerKiama_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetBase_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetBase_qvtp_qvtcas/.gitignore
deleted file mode 100644
index 00e1711..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetBase_qvtp_qvtcas/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/Source2TargetBase_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetDerived_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetDerived_qvtp_qvtcas/.gitignore
deleted file mode 100644
index 5760bad..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetDerived_qvtp_qvtcas/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/Source2TargetDerived_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2Target_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2Target_qvtp_qvtcas/.gitignore
deleted file mode 100644
index 79082dd..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2Target_qvtp_qvtcas/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/Source2Target_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2asV2_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2asV2_qvtp_qvtcas/.gitignore
deleted file mode 100644
index 8460b46..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2asV2_qvtp_qvtcas/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/classescs2asV2_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtcas/.gitignore
deleted file mode 100644
index 97be367..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtcas/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/classescs2as_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtcas/classescs2as_qvtp_qvtcas.java b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtcas/classescs2as_qvtp_qvtcas.java
new file mode 100644
index 0000000..985c83c
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtcas/classescs2as_qvtp_qvtcas.java
@@ -0,0 +1,844 @@
+/*******************************************************************************
+ * «codeGenHelper.getCopyright(' * ')»
+ *
+ * This code is 100% auto-generated
+ * using: org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerImpl$CS2ASJavaCodeGenerator
+ *
+ * Do not edit it.
+ ********************************************************************************/
+
+package cg._classescs2as_qvtp_qvtcas;
+
+import example2.classes.ClassesFactory;
+import example2.classes.ClassesPackage;
+import example2.classes.Package;
+import example2.classes.Root;
+import example2.classes.lookup.util.ClassesLookupResult;
+import example2.classes.lookup.util.ClassesLookupSolver;
+import example2.classes.util.Visitable;
+import example2.classescs.ClassCS;
+import example2.classescs.ClassescsPackage;
+import example2.classescs.PackageCS;
+import example2.classescs.PathElementCS;
+import example2.classescs.PathNameCS;
+import example2.classescs.RootCS;
+import java.util.Iterator;
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.ocl.pivot.evaluation.Executor;
+import org.eclipse.ocl.pivot.ids.ClassId;
+import org.eclipse.ocl.pivot.ids.CollectionTypeId;
+import org.eclipse.ocl.pivot.ids.IdManager;
+import org.eclipse.ocl.pivot.ids.IdResolver;
+import org.eclipse.ocl.pivot.ids.NsURIPackageId;
+import org.eclipse.ocl.pivot.ids.RootPackageId;
+import org.eclipse.ocl.pivot.ids.TypeId;
+import org.eclipse.ocl.pivot.library.collection.CollectionSelectByKindOperation;
+import org.eclipse.ocl.pivot.library.collection.CollectionSizeOperation;
+import org.eclipse.ocl.pivot.library.collection.OrderedCollectionFirstOperation;
+import org.eclipse.ocl.pivot.library.collection.OrderedCollectionLastOperation;
+import org.eclipse.ocl.pivot.library.collection.OrderedSetSubOrderedSetOperation;
+import org.eclipse.ocl.pivot.library.numeric.NumericMinusOperation;
+import org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsTypeOperation;
+import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.ocl.pivot.utilities.ValueUtil;
+import org.eclipse.ocl.pivot.values.CollectionValue;
+import org.eclipse.ocl.pivot.values.IntegerValue;
+import org.eclipse.ocl.pivot.values.InvalidValueException;
+import org.eclipse.ocl.pivot.values.OrderedSetValue;
+import org.eclipse.ocl.pivot.values.SequenceValue;
+import org.eclipse.ocl.pivot.values.SetValue;
+import org.eclipse.ocl.xtext.base.cs2as.tx.AbstractCS2ASTransformer;
+import org.eclipse.qvtd.pivot.qvtimperative.library.model.RootObjectsOperation;
+
+/**
+ * The classescs2as_qvtp_qvtcas transformation:
+ * <p>
+ * Construct with an evaluator
+ * <br>
+ * Populate each input model with {@link addRootObjects(String,List)}
+ * <br>
+ * {@link run()}
+ * <br>
+ * Extract each output model with {@link getRootObjects(String)}
+ */
+@SuppressWarnings("nls")
+public class classescs2as_qvtp_qvtcas extends AbstractCS2ASTransformer
+{
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull RootPackageId PACKid_$metamodel$ = IdManager.getRootPackageId("$metamodel$");
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NsURIPackageId PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0 = IdManager.getNsURIPackageId("http://cs2as/tests/example2/classes/1.0", null, ClassesPackage.eINSTANCE);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NsURIPackageId PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0 = IdManager.getNsURIPackageId("http://cs2as/tests/example2/classescs/1.0", null, ClassescsPackage.eINSTANCE);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NsURIPackageId PACKid_http_c_s_s_www_eclipse_org_s_emf_s_2002_s_Ecore = IdManager.getNsURIPackageId("http://www.eclipse.org/emf/2002/Ecore", null, EcorePackage.eINSTANCE);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NsURIPackageId PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTbaseLibrary = IdManager.getNsURIPackageId("http://www.eclipse.org/qvt/2015/QVTbaseLibrary", "qvtbaselib", null);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Class = PACKid_$metamodel$.getClassId("Class", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_ClassCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("ClassCS", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Class_0 = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0.getClassId("Class", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_EObject = PACKid_http_c_s_s_www_eclipse_org_s_emf_s_2002_s_Ecore.getClassId("EObject", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Model = PACKid_http_c_s_s_www_eclipse_org_s_qvt_s_2015_s_QVTbaseLibrary.getClassId("Model", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_OclElement = PACKid_$metamodel$.getClassId("OclElement", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Package = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0.getClassId("Package", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_PackageCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("PackageCS", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_PathElementCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("PathElementCS", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_PathNameCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("PathNameCS", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Root = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0.getClassId("Root", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_RootCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("RootCS", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Visitable = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0.getClassId("Visitable", 0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue INT_1 = ValueUtil.integerValueOf("1");
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId COL_CLSSid_ClassCS = TypeId.COLLECTION.getSpecializedId(CLSSid_ClassCS);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId COL_CLSSid_PackageCS = TypeId.COLLECTION.getSpecializedId(CLSSid_PackageCS);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_ClassCS = TypeId.ORDERED_SET.getSpecializedId(CLSSid_ClassCS);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_PackageCS = TypeId.ORDERED_SET.getSpecializedId(CLSSid_PackageCS);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_PathElementCS = TypeId.ORDERED_SET.getSpecializedId(CLSSid_PathElementCS);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SEQ_CLSSid_Class = TypeId.SEQUENCE.getSpecializedId(CLSSid_Class_0);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SEQ_CLSSid_Package = TypeId.SEQUENCE.getSpecializedId(CLSSid_Package);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_ClassCS = TypeId.SET.getSpecializedId(CLSSid_ClassCS);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_OclElement = TypeId.SET.getSpecializedId(CLSSid_OclElement);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_PackageCS = TypeId.SET.getSpecializedId(CLSSid_PackageCS);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_RootCS = TypeId.SET.getSpecializedId(CLSSid_RootCS);
+    
+    
+    private final ClassesLookupSolver lookupSolver = new ClassesLookupSolver(executor);
+    
+    public classescs2as_qvtp_qvtcas(final /*@NonNull*/ Executor executor) throws ReflectiveOperationException {
+        super(executor, new /*@NonNull*/ String[] {"leftCS", "rightAS"}, null, null, null);
+    }
+    
+    public boolean run() throws ReflectiveOperationException {
+        return MAP___root__() && invocationManager.flush();
+    }
+    
+    /**
+     * classes::Visitable::lookupPackage(segments : OrderedSet(classescs::PathElementCS)) : classes::Package[?]
+     * 
+     * 
+     * if segments->size() = 1
+     * then lookupPackage(segments->first())
+     * else
+     *   let
+     *     qualifierSegments : OrderedSet(classescs::PathElementCS) = segments->subOrderedSet(1,
+     *       segments->size() - 1)
+     *   in
+     *     let
+     *       qualifier : ::Package[?] = lookupPackage(qualifierSegments)
+     *     in qualifier?.lookupQualifiedPackage(segments->last())
+     * endif
+     */
+    public /*@NonInvalid*/ Package lookupPackage(final /*@NonInvalid*/ example2.classes.util.@org.eclipse.jdt.annotation.NonNull Visitable self_0, final /*@NonInvalid*/ List<PathElementCS> segments) {
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_segments = idResolver.createOrderedSetOfAll(ORD_CLSSid_PathElementCS, segments);
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue size = CollectionSizeOperation.INSTANCE.evaluate(BOXED_segments);
+        final /*@NonInvalid*/ boolean eq = size.equals(INT_1);
+        /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package symbol_1;
+        if (eq) {
+            final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathElementCS aPathElementCS = (PathElementCS)OrderedCollectionFirstOperation.INSTANCE.evaluate(BOXED_segments);
+            if (aPathElementCS == null) {
+                throw new InvalidValueException("Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::NamedElementCS::name\'");
+            }
+            final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name = aPathElementCS.getName();
+            ClassesLookupResult<Package> _lookupResult = lookupSolver._lookupPackage(self_0, name);
+            Package _lookupPackage = null;
+            if (_lookupResult.size() == 1) {
+                _lookupPackage = _lookupResult.getSingleResult();
+            } else {
+                handleLookupError(aPathElementCS,name);
+            };
+            symbol_1 = _lookupPackage;
+        }
+        else {
+            final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue diff = (IntegerValue)NumericMinusOperation.INSTANCE.evaluate(size, INT_1);
+            final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue qualifierSegments = OrderedSetSubOrderedSetOperation.INSTANCE.evaluate(BOXED_segments, INT_1, diff);
+            final List<PathElementCS> UNBOXED_qualifierSegments = qualifierSegments.asEcoreObjects(idResolver, PathElementCS.class);
+            assert UNBOXED_qualifierSegments != null;
+            final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package qualifier = this.lookupPackage(self_0, UNBOXED_qualifierSegments);
+            /*@Caught*/ /*@Nullable*/ Object CAUGHT_qualifier;
+            try {
+                CAUGHT_qualifier = qualifier;
+            }
+            catch (Exception e) {
+                CAUGHT_qualifier = ValueUtil.createInvalidValue(e);
+            }
+            final /*@NonInvalid*/ /*@NonNull*/ Object symbol_0 = CAUGHT_qualifier == null;
+            /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package safe_lookupQualifiedPackage_source;
+            if (symbol_0 == Boolean.TRUE) {
+                safe_lookupQualifiedPackage_source = null;
+            }
+            else {
+                final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathElementCS aPathElementCS_0 = (PathElementCS)OrderedCollectionLastOperation.INSTANCE.evaluate(BOXED_segments);
+                if (aPathElementCS_0 == null) {
+                    throw new InvalidValueException("Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::NamedElementCS::name\'");
+                }
+                final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name_0 = aPathElementCS_0.getName();
+                ClassesLookupResult<Package> _lookupResult_0 = lookupSolver._lookupQualifiedPackage(qualifier, name_0);
+                Package _lookupQualifiedPackage = null;
+                if (_lookupResult_0.size() == 1) {
+                    _lookupQualifiedPackage = _lookupResult_0.getSingleResult();
+                } else {
+                    handleLookupError(aPathElementCS_0,name_0);
+                };
+                safe_lookupQualifiedPackage_source = _lookupQualifiedPackage;
+            }
+            symbol_1 = safe_lookupQualifiedPackage_source;
+        }
+        return symbol_1;
+    }
+    
+    /**
+     * 
+     * map __root__ in classescs2as_qvtp_qvtcas {
+     * 
+     *   where ( |)
+     * {roots : Set(OclElement) = leftCS.rootObjects()
+     *   ;
+     * _'\u00ABchild-ClassCS\u00BB' : Set(classescs::ClassCS[*|1]) = roots->selectByKind(classescs::ClassCS)
+     *   ;
+     * _'\\u00ABjoin-ClassCS-0\\u00BB' : UniqueCollection(classescs::ClassCS[*|1]) = _'\u00ABchild-ClassCS\u00BB';
+     * _'\u00ABchild-PackageCS\u00BB' : Set(classescs::PackageCS[*|1]) = roots->selectByKind(classescs::PackageCS)
+     *   ;
+     * _'\\u00ABjoin-PackageCS-0\\u00BB' : UniqueCollection(classescs::PackageCS[*|1]) = _'\u00ABchild-PackageCS\u00BB';
+     * _'\\u00ABjoin-PackageCS-1\\u00BB' : UniqueCollection(classescs::PackageCS[*|1]) = _'\u00ABchild-PackageCS\u00BB';
+     * _'\u00ABchild-RootCS\u00BB' : Set(classescs::RootCS[*|1]) = roots->selectByKind(classescs::RootCS)
+     *   ;
+     * _'\\u00ABjoin-RootCS-0\\u00BB' : Set(classescs::RootCS[*|1]) = _'\u00ABchild-RootCS\u00BB';
+     *  |}
+     * for loop0 : classescs::RootCS in _'\\u00ABjoin-RootCS-0\\u00BB' {
+     * 
+     *     map _'classescs%RootCS%ownedPackages' {
+     * _'\\u00ABjoin-PackageCS-0\\u00BB' := _'\\u00ABjoin-PackageCS-0\\u00BB';
+     * _'\\u00ABjoin-PackageCS-1\\u00BB' := _'\\u00ABjoin-PackageCS-1\\u00BB';
+     * _'\\u00ABparent\\u00BB' := loop0;
+     * }}
+     *   for loop0 : classescs::PackageCS in _'\\u00ABjoin-PackageCS-1\\u00BB' {
+     * 
+     *     map _'classescs%PackageCS%ownedPackages' {
+     * _'\\u00ABjoin-PackageCS-0\\u00BB' := _'\\u00ABjoin-PackageCS-0\\u00BB';
+     * _'\\u00ABparent\\u00BB' := loop0;
+     * }}
+     *   for loop0 : classescs::PackageCS in _'\\u00ABjoin-PackageCS-0\\u00BB' {
+     * 
+     *     map _'classescs%PackageCS%ownedClasses' {
+     * _'\\u00ABjoin-ClassCS-0\\u00BB' := _'\\u00ABjoin-ClassCS-0\\u00BB';
+     * _'\\u00ABparent\\u00BB' := loop0;
+     * }}
+     *   for loop0 : classescs::ClassCS in _'\\u00ABjoin-ClassCS-0\\u00BB' {
+     * 
+     *     map cClassCS_2_Class {
+     * classCS := loop0;
+     * }}
+     *   for loop0 : classescs::PackageCS in _'\\u00ABjoin-PackageCS-0\\u00BB' {
+     * 
+     *     map cPackageCS_2_Package {
+     * packageCS := loop0;
+     * }}
+     *   for loop0 : classescs::RootCS in _'\\u00ABjoin-RootCS-0\\u00BB' {
+     * 
+     *     map cRootCS_2_Root {
+     * rootCS := loop0;
+     * }}
+     *   for loop0 : classescs::ClassCS in _'\\u00ABjoin-ClassCS-0\\u00BB' {
+     * 
+     *     map uClass_name {
+     * classCS := loop0;
+     * }}
+     *   for loop0 : classescs::PackageCS in _'\\u00ABjoin-PackageCS-0\\u00BB' {
+     * 
+     *     map _'uPackage_name\\nuPackage_ownedClasses\\nuPackage_ownedPackages' {
+     * packageCS := loop0;
+     * }}
+     *   for loop0 : classescs::RootCS in _'\\u00ABjoin-RootCS-0\\u00BB' {
+     * 
+     *     map uRoot_ownedPackages {
+     * rootCS := loop0;
+     * }}
+     *   for loop0 : classescs::ClassCS in _'\\u00ABjoin-ClassCS-0\\u00BB' {
+     * 
+     *     map uClass_superClass {
+     * classCS := loop0;
+     * }}
+     */
+    protected boolean MAP___root__() throws ReflectiveOperationException {
+        // predicates
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classescs_c_c_ClassCS_0 = idResolver.getClass(CLSSid_ClassCS, null);
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classescs_c_c_PackageCS_0 = idResolver.getClass(CLSSid_PackageCS, null);
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classescs_c_c_RootCS_0 = idResolver.getClass(CLSSid_RootCS, null);
+        // variable assignments
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue rootObjects = RootObjectsOperation.INSTANCE.evaluate(executor, SET_CLSSid_OclElement, models[0/*leftCS*/]);
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue selectByKind = (SetValue)CollectionSelectByKindOperation.INSTANCE.evaluate(executor, rootObjects, TYP_classescs_c_c_ClassCS_0);
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue selectByKind_0 = (SetValue)CollectionSelectByKindOperation.INSTANCE.evaluate(executor, rootObjects, TYP_classescs_c_c_PackageCS_0);
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue selectByKind_1 = (SetValue)CollectionSelectByKindOperation.INSTANCE.evaluate(executor, rootObjects, TYP_classescs_c_c_RootCS_0);
+        // connection variables
+        final SetValue./*@NonNull*/ Accumulator _92_u00ABjoin_m_ClassCS_m_0_92_u00BB_1 = (SetValue.Accumulator)ValueUtil.createCollectionAccumulatorValue(SET_CLSSid_ClassCS);
+        for (ClassCS iterator : ValueUtil.typedIterable(ClassCS.class, selectByKind)) {
+            _92_u00ABjoin_m_ClassCS_m_0_92_u00BB_1.add(iterator);
+        }
+        final SetValue./*@NonNull*/ Accumulator _92_u00ABjoin_m_PackageCS_m_0_92_u00BB_3 = (SetValue.Accumulator)ValueUtil.createCollectionAccumulatorValue(SET_CLSSid_PackageCS);
+        for (PackageCS iterator_0 : ValueUtil.typedIterable(PackageCS.class, selectByKind_0)) {
+            _92_u00ABjoin_m_PackageCS_m_0_92_u00BB_3.add(iterator_0);
+        }
+        final SetValue./*@NonNull*/ Accumulator _92_u00ABjoin_m_PackageCS_m_1_92_u00BB_1 = (SetValue.Accumulator)ValueUtil.createCollectionAccumulatorValue(SET_CLSSid_PackageCS);
+        for (PackageCS iterator_1 : ValueUtil.typedIterable(PackageCS.class, selectByKind_0)) {
+            _92_u00ABjoin_m_PackageCS_m_1_92_u00BB_1.add(iterator_1);
+        }
+        // mapping statements
+        for (RootCS loop0 : ValueUtil.typedIterable(RootCS.class, selectByKind_1)) {
+            if (loop0 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS symbol_0 = (RootCS)loop0;
+                MAP_classescs_37RootCS_37ownedPackages(_92_u00ABjoin_m_PackageCS_m_0_92_u00BB_3, _92_u00ABjoin_m_PackageCS_m_1_92_u00BB_1, symbol_0);
+            }
+        }
+        for (PackageCS loop0_0 : ValueUtil.typedIterable(PackageCS.class, _92_u00ABjoin_m_PackageCS_m_1_92_u00BB_1)) {
+            if (loop0_0 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS symbol_2 = (PackageCS)loop0_0;
+                MAP_classescs_37PackageCS_37ownedPackages(_92_u00ABjoin_m_PackageCS_m_0_92_u00BB_3, symbol_2);
+            }
+        }
+        for (PackageCS loop0_1 : ValueUtil.typedIterable(PackageCS.class, _92_u00ABjoin_m_PackageCS_m_0_92_u00BB_3)) {
+            if (loop0_1 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS symbol_4 = (PackageCS)loop0_1;
+                MAP_classescs_37PackageCS_37ownedClasses(_92_u00ABjoin_m_ClassCS_m_0_92_u00BB_1, symbol_4);
+            }
+        }
+        for (ClassCS loop0_2 : ValueUtil.typedIterable(ClassCS.class, _92_u00ABjoin_m_ClassCS_m_0_92_u00BB_1)) {
+            if (loop0_2 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS symbol_6 = (ClassCS)loop0_2;
+                if (symbol_6 != null) {
+                    MAP_cClassCS_2_Class(symbol_6);
+                }
+            }
+        }
+        for (PackageCS loop0_3 : ValueUtil.typedIterable(PackageCS.class, _92_u00ABjoin_m_PackageCS_m_0_92_u00BB_3)) {
+            if (loop0_3 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS symbol_8 = (PackageCS)loop0_3;
+                if (symbol_8 != null) {
+                    MAP_cPackageCS_2_Package(symbol_8);
+                }
+            }
+        }
+        for (RootCS loop0_4 : ValueUtil.typedIterable(RootCS.class, selectByKind_1)) {
+            if (loop0_4 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS symbol_10 = (RootCS)loop0_4;
+                if (symbol_10 != null) {
+                    MAP_cRootCS_2_Root(symbol_10);
+                }
+            }
+        }
+        for (ClassCS loop0_5 : ValueUtil.typedIterable(ClassCS.class, _92_u00ABjoin_m_ClassCS_m_0_92_u00BB_1)) {
+            if (loop0_5 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS symbol_12 = (ClassCS)loop0_5;
+                if (symbol_12 != null) {
+                    MAP_uClass_name(symbol_12);
+                }
+            }
+        }
+        for (PackageCS loop0_6 : ValueUtil.typedIterable(PackageCS.class, _92_u00ABjoin_m_PackageCS_m_0_92_u00BB_3)) {
+            if (loop0_6 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS symbol_14 = (PackageCS)loop0_6;
+                if (symbol_14 != null) {
+                    MAP_uPackage_name_92nuPackage_ownedClasses_92nuPackage_ownedPackages(symbol_14);
+                }
+            }
+        }
+        for (RootCS loop0_7 : ValueUtil.typedIterable(RootCS.class, selectByKind_1)) {
+            if (loop0_7 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS symbol_16 = (RootCS)loop0_7;
+                if (symbol_16 != null) {
+                    MAP_uRoot_ownedPackages(symbol_16);
+                }
+            }
+        }
+        for (ClassCS loop0_8 : ValueUtil.typedIterable(ClassCS.class, _92_u00ABjoin_m_ClassCS_m_0_92_u00BB_1)) {
+            if (loop0_8 != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS symbol_18 = (ClassCS)loop0_8;
+                if (symbol_18 != null) {
+                    MAP_uClass_superClass(symbol_18);
+                }
+            }
+        }
+        return true;
+    }
+    
+    /**
+     * 
+     * map cClassCS_2_Class in classescs2as_qvtp_qvtcas {
+     * leftCS (classCS : classescs::ClassCS[?];
+     *  |)
+     * { |}
+     * rightAS ( |)
+     * {realize class : classes::Class[1];
+     *  |}
+     * where ( |)
+     * { |
+     * classCS.ast := class;
+     * }
+     * 
+     */
+    protected boolean MAP_cClassCS_2_Class(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS classCS) throws ReflectiveOperationException {
+        // predicates
+        // creations
+        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Class symbol_0 = ClassesFactory.eINSTANCE.createClass();
+        assert symbol_0 != null;
+        models[1/*rightAS*/].add(symbol_0);
+        // property assignments
+        classCS.setAst(symbol_0);
+        return true;
+    }
+    
+    /**
+     * 
+     * map cPackageCS_2_Package in classescs2as_qvtp_qvtcas {
+     * leftCS (packageCS : classescs::PackageCS[?];
+     *  |)
+     * { |}
+     * rightAS ( |)
+     * {realize package : classes::Package[1];
+     *  |}
+     * where ( |)
+     * { |
+     * packageCS.ast := package;
+     * }
+     * 
+     */
+    protected boolean MAP_cPackageCS_2_Package(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS packageCS) throws ReflectiveOperationException {
+        // predicates
+        // creations
+        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package symbol_0 = ClassesFactory.eINSTANCE.createPackage();
+        assert symbol_0 != null;
+        models[1/*rightAS*/].add(symbol_0);
+        // property assignments
+        packageCS.setAst(symbol_0);
+        return true;
+    }
+    
+    /**
+     * 
+     * map cRootCS_2_Root in classescs2as_qvtp_qvtcas {
+     * leftCS (rootCS : classescs::RootCS[?];
+     *  |)
+     * { |}
+     * rightAS ( |)
+     * {realize root : classes::Root[1];
+     *  |}
+     * where ( |)
+     * { |
+     * rootCS.ast := root;
+     * }
+     * 
+     */
+    protected boolean MAP_cRootCS_2_Root(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS rootCS) throws ReflectiveOperationException {
+        // predicates
+        // creations
+        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Root root = ClassesFactory.eINSTANCE.createRoot();
+        assert root != null;
+        models[1/*rightAS*/].add(root);
+        // property assignments
+        rootCS.setAst(root);
+        return true;
+    }
+    
+    /**
+     * 
+     * map _'classescs%PackageCS%ownedClasses' in classescs2as_qvtp_qvtcas {
+     * 
+     *   leftCS (_'\\u00ABparent\\u00BB' : classescs::PackageCS[1];
+     *  |)
+     * { |}
+     * where (_'\\u00ABjoin-ClassCS-0\\u00BB' : UniqueCollection(classescs::ClassCS[*|1]);
+     *  |)
+     * {allChildren : OrderedSet(classescs::ClassCS) = _'\\u00ABparent\\u00BB'.ownedClasses->selectByKind(classescs::ClassCS)
+     *   ;
+     * _'\u00ABchild-ClassCS\u00BB' : OrderedSet(classescs::ClassCS[*|1]) = allChildren->selectByKind(classescs::ClassCS);
+     *  |
+     * _'\\u00ABjoin-ClassCS-0\\u00BB' += _'\u00ABchild-ClassCS\u00BB';
+     * }
+     * 
+     */
+    protected boolean MAP_classescs_37PackageCS_37ownedClasses(final CollectionValue./*@NonNull*/ Accumulator _92_u00ABjoin_m_ClassCS_m_0_92_u00BB, final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS _92_u00ABparent_92_u00BB) throws ReflectiveOperationException {
+        // predicates
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classescs_c_c_ClassCS_1 = idResolver.getClass(CLSSid_ClassCS, null);
+        // variable assignments
+        final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<ClassCS> ownedClasses = _92_u00ABparent_92_u00BB.getOwnedClasses();
+        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_ownedClasses = idResolver.createOrderedSetOfAll(ORD_CLSSid_ClassCS, ownedClasses);
+        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue selectByKind = (OrderedSetValue)CollectionSelectByKindOperation.INSTANCE.evaluate(executor, BOXED_ownedClasses, TYP_classescs_c_c_ClassCS_1);
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue selectByKind_0 = (OrderedSetValue)CollectionSelectByKindOperation.INSTANCE.evaluate(executor, selectByKind, TYP_classescs_c_c_ClassCS_1);
+        // connection assignments
+        for (ClassCS iterator : ValueUtil.typedIterable(ClassCS.class, selectByKind_0)) {
+            if (iterator instanceof ClassCS) {
+                _92_u00ABjoin_m_ClassCS_m_0_92_u00BB.add(iterator);
+            }
+        }
+        return true;
+    }
+    
+    /**
+     * 
+     * map _'classescs%PackageCS%ownedPackages' in classescs2as_qvtp_qvtcas {
+     * 
+     *   leftCS (_'\\u00ABparent\\u00BB' : classescs::PackageCS[1];
+     *  |)
+     * { |}
+     * where (_'\\u00ABjoin-PackageCS-0\\u00BB' : UniqueCollection(classescs::PackageCS[*|1]);
+     *  |)
+     * {allChildren : OrderedSet(classescs::PackageCS) = _'\\u00ABparent\\u00BB'.ownedPackages->selectByKind(classescs::PackageCS)
+     *   ;
+     * _'\u00ABchild-PackageCS\u00BB' : OrderedSet(classescs::PackageCS[*|1]) = allChildren->selectByKind(classescs::PackageCS)
+     *   ;
+     *  |
+     * _'\\u00ABjoin-PackageCS-0\\u00BB' += _'\u00ABchild-PackageCS\u00BB';
+     * }
+     * for aChild : classescs::PackageCS in allChildren {
+     * 
+     *     map _'classescs%PackageCS%ownedPackages' {
+     * _'\\u00ABjoin-PackageCS-0\\u00BB' := _'\\u00ABjoin-PackageCS-0\\u00BB';
+     * _'\\u00ABparent\\u00BB' := aChild;
+     * }}
+     */
+    protected boolean MAP_classescs_37PackageCS_37ownedPackages(final CollectionValue./*@NonNull*/ Accumulator _92_u00ABjoin_m_PackageCS_m_0_92_u00BB, final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS _92_u00ABparent_92_u00BB_0) throws ReflectiveOperationException {
+        // predicates
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classescs_c_c_PackageCS_1 = idResolver.getClass(CLSSid_PackageCS, null);
+        // variable assignments
+        final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<PackageCS> ownedPackages = _92_u00ABparent_92_u00BB_0.getOwnedPackages();
+        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_ownedPackages = idResolver.createOrderedSetOfAll(ORD_CLSSid_PackageCS, ownedPackages);
+        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue selectByKind = (OrderedSetValue)CollectionSelectByKindOperation.INSTANCE.evaluate(executor, BOXED_ownedPackages, TYP_classescs_c_c_PackageCS_1);
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue selectByKind_0 = (OrderedSetValue)CollectionSelectByKindOperation.INSTANCE.evaluate(executor, selectByKind, TYP_classescs_c_c_PackageCS_1);
+        // connection assignments
+        for (PackageCS iterator : ValueUtil.typedIterable(PackageCS.class, selectByKind_0)) {
+            if (iterator instanceof PackageCS) {
+                _92_u00ABjoin_m_PackageCS_m_0_92_u00BB.add(iterator);
+            }
+        }
+        // mapping statements
+        for (PackageCS aChild : ValueUtil.typedIterable(PackageCS.class, selectByKind)) {
+            if (aChild != null) {
+                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS symbol_0 = (PackageCS)aChild;
+                MAP_classescs_37PackageCS_37ownedPackages(_92_u00ABjoin_m_PackageCS_m_0_92_u00BB, symbol_0);
+            }
+        }
+        return true;
+    }
+    
+    /**
+     * 
+     * map _'classescs%RootCS%ownedPackages' in classescs2as_qvtp_qvtcas {
+     * 
+     *   leftCS (_'\\u00ABparent\\u00BB' : classescs::RootCS[1];
+     *  |)
+     * { |}
+     * where (_'\\u00ABjoin-PackageCS-1\\u00BB' : UniqueCollection(classescs::PackageCS[*|1]);
+     * _'\\u00ABjoin-PackageCS-0\\u00BB' : UniqueCollection(classescs::PackageCS[*|1]);
+     *  |)
+     * {allChildren : OrderedSet(classescs::PackageCS) = _'\\u00ABparent\\u00BB'.ownedPackages->selectByKind(classescs::PackageCS)
+     *   ;
+     * _'\u00ABchild-PackageCS\u00BB' : OrderedSet(classescs::PackageCS[*|1]) = allChildren->selectByKind(classescs::PackageCS);
+     *  |
+     * _'\\u00ABjoin-PackageCS-1\\u00BB' += _'\u00ABchild-PackageCS\u00BB';
+     * _'\\u00ABjoin-PackageCS-0\\u00BB' += _'\u00ABchild-PackageCS\u00BB';
+     * }
+     * 
+     */
+    protected boolean MAP_classescs_37RootCS_37ownedPackages(final CollectionValue./*@NonNull*/ Accumulator _92_u00ABjoin_m_PackageCS_m_0_92_u00BB_0, final CollectionValue./*@NonNull*/ Accumulator _92_u00ABjoin_m_PackageCS_m_1_92_u00BB, final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS _92_u00ABparent_92_u00BB_1) throws ReflectiveOperationException {
+        // predicates
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classescs_c_c_PackageCS_1 = idResolver.getClass(CLSSid_PackageCS, null);
+        // variable assignments
+        final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<PackageCS> ownedPackages = _92_u00ABparent_92_u00BB_1.getOwnedPackages();
+        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_ownedPackages = idResolver.createOrderedSetOfAll(ORD_CLSSid_PackageCS, ownedPackages);
+        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue selectByKind = (OrderedSetValue)CollectionSelectByKindOperation.INSTANCE.evaluate(executor, BOXED_ownedPackages, TYP_classescs_c_c_PackageCS_1);
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue selectByKind_0 = (OrderedSetValue)CollectionSelectByKindOperation.INSTANCE.evaluate(executor, selectByKind, TYP_classescs_c_c_PackageCS_1);
+        // connection assignments
+        for (PackageCS iterator : ValueUtil.typedIterable(PackageCS.class, selectByKind_0)) {
+            if (iterator instanceof PackageCS) {
+                _92_u00ABjoin_m_PackageCS_m_1_92_u00BB.add(iterator);
+            }
+        }
+        for (PackageCS iterator_0 : ValueUtil.typedIterable(PackageCS.class, selectByKind_0)) {
+            if (iterator_0 instanceof PackageCS) {
+                _92_u00ABjoin_m_PackageCS_m_0_92_u00BB_0.add(iterator_0);
+            }
+        }
+        return true;
+    }
+    
+    /**
+     * 
+     * map uClass_name in classescs2as_qvtp_qvtcas {
+     * 
+     *   leftCS (classCS : classescs::ClassCS[?];
+     *  |)
+     * { |}
+     * rightAS ( |)
+     * { |}
+     * where ( |)
+     * {ast : ecore::EObject[?] = classCS.ast;
+     * name : String[?] = classCS.name;
+     * aClass : classes::Class[1] = ast.oclAsType(classes::Class);
+     *  |
+     * aClass.name := name;
+     * }
+     * 
+     */
+    protected boolean MAP_uClass_name(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS classCS_0) throws ReflectiveOperationException {
+        // predicates
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Class_0 = idResolver.getClass(CLSSid_Class_0, null);
+        // variable assignments
+        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = classCS_0.getAst();
+        final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name = classCS_0.getName();
+        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Class oclAsType = ClassUtil.nonNullState((example2.classes.Class)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Class_0));
+        // property assignments
+        oclAsType.setName(name);
+        return true;
+    }
+    
+    /**
+     * 
+     * map uClass_superClass in classescs2as_qvtp_qvtcas {
+     * 
+     *   leftCS (classCS : classescs::ClassCS[?];
+     *  |)
+     * { |}
+     * rightAS ( |)
+     * { |}
+     * where ( |)
+     * {ast : ecore::EObject[?] = classCS.ast;
+     * extends : classescs::PathNameCS[?] = classCS.extends;
+     * aClass : classes::Class[1] = ast.oclAsType(classes::Class);
+     * _'=' : Boolean[1] = extends =
+     *   null;
+     * superClass : classes::Class[?] = if _'='
+     *   then null
+     *   else aClass.lookupClass(extends)
+     *   endif;
+     *  |
+     * aClass.superClass := superClass;
+     * }
+     * 
+     */
+    protected boolean MAP_uClass_superClass(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS classCS_1) throws ReflectiveOperationException {
+        // predicates
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Class_0 = idResolver.getClass(CLSSid_Class_0, null);
+        // variable assignments
+        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = classCS_1.getAst();
+        final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathNameCS symbol_0 = classCS_1.getExtends();
+        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Class oclAsType = ClassUtil.nonNullState((example2.classes.Class)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Class_0));
+        final /*@Thrown*/ boolean symbol_1 = symbol_0 == null;
+        /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Class symbol_4;
+        if (symbol_1) {
+            symbol_4 = null;
+        }
+        else {
+            if (symbol_0 == null) {
+                throw throwNull(classCS_1, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::PathNameCS::path\'");
+            }
+            final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<PathElementCS> segments_0 = symbol_0.getPath();
+            final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_segments_0 = idResolver.createOrderedSetOfAll(ORD_CLSSid_PathElementCS, segments_0);
+            final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue size = CollectionSizeOperation.INSTANCE.evaluate(BOXED_segments_0);
+            final /*@Thrown*/ boolean eq = size.equals(INT_1);
+            /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Class symbol_3;
+            if (eq) {
+                final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathElementCS aPathElementCS = (PathElementCS)OrderedCollectionFirstOperation.INSTANCE.evaluate(BOXED_segments_0);
+                if (aPathElementCS == null) {
+                    throw throwNull(classCS_1, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::NamedElementCS::name\'");
+                }
+                final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name = aPathElementCS.getName();
+                ClassesLookupResult<example2.classes.Class> _lookupResult = lookupSolver._lookupClass(oclAsType, name);
+                example2.classes.Class _lookupClass = null;
+                if (_lookupResult.size() == 1) {
+                    _lookupClass = _lookupResult.getSingleResult();
+                } else {
+                    handleLookupError(aPathElementCS,name);
+                };
+                symbol_3 = _lookupClass;
+            }
+            else {
+                final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue diff = (IntegerValue)NumericMinusOperation.INSTANCE.evaluate(size, INT_1);
+                final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue qualifierSegments = OrderedSetSubOrderedSetOperation.INSTANCE.evaluate(BOXED_segments_0, INT_1, diff);
+                final List<PathElementCS> UNBOXED_qualifierSegments = qualifierSegments.asEcoreObjects(idResolver, PathElementCS.class);
+                assert UNBOXED_qualifierSegments != null;
+                final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package qualifier = this.lookupPackage(oclAsType, UNBOXED_qualifierSegments);
+                /*@Caught*/ /*@Nullable*/ Object CAUGHT_qualifier;
+                try {
+                    CAUGHT_qualifier = qualifier;
+                }
+                catch (Exception e) {
+                    CAUGHT_qualifier = ValueUtil.createInvalidValue(e);
+                }
+                final /*@NonInvalid*/ /*@NonNull*/ Object symbol_2 = CAUGHT_qualifier == null;
+                /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Class safe_lookupQualifiedClass_source;
+                if (symbol_2 == Boolean.TRUE) {
+                    safe_lookupQualifiedClass_source = null;
+                }
+                else {
+                    final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathElementCS aPathElementCS_0 = (PathElementCS)OrderedCollectionLastOperation.INSTANCE.evaluate(BOXED_segments_0);
+                    if (aPathElementCS_0 == null) {
+                        throw throwNull(classCS_1, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::NamedElementCS::name\'");
+                    }
+                    final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name_0 = aPathElementCS_0.getName();
+                    ClassesLookupResult<example2.classes.Class> _lookupResult_0 = lookupSolver._lookupQualifiedClass(qualifier, name_0);
+                    example2.classes.Class _lookupQualifiedClass = null;
+                    if (_lookupResult_0.size() == 1) {
+                        _lookupQualifiedClass = _lookupResult_0.getSingleResult();
+                    } else {
+                        handleLookupError(aPathElementCS_0,name_0);
+                    };
+                    safe_lookupQualifiedClass_source = _lookupQualifiedClass;
+                }
+                symbol_3 = safe_lookupQualifiedClass_source;
+            }
+            symbol_4 = symbol_3;
+        }
+        // property assignments
+        oclAsType.setSuperClass(symbol_4);
+        return true;
+    }
+    
+    /**
+     * 
+     * map _'uPackage_name\\nuPackage_ownedClasses\\nuPackage_ownedPackages' in classescs2as_qvtp_qvtcas {
+     * 
+     *   leftCS (packageCS : classescs::PackageCS[?];
+     *  |)
+     * { |}
+     * rightAS ( |)
+     * { |}
+     * where ( |)
+     * {ast : ecore::EObject[?] = packageCS.ast;
+     * name : String[?] = packageCS.name;
+     * ownedPackages : OrderedSet(classescs::PackageCS) = packageCS.ownedPackages;
+     * ownedClasses : OrderedSet(classescs::ClassCS) = packageCS.ownedClasses;
+     * aPackage : classes::Package[1] = ast.oclAsType(classes::Package)
+     *   ;
+     * _'\\u00ABcollect\\u00BB' : Sequence(classes::Package) = ownedPackages->collect(_'1_' |
+     *     _'1_'.ast.oclAsType(classes::Package))
+     *   ;
+     * _'\\u00ABcollect\\u00BB1' : Sequence(classes::Class) = ownedClasses->collect(_'1_' |
+     *     _'1_'.ast.oclAsType(classes::Class));
+     *  |
+     * aPackage.name := name;
+     * aPackage.ownedClasses := _'\\u00ABcollect\\u00BB1';
+     * aPackage.ownedPackages := _'\\u00ABcollect\\u00BB';
+     * }
+     * 
+     */
+    protected boolean MAP_uPackage_name_92nuPackage_ownedClasses_92nuPackage_ownedPackages(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS packageCS_0) throws ReflectiveOperationException {
+        // predicates
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Package_0 = idResolver.getClass(CLSSid_Package, null);
+        // variable assignments
+        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = packageCS_0.getAst();
+        final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name = packageCS_0.getName();
+        final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<PackageCS> ownedPackages = packageCS_0.getOwnedPackages();
+        final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<ClassCS> ownedClasses = packageCS_0.getOwnedClasses();
+        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Package oclAsType = ClassUtil.nonNullState((Package)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Package_0));
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_ownedPackages = idResolver.createOrderedSetOfAll(ORD_CLSSid_PackageCS, ownedPackages);
+        /*@Thrown*/ SequenceValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = ValueUtil.createSequenceAccumulatorValue(SEQ_CLSSid_Package);
+        /*@Nullable*/ Iterator<?> ITERATOR__1 = BOXED_ownedPackages.iterator();
+        /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SequenceValue collect;
+        while (true) {
+            if (!ITERATOR__1.hasNext()) {
+                collect = accumulator;
+                break;
+            }
+            /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PackageCS _1 = (PackageCS)ITERATOR__1.next();
+            /**
+             * _'1_'.ast.oclAsType(classes::Package)
+             */
+            if (_1 == null) {
+                throw throwNull(packageCS_0, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::ElementCS::ast\'");
+            }
+            final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast_0 = _1.getAst();
+            final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Package oclAsType_0 = ClassUtil.nonNullState((Package)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast_0, TYP_classes_c_c_Package_0));
+            //
+            accumulator.add(oclAsType_0);
+        }
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_ownedClasses = idResolver.createOrderedSetOfAll(ORD_CLSSid_ClassCS, ownedClasses);
+        /*@Thrown*/ SequenceValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator_0 = ValueUtil.createSequenceAccumulatorValue(SEQ_CLSSid_Class);
+        /*@Nullable*/ Iterator<?> ITERATOR__1_0 = BOXED_ownedClasses.iterator();
+        /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SequenceValue collect_0;
+        while (true) {
+            if (!ITERATOR__1_0.hasNext()) {
+                collect_0 = accumulator_0;
+                break;
+            }
+            /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable ClassCS _1_0 = (ClassCS)ITERATOR__1_0.next();
+            /**
+             * _'1_'.ast.oclAsType(classes::Class)
+             */
+            final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Class_0 = idResolver.getClass(CLSSid_Class_0, null);
+            if (_1_0 == null) {
+                throw throwNull(packageCS_0, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::ElementCS::ast\'");
+            }
+            final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast_1 = _1_0.getAst();
+            final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Class oclAsType_1 = ClassUtil.nonNullState((example2.classes.Class)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast_1, TYP_classes_c_c_Class_0));
+            //
+            accumulator_0.add(oclAsType_1);
+        }
+        // property assignments
+        oclAsType.setName(name);
+        final /*@NonInvalid*/ java.util.@org.eclipse.jdt.annotation.NonNull List<example2.classes.Class> ECORE_collect_0 = ((IdResolver.IdResolverExtension)idResolver).ecoreValueOfAll(example2.classes.Class.class, collect_0);
+        oclAsType.getOwnedClasses().addAll(ECORE_collect_0);
+        final /*@NonInvalid*/ java.util.@org.eclipse.jdt.annotation.NonNull List<Package> ECORE_collect = ((IdResolver.IdResolverExtension)idResolver).ecoreValueOfAll(Package.class, collect);
+        oclAsType.getOwnedPackages().addAll(ECORE_collect);
+        return true;
+    }
+    
+    /**
+     * 
+     * map uRoot_ownedPackages in classescs2as_qvtp_qvtcas {
+     * 
+     *   leftCS (rootCS : classescs::RootCS[?];
+     *  |)
+     * { |}
+     * rightAS ( |)
+     * { |}
+     * where ( |)
+     * {ast : ecore::EObject[?] = rootCS.ast;
+     * ownedPackages : OrderedSet(classescs::PackageCS) = rootCS.ownedPackages;
+     * aRoot : classes::Root[1] = ast.oclAsType(classes::Root)
+     *   ;
+     * _'\\u00ABcollect\\u00BB' : Sequence(classes::Package) = ownedPackages->collect(_'1_' |
+     *     _'1_'.ast.oclAsType(classes::Package));
+     *  |
+     * aRoot.ownedPackages := _'\\u00ABcollect\\u00BB';
+     * }
+     * 
+     */
+    protected boolean MAP_uRoot_ownedPackages(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS rootCS_0) throws ReflectiveOperationException {
+        // predicates
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Root_0 = idResolver.getClass(CLSSid_Root, null);
+        // variable assignments
+        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = rootCS_0.getAst();
+        final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<PackageCS> ownedPackages = rootCS_0.getOwnedPackages();
+        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Root oclAsType = ClassUtil.nonNullState((Root)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Root_0));
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_ownedPackages = idResolver.createOrderedSetOfAll(ORD_CLSSid_PackageCS, ownedPackages);
+        /*@Thrown*/ SequenceValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = ValueUtil.createSequenceAccumulatorValue(SEQ_CLSSid_Package);
+        /*@Nullable*/ Iterator<?> ITERATOR__1 = BOXED_ownedPackages.iterator();
+        /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SequenceValue collect;
+        while (true) {
+            if (!ITERATOR__1.hasNext()) {
+                collect = accumulator;
+                break;
+            }
+            /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PackageCS _1 = (PackageCS)ITERATOR__1.next();
+            /**
+             * _'1_'.ast.oclAsType(classes::Package)
+             */
+            final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Package_0 = idResolver.getClass(CLSSid_Package, null);
+            if (_1 == null) {
+                throw throwNull(rootCS_0, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::ElementCS::ast\'");
+            }
+            final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast_0 = _1.getAst();
+            final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Package oclAsType_0 = ClassUtil.nonNullState((Package)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast_0, TYP_classes_c_c_Package_0));
+            //
+            accumulator.add(oclAsType_0);
+        }
+        // property assignments
+        final /*@NonInvalid*/ java.util.@org.eclipse.jdt.annotation.NonNull List<Package> ECORE_collect = ((IdResolver.IdResolverExtension)idResolver).ecoreValueOfAll(Package.class, collect);
+        oclAsType.getOwnedPackages().addAll(ECORE_collect);
+        return true;
+    }
+}
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtias/classescs2as_qvtp_qvtias.java b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtias/classescs2as_qvtp_qvtias.java
deleted file mode 100644
index 259f976..0000000
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtias/classescs2as_qvtp_qvtias.java
+++ /dev/null
@@ -1,721 +0,0 @@
-/*******************************************************************************
- * «codeGenHelper.getCopyright(' * ')»
- *
- * This code is 100% auto-generated
- * using: org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerImpl$CS2ASJavaCodeGenerator
- *
- * Do not edit it.
- ********************************************************************************/
-
-package cg._classescs2as_qvtp_qvtias;
-
-import example2.classes.ClassesFactory;
-import example2.classes.ClassesPackage;
-import example2.classes.Package;
-import example2.classes.Root;
-import example2.classes.lookup.util.ClassesLookupResult;
-import example2.classes.lookup.util.ClassesLookupSolver;
-import example2.classescs.ClassCS;
-import example2.classescs.ClassescsPackage;
-import example2.classescs.PackageCS;
-import example2.classescs.PathElementCS;
-import example2.classescs.RootCS;
-import java.util.Iterator;
-import java.util.List;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.ocl.pivot.evaluation.Executor;
-import org.eclipse.ocl.pivot.ids.ClassId;
-import org.eclipse.ocl.pivot.ids.IdManager;
-import org.eclipse.ocl.pivot.ids.IdResolver;
-import org.eclipse.ocl.pivot.ids.TypeId;
-import org.eclipse.ocl.pivot.library.classifier.ClassifierAllInstancesOperation;
-import org.eclipse.ocl.pivot.library.collection.CollectionSizeOperation;
-import org.eclipse.ocl.pivot.library.collection.OrderedCollectionFirstOperation;
-import org.eclipse.ocl.pivot.library.collection.OrderedCollectionLastOperation;
-import org.eclipse.ocl.pivot.library.collection.OrderedSetSubOrderedSetOperation;
-import org.eclipse.ocl.pivot.library.numeric.NumericMinusOperation;
-import org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsTypeOperation;
-import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.ocl.pivot.utilities.ValueUtil;
-import org.eclipse.ocl.pivot.values.IntegerValue;
-import org.eclipse.ocl.pivot.values.InvalidValueException;
-import org.eclipse.ocl.pivot.values.SequenceValue;
-import org.eclipse.ocl.xtext.base.cs2as.tx.AbstractCS2ASTransformer;
-
-/**
- * The classescs2as_qvtp_qvtias transformation:
- * <p>
- * Construct with an evaluator
- * <br>
- * Populate each input model with {@link addRootObjects(String,List)}
- * <br>
- * {@link run()}
- * <br>
- * Extract each output model with {@link getRootObjects(String)}
- */
-@SuppressWarnings("nls")
-public class classescs2as_qvtp_qvtias extends AbstractCS2ASTransformer
-{
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull RootPackageId PACKid_$metamodel$ = IdManager.getRootPackageId("$metamodel$");
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NsURIPackageId PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0 = IdManager.getNsURIPackageId("http://cs2as/tests/example2/classes/1.0", null, ClassesPackage.eINSTANCE);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NsURIPackageId PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0 = IdManager.getNsURIPackageId("http://cs2as/tests/example2/classescs/1.0", null, ClassescsPackage.eINSTANCE);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NsURIPackageId PACKid_http_c_s_s_www_eclipse_org_s_emf_s_2002_s_Ecore = IdManager.getNsURIPackageId("http://www.eclipse.org/emf/2002/Ecore", null, EcorePackage.eINSTANCE);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Class = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0.getClassId("Class", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_ClassCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("ClassCS", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Class_0 = PACKid_$metamodel$.getClassId("Class", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_EObject = PACKid_http_c_s_s_www_eclipse_org_s_emf_s_2002_s_Ecore.getClassId("EObject", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Package = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0.getClassId("Package", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_PackageCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("PackageCS", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_PathElementCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("PathElementCS", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_PathNameCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("PathNameCS", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Root = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0.getClassId("Root", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_RootCS = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classescs_s_1_0.getClassId("RootCS", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Visitable = PACKid_http_c_s_s_cs2as_s_tests_s_example2_s_classes_s_1_0.getClassId("Visitable", 0);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue INT_1 = ValueUtil.integerValueOf("1");
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_ClassCS = TypeId.ORDERED_SET.getSpecializedId(CLSSid_ClassCS);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_PackageCS = TypeId.ORDERED_SET.getSpecializedId(CLSSid_PackageCS);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_PathElementCS = TypeId.ORDERED_SET.getSpecializedId(CLSSid_PathElementCS);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SEQ_CLSSid_Class = TypeId.SEQUENCE.getSpecializedId(CLSSid_Class);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SEQ_CLSSid_Package = TypeId.SEQUENCE.getSpecializedId(CLSSid_Package);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_ClassCS = TypeId.SET.getSpecializedId(CLSSid_ClassCS);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_PackageCS = TypeId.SET.getSpecializedId(CLSSid_PackageCS);
-    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_RootCS = TypeId.SET.getSpecializedId(CLSSid_RootCS);
-    
-    /*
-     * Array of the ClassIds of each class for which allInstances() may be invoked. Array index is the ClassIndex.
-     */
-    private static final /*@NonNull*/ ClassId[] classIndex2classId = new /*@NonNull*/ ClassId[]{
-        CLSSid_ClassCS,                 // 0 => ClassCS
-        CLSSid_PackageCS,               // 1 => PackageCS
-        CLSSid_RootCS                   // 2 => RootCS
-    };
-    
-    /*
-     * Mapping from each ClassIndex to all the ClassIndexes to which an object of the outer index
-     * may contribute results to an allInstances() invocation.
-     * Non trivial inner arrays arise when one ClassId is a derivation of another and so an
-     * instance of the derived classId contributes to derived and inherited ClassIndexes.
-     */
-    private final static int /*@NonNull*/ [] /*@NonNull*/ [] classIndex2allClassIndexes = new int /*@NonNull*/ [] /*@NonNull*/ [] {
-        {0},                    // 0 : ClassCS -> {ClassCS}
-        {1},                    // 1 : PackageCS -> {PackageCS}
-        {2}                     // 2 : RootCS -> {RootCS}
-    };
-    
-    private final ClassesLookupSolver lookupSolver = new ClassesLookupSolver(executor);
-    
-    public classescs2as_qvtp_qvtias(final /*@NonNull*/ Executor executor) throws ReflectiveOperationException {
-        super(executor, new /*@NonNull*/ String[] {"leftCS", "rightAS"}, null, classIndex2classId, classIndex2allClassIndexes);
-    }
-    
-    public boolean run() throws ReflectiveOperationException {
-        return MAP___root__() && invocationManager.flush();
-    }
-    
-    /**
-     * classes::Visitable::lookupPackage(segments : OrderedSet(classescs::PathElementCS)) : classes::Package[?]
-     * 
-     * 
-     * if segments->size() = 1
-     * then lookupPackage(segments->first())
-     * else
-     *   let
-     *     qualifierSegments : OrderedSet(classescs::PathElementCS) = segments->subOrderedSet(1,
-     *       segments->size() - 1)
-     *   in
-     *     let
-     *       qualifier : ::Package[?] = lookupPackage(qualifierSegments)
-     *     in qualifier?.lookupQualifiedPackage(segments->last())
-     * endif
-     */
-    public /*@NonInvalid*/ Package lookupPackage(final /*@NonInvalid*/ example2.classes.util.@org.eclipse.jdt.annotation.NonNull Visitable self_0, final /*@NonInvalid*/ List<PathElementCS> segments) {
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_segments = idResolver.createOrderedSetOfAll(ORD_CLSSid_PathElementCS, segments);
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue size = CollectionSizeOperation.INSTANCE.evaluate(BOXED_segments);
-        final /*@NonInvalid*/ boolean eq = size.equals(INT_1);
-        /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package symbol_1;
-        if (eq) {
-            final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathElementCS aPathElementCS = (PathElementCS)OrderedCollectionFirstOperation.INSTANCE.evaluate(BOXED_segments);
-            if (aPathElementCS == null) {
-                throw new InvalidValueException("Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::NamedElementCS::name\'");
-            }
-            final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name = aPathElementCS.getName();
-            ClassesLookupResult<Package> _lookupResult = lookupSolver._lookupPackage(self_0, name);
-            Package _lookupPackage = null;
-            if (_lookupResult.size() == 1) {
-                _lookupPackage = _lookupResult.getSingleResult();
-            } else {
-                handleLookupError(aPathElementCS,name);
-            };
-            symbol_1 = _lookupPackage;
-        }
-        else {
-            final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue diff = (IntegerValue)NumericMinusOperation.INSTANCE.evaluate(size, INT_1);
-            final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue qualifierSegments = OrderedSetSubOrderedSetOperation.INSTANCE.evaluate(BOXED_segments, INT_1, diff);
-            final List<PathElementCS> UNBOXED_qualifierSegments = qualifierSegments.asEcoreObjects(idResolver, PathElementCS.class);
-            assert UNBOXED_qualifierSegments != null;
-            final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package qualifier = this.lookupPackage(self_0, UNBOXED_qualifierSegments);
-            /*@Caught*/ /*@Nullable*/ Object CAUGHT_qualifier;
-            try {
-                CAUGHT_qualifier = qualifier;
-            }
-            catch (Exception e) {
-                CAUGHT_qualifier = ValueUtil.createInvalidValue(e);
-            }
-            final /*@NonInvalid*/ /*@NonNull*/ Object symbol_0 = CAUGHT_qualifier == null;
-            /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package safe_lookupQualifiedPackage_source;
-            if (symbol_0 == Boolean.TRUE) {
-                safe_lookupQualifiedPackage_source = null;
-            }
-            else {
-                final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathElementCS aPathElementCS_0 = (PathElementCS)OrderedCollectionLastOperation.INSTANCE.evaluate(BOXED_segments);
-                if (aPathElementCS_0 == null) {
-                    throw new InvalidValueException("Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::NamedElementCS::name\'");
-                }
-                final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name_0 = aPathElementCS_0.getName();
-                ClassesLookupResult<Package> _lookupResult_0 = lookupSolver._lookupQualifiedPackage(qualifier, name_0);
-                Package _lookupQualifiedPackage = null;
-                if (_lookupResult_0.size() == 1) {
-                    _lookupQualifiedPackage = _lookupResult_0.getSingleResult();
-                } else {
-                    handleLookupError(aPathElementCS_0,name_0);
-                };
-                safe_lookupQualifiedPackage_source = _lookupQualifiedPackage;
-            }
-            symbol_1 = safe_lookupQualifiedPackage_source;
-        }
-        return symbol_1;
-    }
-    
-    /**
-     * 
-     * map cClassCS_2_Class in classescs2as_qvtp_qvtias {
-     * leftCS (classCS : classescs::ClassCS[1];
-     *  |)
-     * { |}
-     * rightAS ( |)
-     * {realize class : classes::Class[1];
-     *  |}
-     * where ( |)
-     * { |
-     * classCS.ast := class;
-     * }
-     * 
-     */
-    protected boolean MAP_cClassCS_2_Class(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS classCS) throws ReflectiveOperationException {
-        // predicates
-        // creations
-        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Class symbol_0 = ClassesFactory.eINSTANCE.createClass();
-        assert symbol_0 != null;
-        models[1/*rightAS*/].add(symbol_0);
-        // property assignments
-        classCS.setAst(symbol_0);
-        return true;
-    }
-    
-    /**
-     * 
-     * map cPackageCS_2_Package in classescs2as_qvtp_qvtias {
-     * leftCS (packageCS : classescs::PackageCS[1];
-     *  |)
-     * { |}
-     * rightAS ( |)
-     * {realize package : classes::Package[1];
-     *  |}
-     * where ( |)
-     * { |
-     * packageCS.ast := package;
-     * }
-     * 
-     */
-    protected boolean MAP_cPackageCS_2_Package(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS packageCS) throws ReflectiveOperationException {
-        // predicates
-        // creations
-        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package symbol_0 = ClassesFactory.eINSTANCE.createPackage();
-        assert symbol_0 != null;
-        models[1/*rightAS*/].add(symbol_0);
-        // property assignments
-        packageCS.setAst(symbol_0);
-        return true;
-    }
-    
-    /**
-     * 
-     * map cRootCS_2_Root in classescs2as_qvtp_qvtias {
-     * leftCS (rootCS : classescs::RootCS[1];
-     *  |)
-     * { |}
-     * rightAS ( |)
-     * {realize root : classes::Root[1];
-     *  |}
-     * where ( |)
-     * { |
-     * rootCS.ast := root;
-     * }
-     * 
-     */
-    protected boolean MAP_cRootCS_2_Root(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS rootCS) throws ReflectiveOperationException {
-        // predicates
-        // creations
-        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Root root = ClassesFactory.eINSTANCE.createRoot();
-        assert root != null;
-        models[1/*rightAS*/].add(root);
-        // property assignments
-        rootCS.setAst(root);
-        return true;
-    }
-    
-    /**
-     * 
-     * map uClass_name in classescs2as_qvtp_qvtias {
-     * 
-     *   leftCS (classCS : classescs::ClassCS[1];
-     *  |)
-     * { |}
-     * rightAS ( |)
-     * { |}
-     * where ( |)
-     * {_0 : classes::Class[1];
-     * _1 : String[?];
-     *  |
-     * _0 := classCS.ast.oclAsType(classes::Class);
-     * _1 := name;
-     * _0.name := _1;
-     * }
-     * 
-     */
-    protected boolean MAP_uClass_name(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS classCS_0) throws ReflectiveOperationException {
-        // predicates
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Class_0 = idResolver.getClass(CLSSid_Class, null);
-        // variable assignments
-        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = classCS_0.getAst();
-        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Class oclAsType = ClassUtil.nonNullState((example2.classes.Class)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Class_0));
-        final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name = classCS_0.getName();
-        // property assignments
-        oclAsType.setName(name);
-        return true;
-    }
-    
-    /**
-     * 
-     * map uClass_superClass in classescs2as_qvtp_qvtias {
-     * 
-     *   leftCS (classCS : classescs::ClassCS[1];
-     *  |)
-     * { |}
-     * rightAS ( |)
-     * { |}
-     * where ( |)
-     * {_0 : classes::Class[1];
-     * _1 : classes::Class[?];
-     *  |
-     * _0 := classCS.ast.oclAsType(classes::Class)
-     *   ;
-     * _1 := if extends = null
-     *   then null
-     *   else ast.oclAsType(classes::Class).lookupClass(extends)
-     *   endif;
-     * _0.superClass := _1;
-     * }
-     * 
-     */
-    protected boolean MAP_uClass_superClass(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS classCS_1) throws ReflectiveOperationException {
-        // predicates
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Class_0 = idResolver.getClass(CLSSid_Class, null);
-        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = classCS_1.getAst();
-        // variable assignments
-        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Class oclAsType = ClassUtil.nonNullState((example2.classes.Class)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Class_0));
-        final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathNameCS symbol_0 = classCS_1.getExtends();
-        final /*@Thrown*/ boolean eq = symbol_0 == null;
-        /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Class symbol_3;
-        if (eq) {
-            symbol_3 = null;
-        }
-        else {
-            final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Class self_1 = ClassUtil.nonNullState((example2.classes.Class)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Class_0));
-            final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathNameCS aPathNameCS = classCS_1.getExtends();
-            if (aPathNameCS == null) {
-                throw throwNull(classCS_1, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::PathNameCS::path\'");
-            }
-            final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<PathElementCS> segments_0 = aPathNameCS.getPath();
-            final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_segments_0 = idResolver.createOrderedSetOfAll(ORD_CLSSid_PathElementCS, segments_0);
-            final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue size = CollectionSizeOperation.INSTANCE.evaluate(BOXED_segments_0);
-            final /*@Thrown*/ boolean eq_0 = size.equals(INT_1);
-            /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Class symbol_2;
-            if (eq_0) {
-                final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathElementCS aPathElementCS = (PathElementCS)OrderedCollectionFirstOperation.INSTANCE.evaluate(BOXED_segments_0);
-                if (aPathElementCS == null) {
-                    throw throwNull(classCS_1, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::NamedElementCS::name\'");
-                }
-                final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name = aPathElementCS.getName();
-                ClassesLookupResult<example2.classes.Class> _lookupResult = lookupSolver._lookupClass(self_1, name);
-                example2.classes.Class _lookupClass = null;
-                if (_lookupResult.size() == 1) {
-                    _lookupClass = _lookupResult.getSingleResult();
-                } else {
-                    handleLookupError(aPathElementCS,name);
-                };
-                symbol_2 = _lookupClass;
-            }
-            else {
-                final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull IntegerValue diff = (IntegerValue)NumericMinusOperation.INSTANCE.evaluate(size, INT_1);
-                final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue qualifierSegments = OrderedSetSubOrderedSetOperation.INSTANCE.evaluate(BOXED_segments_0, INT_1, diff);
-                final List<PathElementCS> UNBOXED_qualifierSegments = qualifierSegments.asEcoreObjects(idResolver, PathElementCS.class);
-                assert UNBOXED_qualifierSegments != null;
-                final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Package qualifier = this.lookupPackage(self_1, UNBOXED_qualifierSegments);
-                /*@Caught*/ /*@Nullable*/ Object CAUGHT_qualifier;
-                try {
-                    CAUGHT_qualifier = qualifier;
-                }
-                catch (Exception e) {
-                    CAUGHT_qualifier = ValueUtil.createInvalidValue(e);
-                }
-                final /*@NonInvalid*/ /*@NonNull*/ Object symbol_1 = CAUGHT_qualifier == null;
-                /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.Nullable Class safe_lookupQualifiedClass_source;
-                if (symbol_1 == Boolean.TRUE) {
-                    safe_lookupQualifiedClass_source = null;
-                }
-                else {
-                    final /*@Thrown*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PathElementCS aPathElementCS_0 = (PathElementCS)OrderedCollectionLastOperation.INSTANCE.evaluate(BOXED_segments_0);
-                    if (aPathElementCS_0 == null) {
-                        throw throwNull(classCS_1, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::NamedElementCS::name\'");
-                    }
-                    final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name_0 = aPathElementCS_0.getName();
-                    ClassesLookupResult<example2.classes.Class> _lookupResult_0 = lookupSolver._lookupQualifiedClass(qualifier, name_0);
-                    example2.classes.Class _lookupQualifiedClass = null;
-                    if (_lookupResult_0.size() == 1) {
-                        _lookupQualifiedClass = _lookupResult_0.getSingleResult();
-                    } else {
-                        handleLookupError(aPathElementCS_0,name_0);
-                    };
-                    safe_lookupQualifiedClass_source = _lookupQualifiedClass;
-                }
-                symbol_2 = safe_lookupQualifiedClass_source;
-            }
-            symbol_3 = symbol_2;
-        }
-        // property assignments
-        oclAsType.setSuperClass(symbol_3);
-        return true;
-    }
-    
-    /**
-     * 
-     * map uPackage_name in classescs2as_qvtp_qvtias {
-     * 
-     *   leftCS (packageCS : classescs::PackageCS[1];
-     *  |)
-     * { |}
-     * rightAS ( |)
-     * { |}
-     * where ( |)
-     * {_0 : classes::Package[1];
-     * _1 : String[?];
-     *  |
-     * _0 := packageCS.ast.oclAsType(classes::Package);
-     * _1 := name;
-     * _0.name := _1;
-     * }
-     * 
-     */
-    protected boolean MAP_uPackage_name(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS packageCS_0) throws ReflectiveOperationException {
-        // predicates
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Package_0 = idResolver.getClass(CLSSid_Package, null);
-        // variable assignments
-        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = packageCS_0.getAst();
-        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Package oclAsType = ClassUtil.nonNullState((Package)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Package_0));
-        final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable String name = packageCS_0.getName();
-        // property assignments
-        oclAsType.setName(name);
-        return true;
-    }
-    
-    /**
-     * 
-     * map uPackage_ownedClasses in classescs2as_qvtp_qvtias {
-     * 
-     *   leftCS (packageCS : classescs::PackageCS[1];
-     *  |)
-     * { |}
-     * rightAS ( |)
-     * { |}
-     * where ( |)
-     * {_0 : classes::Package[1];
-     * _1 : Sequence(classes::Class);
-     *  |
-     * _0 := packageCS.ast.oclAsType(classes::Package)
-     *   ;
-     * _1 := ownedClasses.ast.oclAsType(classes::Class);
-     * _0.ownedClasses := _1;
-     * }
-     * 
-     */
-    protected boolean MAP_uPackage_ownedClasses(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS packageCS_1) throws ReflectiveOperationException {
-        // predicates
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Package_0 = idResolver.getClass(CLSSid_Package, null);
-        // variable assignments
-        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = packageCS_1.getAst();
-        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Package oclAsType = ClassUtil.nonNullState((Package)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Package_0));
-        final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<ClassCS> ownedClasses = packageCS_1.getOwnedClasses();
-        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_ownedClasses = idResolver.createOrderedSetOfAll(ORD_CLSSid_ClassCS, ownedClasses);
-        /*@Thrown*/ SequenceValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = ValueUtil.createSequenceAccumulatorValue(SEQ_CLSSid_Class);
-        /*@Nullable*/ Iterator<?> ITERATOR__1 = BOXED_ownedClasses.iterator();
-        /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SequenceValue collect;
-        while (true) {
-            if (!ITERATOR__1.hasNext()) {
-                collect = accumulator;
-                break;
-            }
-            /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable ClassCS _1 = (ClassCS)ITERATOR__1.next();
-            /**
-             * ast.oclAsType(classes::Class)
-             */
-            final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Class_0 = idResolver.getClass(CLSSid_Class, null);
-            if (_1 == null) {
-                throw throwNull(packageCS_1, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::ElementCS::ast\'");
-            }
-            final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast_0 = _1.getAst();
-            final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Class oclAsType_0 = ClassUtil.nonNullState((example2.classes.Class)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast_0, TYP_classes_c_c_Class_0));
-            //
-            accumulator.add(oclAsType_0);
-        }
-        // property assignments
-        final /*@NonInvalid*/ java.util.@org.eclipse.jdt.annotation.NonNull List<example2.classes.Class> ECORE_collect = ((IdResolver.IdResolverExtension)idResolver).ecoreValueOfAll(example2.classes.Class.class, collect);
-        oclAsType.getOwnedClasses().addAll(ECORE_collect);
-        return true;
-    }
-    
-    /**
-     * 
-     * map uPackage_ownedPackages in classescs2as_qvtp_qvtias {
-     * 
-     *   leftCS (packageCS : classescs::PackageCS[1];
-     *  |)
-     * { |}
-     * rightAS ( |)
-     * { |}
-     * where ( |)
-     * {_0 : classes::Package[1];
-     * _1 : Sequence(classes::Package);
-     *  |
-     * _0 := packageCS.ast.oclAsType(classes::Package)
-     *   ;
-     * _1 := ownedPackages.ast.oclAsType(classes::Package);
-     * _0.ownedPackages := _1;
-     * }
-     * 
-     */
-    protected boolean MAP_uPackage_ownedPackages(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS packageCS_2) throws ReflectiveOperationException {
-        // predicates
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Package_0 = idResolver.getClass(CLSSid_Package, null);
-        // variable assignments
-        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = packageCS_2.getAst();
-        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Package oclAsType = ClassUtil.nonNullState((Package)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Package_0));
-        final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<PackageCS> ownedPackages = packageCS_2.getOwnedPackages();
-        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_ownedPackages = idResolver.createOrderedSetOfAll(ORD_CLSSid_PackageCS, ownedPackages);
-        /*@Thrown*/ SequenceValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = ValueUtil.createSequenceAccumulatorValue(SEQ_CLSSid_Package);
-        /*@Nullable*/ Iterator<?> ITERATOR__1 = BOXED_ownedPackages.iterator();
-        /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SequenceValue collect;
-        while (true) {
-            if (!ITERATOR__1.hasNext()) {
-                collect = accumulator;
-                break;
-            }
-            /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PackageCS _1 = (PackageCS)ITERATOR__1.next();
-            /**
-             * ast.oclAsType(classes::Package)
-             */
-            if (_1 == null) {
-                throw throwNull(packageCS_2, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::ElementCS::ast\'");
-            }
-            final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast_0 = _1.getAst();
-            final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Package oclAsType_0 = ClassUtil.nonNullState((Package)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast_0, TYP_classes_c_c_Package_0));
-            //
-            accumulator.add(oclAsType_0);
-        }
-        // property assignments
-        final /*@NonInvalid*/ java.util.@org.eclipse.jdt.annotation.NonNull List<Package> ECORE_collect = ((IdResolver.IdResolverExtension)idResolver).ecoreValueOfAll(Package.class, collect);
-        oclAsType.getOwnedPackages().addAll(ECORE_collect);
-        return true;
-    }
-    
-    /**
-     * 
-     * map uRoot_ownedPackages in classescs2as_qvtp_qvtias {
-     * 
-     *   leftCS (rootCS : classescs::RootCS[1];
-     *  |)
-     * { |}
-     * rightAS ( |)
-     * { |}
-     * where ( |)
-     * {_0 : classes::Root[1];
-     * _1 : Sequence(classes::Package);
-     *  |
-     * _0 := rootCS.ast.oclAsType(classes::Root)
-     *   ;
-     * _1 := ownedPackages.ast.oclAsType(classes::Package);
-     * _0.ownedPackages := _1;
-     * }
-     * 
-     */
-    protected boolean MAP_uRoot_ownedPackages(final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS rootCS_0) throws ReflectiveOperationException {
-        // predicates
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Root_0 = idResolver.getClass(CLSSid_Root, null);
-        // variable assignments
-        final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast = rootCS_0.getAst();
-        final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Root oclAsType = ClassUtil.nonNullState((Root)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast, TYP_classes_c_c_Root_0));
-        final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<PackageCS> ownedPackages = rootCS_0.getOwnedPackages();
-        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull OrderedSetValue BOXED_ownedPackages = idResolver.createOrderedSetOfAll(ORD_CLSSid_PackageCS, ownedPackages);
-        /*@Thrown*/ SequenceValue.@org.eclipse.jdt.annotation.NonNull Accumulator accumulator = ValueUtil.createSequenceAccumulatorValue(SEQ_CLSSid_Package);
-        /*@Nullable*/ Iterator<?> ITERATOR__1 = BOXED_ownedPackages.iterator();
-        /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SequenceValue collect;
-        while (true) {
-            if (!ITERATOR__1.hasNext()) {
-                collect = accumulator;
-                break;
-            }
-            /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.Nullable PackageCS _1 = (PackageCS)ITERATOR__1.next();
-            /**
-             * ast.oclAsType(classes::Package)
-             */
-            final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classes_c_c_Package_0 = idResolver.getClass(CLSSid_Package, null);
-            if (_1 == null) {
-                throw throwNull(rootCS_0, "Null source for \'\'http://cs2as/tests/example2/classescs/1.0\'::ElementCS::ast\'");
-            }
-            final /*@Thrown*/ org.eclipse.emf.ecore.@org.eclipse.jdt.annotation.Nullable EObject ast_0 = _1.getAst();
-            final /*@Thrown*/ example2.classes.@org.eclipse.jdt.annotation.NonNull Package oclAsType_0 = ClassUtil.nonNullState((Package)OclAnyOclAsTypeOperation.INSTANCE.evaluate(executor, ast_0, TYP_classes_c_c_Package_0));
-            //
-            accumulator.add(oclAsType_0);
-        }
-        // property assignments
-        final /*@NonInvalid*/ java.util.@org.eclipse.jdt.annotation.NonNull List<Package> ECORE_collect = ((IdResolver.IdResolverExtension)idResolver).ecoreValueOfAll(Package.class, collect);
-        oclAsType.getOwnedPackages().addAll(ECORE_collect);
-        return true;
-    }
-    
-    /**
-     * 
-     * map __root__ in classescs2as_qvtp_qvtias {
-     * 
-     *   where ( |)
-     * { |}
-     * for rootCS : classescs::RootCS in classescs::RootCS.allInstances()
-     *    {
-     * map cRootCS_2_Root {
-     * rootCS := rootCS;
-     * }}
-     *   for packageCS : classescs::PackageCS in classescs::PackageCS.allInstances()
-     *    {
-     * map cPackageCS_2_Package {
-     * packageCS := packageCS;
-     * }}
-     *   for rootCS : classescs::RootCS in classescs::RootCS.allInstances()
-     *    {
-     * map uRoot_ownedPackages {
-     * rootCS := rootCS;
-     * }}
-     *   for packageCS : classescs::PackageCS in classescs::PackageCS.allInstances()
-     *    {
-     * map uPackage_name {
-     * packageCS := packageCS;
-     * }}
-     *   for classCS : classescs::ClassCS in classescs::ClassCS.allInstances()
-     *    {
-     * map cClassCS_2_Class {
-     * classCS := classCS;
-     * }}
-     *   for packageCS : classescs::PackageCS in classescs::PackageCS.allInstances()
-     *    {
-     * map uPackage_ownedClasses {
-     * packageCS := packageCS;
-     * }}
-     *   for packageCS : classescs::PackageCS in classescs::PackageCS.allInstances()
-     *    {
-     * map uPackage_ownedPackages {
-     * packageCS := packageCS;
-     * }}
-     *   for classCS : classescs::ClassCS in classescs::ClassCS.allInstances()
-     *    {
-     * map uClass_name {
-     * classCS := classCS;
-     * }}
-     *   for classCS : classescs::ClassCS in classescs::ClassCS.allInstances()
-     *    {
-     * map uClass_superClass {
-     * classCS := classCS;
-     * }}
-     */
-    protected boolean MAP___root__() throws ReflectiveOperationException {
-        // predicates
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
-        // mapping statements
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classescs_c_c_ClassCS_2 = idResolver.getClass(CLSSid_ClassCS, null);
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classescs_c_c_PackageCS_3 = idResolver.getClass(CLSSid_PackageCS, null);
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYP_classescs_c_c_RootCS_1 = idResolver.getClass(CLSSid_RootCS, null);
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue allInstances_6 = ClassifierAllInstancesOperation.INSTANCE.evaluate(executor, SET_CLSSid_ClassCS, TYP_classescs_c_c_ClassCS_2);
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue allInstances_2 = ClassifierAllInstancesOperation.INSTANCE.evaluate(executor, SET_CLSSid_PackageCS, TYP_classescs_c_c_PackageCS_3);
-        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue allInstances_1 = ClassifierAllInstancesOperation.INSTANCE.evaluate(executor, SET_CLSSid_RootCS, TYP_classescs_c_c_RootCS_1);
-        for (RootCS rootCS_3 : ValueUtil.typedIterable(RootCS.class, allInstances_1)) {
-            if (rootCS_3 != null) {
-                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS symbol_0 = (RootCS)rootCS_3;
-                MAP_cRootCS_2_Root(symbol_0);
-            }
-        }
-        for (PackageCS packageCS_7 : ValueUtil.typedIterable(PackageCS.class, allInstances_2)) {
-            if (packageCS_7 != null) {
-                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS symbol_3 = (PackageCS)packageCS_7;
-                MAP_cPackageCS_2_Package(symbol_3);
-            }
-        }
-        for (RootCS rootCS_4 : ValueUtil.typedIterable(RootCS.class, allInstances_1)) {
-            if (rootCS_4 != null) {
-                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull RootCS symbol_6 = (RootCS)rootCS_4;
-                MAP_uRoot_ownedPackages(symbol_6);
-            }
-        }
-        for (PackageCS packageCS_8 : ValueUtil.typedIterable(PackageCS.class, allInstances_2)) {
-            if (packageCS_8 != null) {
-                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS symbol_9 = (PackageCS)packageCS_8;
-                MAP_uPackage_name(symbol_9);
-            }
-        }
-        for (ClassCS classCS_5 : ValueUtil.typedIterable(ClassCS.class, allInstances_6)) {
-            if (classCS_5 != null) {
-                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS symbol_12 = (ClassCS)classCS_5;
-                MAP_cClassCS_2_Class(symbol_12);
-            }
-        }
-        for (PackageCS packageCS_9 : ValueUtil.typedIterable(PackageCS.class, allInstances_2)) {
-            if (packageCS_9 != null) {
-                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS symbol_15 = (PackageCS)packageCS_9;
-                MAP_uPackage_ownedClasses(symbol_15);
-            }
-        }
-        for (PackageCS packageCS_10 : ValueUtil.typedIterable(PackageCS.class, allInstances_2)) {
-            if (packageCS_10 != null) {
-                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull PackageCS symbol_18 = (PackageCS)packageCS_10;
-                MAP_uPackage_ownedPackages(symbol_18);
-            }
-        }
-        for (ClassCS classCS_6 : ValueUtil.typedIterable(ClassCS.class, allInstances_6)) {
-            if (classCS_6 != null) {
-                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS symbol_21 = (ClassCS)classCS_6;
-                MAP_uClass_name(symbol_21);
-            }
-        }
-        for (ClassCS classCS_7 : ValueUtil.typedIterable(ClassCS.class, allInstances_6)) {
-            if (classCS_7 != null) {
-                final /*@NonInvalid*/ example2.classescs.@org.eclipse.jdt.annotation.NonNull ClassCS symbol_24 = (ClassCS)classCS_7;
-                MAP_uClass_superClass(symbol_24);
-            }
-        }
-        return true;
-    }
-}