Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-10-13 13:26:43 +0000
committerEd Willink2016-10-13 15:17:23 +0000
commitb5458dafc451c05d3ff40b796bf955fb09de1560 (patch)
treeb244e2893ef92e3151e79ee2920d78832461110e /tests/org.eclipse.qvtd.doc.bigmde2016.tests
parenta2a5194a6002184442357da8d2631f75bd05bf4e (diff)
downloadorg.eclipse.qvtd-b5458dafc451c05d3ff40b796bf955fb09de1560.tar.gz
org.eclipse.qvtd-b5458dafc451c05d3ff40b796bf955fb09de1560.tar.xz
org.eclipse.qvtd-b5458dafc451c05d3ff40b796bf955fb09de1560.zip
[505814] Remove BigMDE2016 QVTc exports, add separate test
Diffstat (limited to 'tests/org.eclipse.qvtd.doc.bigmde2016.tests')
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/.classpath1
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF1
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/ReadMe.txt3
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/FamiliesFactory.java59
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/FamiliesPackage.java469
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/Family.java155
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/Member.java174
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamiliesFactoryImpl.java117
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamiliesPackageImpl.java330
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamilyImpl.java431
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/MemberImpl.java462
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/util/FamiliesAdapterFactory.java146
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/util/FamiliesSwitch.java140
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Families2PersonsFactory.java59
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Families2PersonsPackage.java421
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Member2Female.java24
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Member2Male.java24
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/MemberToPerson.java141
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Families2PersonsFactoryImpl.java117
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Families2PersonsPackageImpl.java314
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Member2FemaleImpl.java45
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Member2MaleImpl.java45
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/MemberToPersonImpl.java356
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/util/Families2PersonsAdapterFactory.java165
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/util/Families2PersonsSwitch.java164
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Female.java24
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Male.java24
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Person.java58
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/PersonsFactory.java59
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/PersonsPackage.java282
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/FemaleImpl.java45
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/MaleImpl.java45
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonImpl.java173
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonsFactoryImpl.java117
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonsPackageImpl.java245
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/util/PersonsAdapterFactory.java165
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/util/PersonsSwitch.java164
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/tx/Families2Persons.java440
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/FamiliesGenerator.java6
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/PrintAndLog.java32
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java4
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/emftvm/BigMDE2016EMFTVMTests.java4
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/etl/BigMDE2016ETLTests.java241
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/BigMDE2016CGTests.java54
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/BigMDE2016_QVTc_AutomatedTests.java83
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/QVTcSimpleUMLGenerator.java88
-rw-r--r--tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvto/BigMDE2016QVToTests.java4
47 files changed, 6403 insertions, 317 deletions
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.classpath b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.classpath
index da98864b0..1c89ecb7e 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.classpath
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.classpath
@@ -12,5 +12,6 @@
</classpathentry>
<classpathentry excluding="**/*.launch" kind="src" path="src"/>
<classpathentry kind="src" path="test-gen"/>
+ <classpathentry kind="src" path="src-copy"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF
index 327848697..d0e1cf763 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF
@@ -25,3 +25,4 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
Bundle-Localization: plugin
+Export-Package: org.eclipse.qvtd.doc.bigmde2016.tests.qvtc
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/ReadMe.txt b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/ReadMe.txt
new file mode 100644
index 000000000..78ef13633
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/ReadMe.txt
@@ -0,0 +1,3 @@
+The files in src-copy are copied from equivalently named files in org.eclipse.qvtd.xtext.qvtcore.tests.
+
+Imports/@Overrides are fixed up to reduce warnings.
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/FamiliesFactory.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/FamiliesFactory.java
new file mode 100644
index 000000000..7c7f188bc
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/FamiliesFactory.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage
+ * @generated
+ */
+public interface FamiliesFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ FamiliesFactory eINSTANCE = org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamiliesFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Family</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Family</em>'.
+ * @generated
+ */
+ Family createFamily();
+
+ /**
+ * Returns a new object of class '<em>Member</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Member</em>'.
+ * @generated
+ */
+ Member createMember();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ FamiliesPackage getFamiliesPackage();
+
+} //FamiliesFactory
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/FamiliesPackage.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/FamiliesPackage.java
new file mode 100644
index 000000000..4a9b3175b
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/FamiliesPackage.java
@@ -0,0 +1,469 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface FamiliesPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "Families";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Families";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "families";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ FamiliesPackage eINSTANCE = org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamiliesPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamilyImpl <em>Family</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamilyImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamiliesPackageImpl#getFamily()
+ * @generated
+ */
+ int FAMILY = 0;
+
+ /**
+ * The feature id for the '<em><b>Last Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FAMILY__LAST_NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Father</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FAMILY__FATHER = 1;
+
+ /**
+ * The feature id for the '<em><b>Mother</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FAMILY__MOTHER = 2;
+
+ /**
+ * The feature id for the '<em><b>Sons</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FAMILY__SONS = 3;
+
+ /**
+ * The feature id for the '<em><b>Daughters</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FAMILY__DAUGHTERS = 4;
+
+ /**
+ * The number of structural features of the '<em>Family</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FAMILY_FEATURE_COUNT = 5;
+
+ /**
+ * The number of operations of the '<em>Family</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FAMILY_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.MemberImpl <em>Member</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.MemberImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamiliesPackageImpl#getMember()
+ * @generated
+ */
+ int MEMBER = 1;
+
+ /**
+ * The feature id for the '<em><b>First Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER__FIRST_NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Family Father</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER__FAMILY_FATHER = 1;
+
+ /**
+ * The feature id for the '<em><b>Family Mother</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER__FAMILY_MOTHER = 2;
+
+ /**
+ * The feature id for the '<em><b>Family Son</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER__FAMILY_SON = 3;
+
+ /**
+ * The feature id for the '<em><b>Family Daughter</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER__FAMILY_DAUGHTER = 4;
+
+ /**
+ * The number of structural features of the '<em>Member</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER_FEATURE_COUNT = 5;
+
+ /**
+ * The number of operations of the '<em>Member</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER_OPERATION_COUNT = 0;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family <em>Family</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Family</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family
+ * @generated
+ */
+ EClass getFamily();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getLastName <em>Last Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Last Name</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getLastName()
+ * @see #getFamily()
+ * @generated
+ */
+ EAttribute getFamily_LastName();
+
+ /**
+ * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getFather <em>Father</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference '<em>Father</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getFather()
+ * @see #getFamily()
+ * @generated
+ */
+ EReference getFamily_Father();
+
+ /**
+ * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getMother <em>Mother</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference '<em>Mother</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getMother()
+ * @see #getFamily()
+ * @generated
+ */
+ EReference getFamily_Mother();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getSons <em>Sons</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Sons</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getSons()
+ * @see #getFamily()
+ * @generated
+ */
+ EReference getFamily_Sons();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getDaughters <em>Daughters</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Daughters</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getDaughters()
+ * @see #getFamily()
+ * @generated
+ */
+ EReference getFamily_Daughters();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member <em>Member</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Member</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member
+ * @generated
+ */
+ EClass getMember();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFirstName <em>First Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>First Name</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFirstName()
+ * @see #getMember()
+ * @generated
+ */
+ EAttribute getMember_FirstName();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyFather <em>Family Father</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Family Father</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyFather()
+ * @see #getMember()
+ * @generated
+ */
+ EReference getMember_FamilyFather();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyMother <em>Family Mother</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Family Mother</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyMother()
+ * @see #getMember()
+ * @generated
+ */
+ EReference getMember_FamilyMother();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilySon <em>Family Son</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Family Son</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilySon()
+ * @see #getMember()
+ * @generated
+ */
+ EReference getMember_FamilySon();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyDaughter <em>Family Daughter</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Family Daughter</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyDaughter()
+ * @see #getMember()
+ * @generated
+ */
+ EReference getMember_FamilyDaughter();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ FamiliesFactory getFamiliesFactory();
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamilyImpl <em>Family</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamilyImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamiliesPackageImpl#getFamily()
+ * @generated
+ */
+ EClass FAMILY = eINSTANCE.getFamily();
+
+ /**
+ * The meta object literal for the '<em><b>Last Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute FAMILY__LAST_NAME = eINSTANCE.getFamily_LastName();
+
+ /**
+ * The meta object literal for the '<em><b>Father</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference FAMILY__FATHER = eINSTANCE.getFamily_Father();
+
+ /**
+ * The meta object literal for the '<em><b>Mother</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference FAMILY__MOTHER = eINSTANCE.getFamily_Mother();
+
+ /**
+ * The meta object literal for the '<em><b>Sons</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference FAMILY__SONS = eINSTANCE.getFamily_Sons();
+
+ /**
+ * The meta object literal for the '<em><b>Daughters</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference FAMILY__DAUGHTERS = eINSTANCE.getFamily_Daughters();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.MemberImpl <em>Member</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.MemberImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamiliesPackageImpl#getMember()
+ * @generated
+ */
+ EClass MEMBER = eINSTANCE.getMember();
+
+ /**
+ * The meta object literal for the '<em><b>First Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MEMBER__FIRST_NAME = eINSTANCE.getMember_FirstName();
+
+ /**
+ * The meta object literal for the '<em><b>Family Father</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MEMBER__FAMILY_FATHER = eINSTANCE.getMember_FamilyFather();
+
+ /**
+ * The meta object literal for the '<em><b>Family Mother</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MEMBER__FAMILY_MOTHER = eINSTANCE.getMember_FamilyMother();
+
+ /**
+ * The meta object literal for the '<em><b>Family Son</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MEMBER__FAMILY_SON = eINSTANCE.getMember_FamilySon();
+
+ /**
+ * The meta object literal for the '<em><b>Family Daughter</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MEMBER__FAMILY_DAUGHTER = eINSTANCE.getMember_FamilyDaughter();
+
+ }
+
+} //FamiliesPackage
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/Family.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/Family.java
new file mode 100644
index 000000000..8871ab04d
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/Family.java
@@ -0,0 +1,155 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Family</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getLastName <em>Last Name</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getFather <em>Father</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getMother <em>Mother</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getSons <em>Sons</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getDaughters <em>Daughters</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getFamily()
+ * @model
+ * @generated
+ */
+public interface Family extends EObject {
+ /**
+ * Returns the value of the '<em><b>Last Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Last Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Last Name</em>' attribute.
+ * @see #setLastName(String)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getFamily_LastName()
+ * @model unique="false" required="true" ordered="false"
+ * @generated
+ */
+ String getLastName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getLastName <em>Last Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Last Name</em>' attribute.
+ * @see #getLastName()
+ * @generated
+ */
+ void setLastName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Father</b></em>' containment reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyFather <em>Family Father</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Father</em>' containment reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Father</em>' containment reference.
+ * @see #setFather(Member)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getFamily_Father()
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyFather
+ * @model opposite="familyFather" containment="true" required="true" ordered="false"
+ * @generated
+ */
+ Member getFather();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getFather <em>Father</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Father</em>' containment reference.
+ * @see #getFather()
+ * @generated
+ */
+ void setFather(Member value);
+
+ /**
+ * Returns the value of the '<em><b>Mother</b></em>' containment reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyMother <em>Family Mother</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Mother</em>' containment reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Mother</em>' containment reference.
+ * @see #setMother(Member)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getFamily_Mother()
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyMother
+ * @model opposite="familyMother" containment="true" required="true" ordered="false"
+ * @generated
+ */
+ Member getMother();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getMother <em>Mother</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Mother</em>' containment reference.
+ * @see #getMother()
+ * @generated
+ */
+ void setMother(Member value);
+
+ /**
+ * Returns the value of the '<em><b>Sons</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilySon <em>Family Son</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Sons</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Sons</em>' containment reference list.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getFamily_Sons()
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilySon
+ * @model opposite="familySon" containment="true" ordered="false"
+ * @generated
+ */
+ EList<Member> getSons();
+
+ /**
+ * Returns the value of the '<em><b>Daughters</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyDaughter <em>Family Daughter</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Daughters</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Daughters</em>' containment reference list.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getFamily_Daughters()
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyDaughter
+ * @model opposite="familyDaughter" containment="true" ordered="false"
+ * @generated
+ */
+ EList<Member> getDaughters();
+
+} // Family
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/Member.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/Member.java
new file mode 100644
index 000000000..468748fb9
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/Member.java
@@ -0,0 +1,174 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Member</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFirstName <em>First Name</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyFather <em>Family Father</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyMother <em>Family Mother</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilySon <em>Family Son</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyDaughter <em>Family Daughter</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getMember()
+ * @model
+ * @generated
+ */
+public interface Member extends EObject {
+ /**
+ * Returns the value of the '<em><b>First Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>First Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>First Name</em>' attribute.
+ * @see #setFirstName(String)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getMember_FirstName()
+ * @model unique="false" required="true" ordered="false"
+ * @generated
+ */
+ String getFirstName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFirstName <em>First Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>First Name</em>' attribute.
+ * @see #getFirstName()
+ * @generated
+ */
+ void setFirstName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Family Father</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getFather <em>Father</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Family Father</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Family Father</em>' container reference.
+ * @see #setFamilyFather(Family)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getMember_FamilyFather()
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getFather
+ * @model opposite="father" transient="false" ordered="false"
+ * @generated
+ */
+ Family getFamilyFather();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyFather <em>Family Father</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Family Father</em>' container reference.
+ * @see #getFamilyFather()
+ * @generated
+ */
+ void setFamilyFather(Family value);
+
+ /**
+ * Returns the value of the '<em><b>Family Mother</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getMother <em>Mother</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Family Mother</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Family Mother</em>' container reference.
+ * @see #setFamilyMother(Family)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getMember_FamilyMother()
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getMother
+ * @model opposite="mother" transient="false" ordered="false"
+ * @generated
+ */
+ Family getFamilyMother();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyMother <em>Family Mother</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Family Mother</em>' container reference.
+ * @see #getFamilyMother()
+ * @generated
+ */
+ void setFamilyMother(Family value);
+
+ /**
+ * Returns the value of the '<em><b>Family Son</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getSons <em>Sons</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Family Son</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Family Son</em>' container reference.
+ * @see #setFamilySon(Family)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getMember_FamilySon()
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getSons
+ * @model opposite="sons" transient="false" ordered="false"
+ * @generated
+ */
+ Family getFamilySon();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilySon <em>Family Son</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Family Son</em>' container reference.
+ * @see #getFamilySon()
+ * @generated
+ */
+ void setFamilySon(Family value);
+
+ /**
+ * Returns the value of the '<em><b>Family Daughter</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getDaughters <em>Daughters</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Family Daughter</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Family Daughter</em>' container reference.
+ * @see #setFamilyDaughter(Family)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#getMember_FamilyDaughter()
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family#getDaughters
+ * @model opposite="daughters" transient="false" ordered="false"
+ * @generated
+ */
+ Family getFamilyDaughter();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member#getFamilyDaughter <em>Family Daughter</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Family Daughter</em>' container reference.
+ * @see #getFamilyDaughter()
+ * @generated
+ */
+ void setFamilyDaughter(Family value);
+
+} // Member
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamiliesFactoryImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamiliesFactoryImpl.java
new file mode 100644
index 000000000..fee863296
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamiliesFactoryImpl.java
@@ -0,0 +1,117 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FamiliesFactoryImpl extends EFactoryImpl implements FamiliesFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static FamiliesFactory init() {
+ try {
+ FamiliesFactory theFamiliesFactory = (FamiliesFactory)EPackage.Registry.INSTANCE.getEFactory(FamiliesPackage.eNS_URI);
+ if (theFamiliesFactory != null) {
+ return theFamiliesFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new FamiliesFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public FamiliesFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case FamiliesPackage.FAMILY: return createFamily();
+ case FamiliesPackage.MEMBER: return createMember();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Family createFamily() {
+ FamilyImpl family = new FamilyImpl();
+ return family;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Member createMember() {
+ MemberImpl member = new MemberImpl();
+ return member;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public FamiliesPackage getFamiliesPackage() {
+ return (FamiliesPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static FamiliesPackage getPackage() {
+ return FamiliesPackage.eINSTANCE;
+ }
+
+} //FamiliesFactoryImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamiliesPackageImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamiliesPackageImpl.java
new file mode 100644
index 000000000..49010f201
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamiliesPackageImpl.java
@@ -0,0 +1,330 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsPackageImpl;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FamiliesPackageImpl extends EPackageImpl implements FamiliesPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass familyEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass memberEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private FamiliesPackageImpl() {
+ super(eNS_URI, FamiliesFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link FamiliesPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static FamiliesPackage init() {
+ if (isInited) return (FamiliesPackage)EPackage.Registry.INSTANCE.getEPackage(FamiliesPackage.eNS_URI);
+
+ // Obtain or create and register package
+ Object ePackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+ FamiliesPackageImpl theFamiliesPackage = (FamiliesPackageImpl)(ePackage instanceof FamiliesPackageImpl ? ePackage : new FamiliesPackageImpl());
+
+ isInited = true;
+
+ // Obtain or create and register interdependencies
+ Families2PersonsPackageImpl theFamilies2PersonsPackage = (Families2PersonsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Families2PersonsPackage.eNS_URI) instanceof Families2PersonsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Families2PersonsPackage.eNS_URI) : Families2PersonsPackage.eINSTANCE);
+ PersonsPackageImpl thePersonsPackage = (PersonsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PersonsPackage.eNS_URI) instanceof PersonsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PersonsPackage.eNS_URI) : PersonsPackage.eINSTANCE);
+
+ // Create package meta-data objects
+ theFamiliesPackage.createPackageContents();
+ theFamilies2PersonsPackage.createPackageContents();
+ thePersonsPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theFamiliesPackage.initializePackageContents();
+ theFamilies2PersonsPackage.initializePackageContents();
+ thePersonsPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theFamiliesPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(FamiliesPackage.eNS_URI, theFamiliesPackage);
+ return theFamiliesPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getFamily() {
+ return familyEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getFamily_LastName() {
+ return (EAttribute)familyEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getFamily_Father() {
+ return (EReference)familyEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getFamily_Mother() {
+ return (EReference)familyEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getFamily_Sons() {
+ return (EReference)familyEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getFamily_Daughters() {
+ return (EReference)familyEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getMember() {
+ return memberEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getMember_FirstName() {
+ return (EAttribute)memberEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getMember_FamilyFather() {
+ return (EReference)memberEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getMember_FamilyMother() {
+ return (EReference)memberEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getMember_FamilySon() {
+ return (EReference)memberEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getMember_FamilyDaughter() {
+ return (EReference)memberEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public FamiliesFactory getFamiliesFactory() {
+ return (FamiliesFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ familyEClass = createEClass(FAMILY);
+ createEAttribute(familyEClass, FAMILY__LAST_NAME);
+ createEReference(familyEClass, FAMILY__FATHER);
+ createEReference(familyEClass, FAMILY__MOTHER);
+ createEReference(familyEClass, FAMILY__SONS);
+ createEReference(familyEClass, FAMILY__DAUGHTERS);
+
+ memberEClass = createEClass(MEMBER);
+ createEAttribute(memberEClass, MEMBER__FIRST_NAME);
+ createEReference(memberEClass, MEMBER__FAMILY_FATHER);
+ createEReference(memberEClass, MEMBER__FAMILY_MOTHER);
+ createEReference(memberEClass, MEMBER__FAMILY_SON);
+ createEReference(memberEClass, MEMBER__FAMILY_DAUGHTER);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(familyEClass, Family.class, "Family", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getFamily_LastName(), ecorePackage.getEString(), "lastName", null, 1, 1, Family.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getFamily_Father(), this.getMember(), this.getMember_FamilyFather(), "father", null, 1, 1, Family.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getFamily_Mother(), this.getMember(), this.getMember_FamilyMother(), "mother", null, 1, 1, Family.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getFamily_Sons(), this.getMember(), this.getMember_FamilySon(), "sons", null, 0, -1, Family.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getFamily_Daughters(), this.getMember(), this.getMember_FamilyDaughter(), "daughters", null, 0, -1, Family.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(memberEClass, Member.class, "Member", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getMember_FirstName(), ecorePackage.getEString(), "firstName", null, 1, 1, Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getMember_FamilyFather(), this.getFamily(), this.getFamily_Father(), "familyFather", null, 0, 1, Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getMember_FamilyMother(), this.getFamily(), this.getFamily_Mother(), "familyMother", null, 0, 1, Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getMember_FamilySon(), this.getFamily(), this.getFamily_Sons(), "familySon", null, 0, 1, Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getMember_FamilyDaughter(), this.getFamily(), this.getFamily_Daughters(), "familyDaughter", null, 0, 1, Member.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //FamiliesPackageImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamilyImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamilyImpl.java
new file mode 100644
index 000000000..7094a80e8
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/FamilyImpl.java
@@ -0,0 +1,431 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Family</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamilyImpl#getLastName <em>Last Name</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamilyImpl#getFather <em>Father</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamilyImpl#getMother <em>Mother</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamilyImpl#getSons <em>Sons</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamilyImpl#getDaughters <em>Daughters</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FamilyImpl extends MinimalEObjectImpl.Container implements Family {
+ /**
+ * The default value of the '{@link #getLastName() <em>Last Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLastName()
+ * @generated
+ * @ordered
+ */
+ protected static final String LAST_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLastName() <em>Last Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLastName()
+ * @generated
+ * @ordered
+ */
+ protected String lastName = LAST_NAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getFather() <em>Father</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFather()
+ * @generated
+ * @ordered
+ */
+ protected Member father;
+
+ /**
+ * The cached value of the '{@link #getMother() <em>Mother</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMother()
+ * @generated
+ * @ordered
+ */
+ protected Member mother;
+
+ /**
+ * The cached value of the '{@link #getSons() <em>Sons</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSons()
+ * @generated
+ * @ordered
+ */
+ protected EList<Member> sons;
+
+ /**
+ * The cached value of the '{@link #getDaughters() <em>Daughters</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDaughters()
+ * @generated
+ * @ordered
+ */
+ protected EList<Member> daughters;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FamilyImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return FamiliesPackage.Literals.FAMILY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getLastName() {
+ return lastName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setLastName(String newLastName) {
+ String oldLastName = lastName;
+ lastName = newLastName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, FamiliesPackage.FAMILY__LAST_NAME, oldLastName, lastName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Member getFather() {
+ return father;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetFather(Member newFather, NotificationChain msgs) {
+ Member oldFather = father;
+ father = newFather;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, FamiliesPackage.FAMILY__FATHER, oldFather, newFather);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFather(Member newFather) {
+ if (newFather != father) {
+ NotificationChain msgs = null;
+ if (father != null)
+ msgs = ((InternalEObject)father).eInverseRemove(this, FamiliesPackage.MEMBER__FAMILY_FATHER, Member.class, msgs);
+ if (newFather != null)
+ msgs = ((InternalEObject)newFather).eInverseAdd(this, FamiliesPackage.MEMBER__FAMILY_FATHER, Member.class, msgs);
+ msgs = basicSetFather(newFather, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, FamiliesPackage.FAMILY__FATHER, newFather, newFather));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Member getMother() {
+ return mother;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetMother(Member newMother, NotificationChain msgs) {
+ Member oldMother = mother;
+ mother = newMother;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, FamiliesPackage.FAMILY__MOTHER, oldMother, newMother);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setMother(Member newMother) {
+ if (newMother != mother) {
+ NotificationChain msgs = null;
+ if (mother != null)
+ msgs = ((InternalEObject)mother).eInverseRemove(this, FamiliesPackage.MEMBER__FAMILY_MOTHER, Member.class, msgs);
+ if (newMother != null)
+ msgs = ((InternalEObject)newMother).eInverseAdd(this, FamiliesPackage.MEMBER__FAMILY_MOTHER, Member.class, msgs);
+ msgs = basicSetMother(newMother, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, FamiliesPackage.FAMILY__MOTHER, newMother, newMother));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EList<Member> getSons() {
+ if (sons == null) {
+ sons = new EObjectContainmentWithInverseEList<Member>(Member.class, this, FamiliesPackage.FAMILY__SONS, FamiliesPackage.MEMBER__FAMILY_SON);
+ }
+ return sons;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EList<Member> getDaughters() {
+ if (daughters == null) {
+ daughters = new EObjectContainmentWithInverseEList<Member>(Member.class, this, FamiliesPackage.FAMILY__DAUGHTERS, FamiliesPackage.MEMBER__FAMILY_DAUGHTER);
+ }
+ return daughters;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case FamiliesPackage.FAMILY__FATHER:
+ if (father != null)
+ msgs = ((InternalEObject)father).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - FamiliesPackage.FAMILY__FATHER, null, msgs);
+ return basicSetFather((Member)otherEnd, msgs);
+ case FamiliesPackage.FAMILY__MOTHER:
+ if (mother != null)
+ msgs = ((InternalEObject)mother).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - FamiliesPackage.FAMILY__MOTHER, null, msgs);
+ return basicSetMother((Member)otherEnd, msgs);
+ case FamiliesPackage.FAMILY__SONS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getSons()).basicAdd(otherEnd, msgs);
+ case FamiliesPackage.FAMILY__DAUGHTERS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getDaughters()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case FamiliesPackage.FAMILY__FATHER:
+ return basicSetFather(null, msgs);
+ case FamiliesPackage.FAMILY__MOTHER:
+ return basicSetMother(null, msgs);
+ case FamiliesPackage.FAMILY__SONS:
+ return ((InternalEList<?>)getSons()).basicRemove(otherEnd, msgs);
+ case FamiliesPackage.FAMILY__DAUGHTERS:
+ return ((InternalEList<?>)getDaughters()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case FamiliesPackage.FAMILY__LAST_NAME:
+ return getLastName();
+ case FamiliesPackage.FAMILY__FATHER:
+ return getFather();
+ case FamiliesPackage.FAMILY__MOTHER:
+ return getMother();
+ case FamiliesPackage.FAMILY__SONS:
+ return getSons();
+ case FamiliesPackage.FAMILY__DAUGHTERS:
+ return getDaughters();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case FamiliesPackage.FAMILY__LAST_NAME:
+ setLastName((String)newValue);
+ return;
+ case FamiliesPackage.FAMILY__FATHER:
+ setFather((Member)newValue);
+ return;
+ case FamiliesPackage.FAMILY__MOTHER:
+ setMother((Member)newValue);
+ return;
+ case FamiliesPackage.FAMILY__SONS:
+ getSons().clear();
+ getSons().addAll((Collection<? extends Member>)newValue);
+ return;
+ case FamiliesPackage.FAMILY__DAUGHTERS:
+ getDaughters().clear();
+ getDaughters().addAll((Collection<? extends Member>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case FamiliesPackage.FAMILY__LAST_NAME:
+ setLastName(LAST_NAME_EDEFAULT);
+ return;
+ case FamiliesPackage.FAMILY__FATHER:
+ setFather((Member)null);
+ return;
+ case FamiliesPackage.FAMILY__MOTHER:
+ setMother((Member)null);
+ return;
+ case FamiliesPackage.FAMILY__SONS:
+ getSons().clear();
+ return;
+ case FamiliesPackage.FAMILY__DAUGHTERS:
+ getDaughters().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case FamiliesPackage.FAMILY__LAST_NAME:
+ return LAST_NAME_EDEFAULT == null ? lastName != null : !LAST_NAME_EDEFAULT.equals(lastName);
+ case FamiliesPackage.FAMILY__FATHER:
+ return father != null;
+ case FamiliesPackage.FAMILY__MOTHER:
+ return mother != null;
+ case FamiliesPackage.FAMILY__SONS:
+ return sons != null && !sons.isEmpty();
+ case FamiliesPackage.FAMILY__DAUGHTERS:
+ return daughters != null && !daughters.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (lastName: ");
+ result.append(lastName);
+ result.append(')');
+ return result.toString();
+ }
+
+
+} //FamilyImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/MemberImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/MemberImpl.java
new file mode 100644
index 000000000..4ac9a3b28
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/impl/MemberImpl.java
@@ -0,0 +1,462 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Member</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.MemberImpl#getFirstName <em>First Name</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.MemberImpl#getFamilyFather <em>Family Father</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.MemberImpl#getFamilyMother <em>Family Mother</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.MemberImpl#getFamilySon <em>Family Son</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.MemberImpl#getFamilyDaughter <em>Family Daughter</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class MemberImpl extends MinimalEObjectImpl.Container implements Member {
+ /**
+ * The default value of the '{@link #getFirstName() <em>First Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFirstName()
+ * @generated
+ * @ordered
+ */
+ protected static final String FIRST_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getFirstName() <em>First Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFirstName()
+ * @generated
+ * @ordered
+ */
+ protected String firstName = FIRST_NAME_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MemberImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return FamiliesPackage.Literals.MEMBER;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getFirstName() {
+ return firstName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFirstName(String newFirstName) {
+ String oldFirstName = firstName;
+ firstName = newFirstName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, FamiliesPackage.MEMBER__FIRST_NAME, oldFirstName, firstName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Family getFamilyFather() {
+ if (eContainerFeatureID() != FamiliesPackage.MEMBER__FAMILY_FATHER) return null;
+ return (Family)eInternalContainer();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetFamilyFather(Family newFamilyFather, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newFamilyFather, FamiliesPackage.MEMBER__FAMILY_FATHER, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFamilyFather(Family newFamilyFather) {
+ if (newFamilyFather != eInternalContainer() || (eContainerFeatureID() != FamiliesPackage.MEMBER__FAMILY_FATHER && newFamilyFather != null)) {
+ if (EcoreUtil.isAncestor(this, newFamilyFather))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newFamilyFather != null)
+ msgs = ((InternalEObject)newFamilyFather).eInverseAdd(this, FamiliesPackage.FAMILY__FATHER, Family.class, msgs);
+ msgs = basicSetFamilyFather(newFamilyFather, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, FamiliesPackage.MEMBER__FAMILY_FATHER, newFamilyFather, newFamilyFather));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Family getFamilyMother() {
+ if (eContainerFeatureID() != FamiliesPackage.MEMBER__FAMILY_MOTHER) return null;
+ return (Family)eInternalContainer();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetFamilyMother(Family newFamilyMother, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newFamilyMother, FamiliesPackage.MEMBER__FAMILY_MOTHER, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFamilyMother(Family newFamilyMother) {
+ if (newFamilyMother != eInternalContainer() || (eContainerFeatureID() != FamiliesPackage.MEMBER__FAMILY_MOTHER && newFamilyMother != null)) {
+ if (EcoreUtil.isAncestor(this, newFamilyMother))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newFamilyMother != null)
+ msgs = ((InternalEObject)newFamilyMother).eInverseAdd(this, FamiliesPackage.FAMILY__MOTHER, Family.class, msgs);
+ msgs = basicSetFamilyMother(newFamilyMother, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, FamiliesPackage.MEMBER__FAMILY_MOTHER, newFamilyMother, newFamilyMother));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Family getFamilySon() {
+ if (eContainerFeatureID() != FamiliesPackage.MEMBER__FAMILY_SON) return null;
+ return (Family)eInternalContainer();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetFamilySon(Family newFamilySon, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newFamilySon, FamiliesPackage.MEMBER__FAMILY_SON, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFamilySon(Family newFamilySon) {
+ if (newFamilySon != eInternalContainer() || (eContainerFeatureID() != FamiliesPackage.MEMBER__FAMILY_SON && newFamilySon != null)) {
+ if (EcoreUtil.isAncestor(this, newFamilySon))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newFamilySon != null)
+ msgs = ((InternalEObject)newFamilySon).eInverseAdd(this, FamiliesPackage.FAMILY__SONS, Family.class, msgs);
+ msgs = basicSetFamilySon(newFamilySon, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, FamiliesPackage.MEMBER__FAMILY_SON, newFamilySon, newFamilySon));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Family getFamilyDaughter() {
+ if (eContainerFeatureID() != FamiliesPackage.MEMBER__FAMILY_DAUGHTER) return null;
+ return (Family)eInternalContainer();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetFamilyDaughter(Family newFamilyDaughter, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newFamilyDaughter, FamiliesPackage.MEMBER__FAMILY_DAUGHTER, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFamilyDaughter(Family newFamilyDaughter) {
+ if (newFamilyDaughter != eInternalContainer() || (eContainerFeatureID() != FamiliesPackage.MEMBER__FAMILY_DAUGHTER && newFamilyDaughter != null)) {
+ if (EcoreUtil.isAncestor(this, newFamilyDaughter))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newFamilyDaughter != null)
+ msgs = ((InternalEObject)newFamilyDaughter).eInverseAdd(this, FamiliesPackage.FAMILY__DAUGHTERS, Family.class, msgs);
+ msgs = basicSetFamilyDaughter(newFamilyDaughter, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, FamiliesPackage.MEMBER__FAMILY_DAUGHTER, newFamilyDaughter, newFamilyDaughter));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case FamiliesPackage.MEMBER__FAMILY_FATHER:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetFamilyFather((Family)otherEnd, msgs);
+ case FamiliesPackage.MEMBER__FAMILY_MOTHER:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetFamilyMother((Family)otherEnd, msgs);
+ case FamiliesPackage.MEMBER__FAMILY_SON:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetFamilySon((Family)otherEnd, msgs);
+ case FamiliesPackage.MEMBER__FAMILY_DAUGHTER:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetFamilyDaughter((Family)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case FamiliesPackage.MEMBER__FAMILY_FATHER:
+ return basicSetFamilyFather(null, msgs);
+ case FamiliesPackage.MEMBER__FAMILY_MOTHER:
+ return basicSetFamilyMother(null, msgs);
+ case FamiliesPackage.MEMBER__FAMILY_SON:
+ return basicSetFamilySon(null, msgs);
+ case FamiliesPackage.MEMBER__FAMILY_DAUGHTER:
+ return basicSetFamilyDaughter(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case FamiliesPackage.MEMBER__FAMILY_FATHER:
+ return eInternalContainer().eInverseRemove(this, FamiliesPackage.FAMILY__FATHER, Family.class, msgs);
+ case FamiliesPackage.MEMBER__FAMILY_MOTHER:
+ return eInternalContainer().eInverseRemove(this, FamiliesPackage.FAMILY__MOTHER, Family.class, msgs);
+ case FamiliesPackage.MEMBER__FAMILY_SON:
+ return eInternalContainer().eInverseRemove(this, FamiliesPackage.FAMILY__SONS, Family.class, msgs);
+ case FamiliesPackage.MEMBER__FAMILY_DAUGHTER:
+ return eInternalContainer().eInverseRemove(this, FamiliesPackage.FAMILY__DAUGHTERS, Family.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case FamiliesPackage.MEMBER__FIRST_NAME:
+ return getFirstName();
+ case FamiliesPackage.MEMBER__FAMILY_FATHER:
+ return getFamilyFather();
+ case FamiliesPackage.MEMBER__FAMILY_MOTHER:
+ return getFamilyMother();
+ case FamiliesPackage.MEMBER__FAMILY_SON:
+ return getFamilySon();
+ case FamiliesPackage.MEMBER__FAMILY_DAUGHTER:
+ return getFamilyDaughter();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case FamiliesPackage.MEMBER__FIRST_NAME:
+ setFirstName((String)newValue);
+ return;
+ case FamiliesPackage.MEMBER__FAMILY_FATHER:
+ setFamilyFather((Family)newValue);
+ return;
+ case FamiliesPackage.MEMBER__FAMILY_MOTHER:
+ setFamilyMother((Family)newValue);
+ return;
+ case FamiliesPackage.MEMBER__FAMILY_SON:
+ setFamilySon((Family)newValue);
+ return;
+ case FamiliesPackage.MEMBER__FAMILY_DAUGHTER:
+ setFamilyDaughter((Family)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case FamiliesPackage.MEMBER__FIRST_NAME:
+ setFirstName(FIRST_NAME_EDEFAULT);
+ return;
+ case FamiliesPackage.MEMBER__FAMILY_FATHER:
+ setFamilyFather((Family)null);
+ return;
+ case FamiliesPackage.MEMBER__FAMILY_MOTHER:
+ setFamilyMother((Family)null);
+ return;
+ case FamiliesPackage.MEMBER__FAMILY_SON:
+ setFamilySon((Family)null);
+ return;
+ case FamiliesPackage.MEMBER__FAMILY_DAUGHTER:
+ setFamilyDaughter((Family)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case FamiliesPackage.MEMBER__FIRST_NAME:
+ return FIRST_NAME_EDEFAULT == null ? firstName != null : !FIRST_NAME_EDEFAULT.equals(firstName);
+ case FamiliesPackage.MEMBER__FAMILY_FATHER:
+ return getFamilyFather() != null;
+ case FamiliesPackage.MEMBER__FAMILY_MOTHER:
+ return getFamilyMother() != null;
+ case FamiliesPackage.MEMBER__FAMILY_SON:
+ return getFamilySon() != null;
+ case FamiliesPackage.MEMBER__FAMILY_DAUGHTER:
+ return getFamilyDaughter() != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (firstName: ");
+ result.append(firstName);
+ result.append(')');
+ return result.toString();
+ }
+
+
+} //MemberImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/util/FamiliesAdapterFactory.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/util/FamiliesAdapterFactory.java
new file mode 100644
index 000000000..49280b499
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/util/FamiliesAdapterFactory.java
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage
+ * @generated
+ */
+public class FamiliesAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static FamiliesPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public FamiliesAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = FamiliesPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FamiliesSwitch<@Nullable Adapter> modelSwitch =
+ new FamiliesSwitch<@Nullable Adapter>() {
+ @Override
+ public Adapter caseFamily(Family object) {
+ return createFamilyAdapter();
+ }
+ @Override
+ public Adapter caseMember(Member object) {
+ return createMemberAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family <em>Family</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family
+ * @generated
+ */
+ public Adapter createFamilyAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member <em>Member</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member
+ * @generated
+ */
+ public Adapter createMemberAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //FamiliesAdapterFactory
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/util/FamiliesSwitch.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/util/FamiliesSwitch.java
new file mode 100644
index 000000000..304641c46
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families/util/FamiliesSwitch.java
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage
+ * @generated
+ */
+public class FamiliesSwitch<@Nullable T> extends Switch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static FamiliesPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public FamiliesSwitch() {
+ if (modelPackage == null) {
+ modelPackage = FamiliesPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case FamiliesPackage.FAMILY: {
+ Family family = (Family)theEObject;
+ T result = caseFamily(family);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case FamiliesPackage.MEMBER: {
+ Member member = (Member)theEObject;
+ T result = caseMember(member);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Family</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Family</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseFamily(Family object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Member</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Member</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMember(Member object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //FamiliesSwitch
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Families2PersonsFactory.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Families2PersonsFactory.java
new file mode 100644
index 000000000..45b47cdad
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Families2PersonsFactory.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage
+ * @generated
+ */
+public interface Families2PersonsFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ Families2PersonsFactory eINSTANCE = org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Member2 Male</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Member2 Male</em>'.
+ * @generated
+ */
+ Member2Male createMember2Male();
+
+ /**
+ * Returns a new object of class '<em>Member2 Female</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Member2 Female</em>'.
+ * @generated
+ */
+ Member2Female createMember2Female();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ Families2PersonsPackage getFamilies2PersonsPackage();
+
+} //Families2PersonsFactory
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Families2PersonsPackage.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Families2PersonsPackage.java
new file mode 100644
index 000000000..0803e9055
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Families2PersonsPackage.java
@@ -0,0 +1,421 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface Families2PersonsPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "Families2Persons";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Families2Persons";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "families2Persons";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ Families2PersonsPackage eINSTANCE = org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.MemberToPersonImpl <em>Member To Person</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.MemberToPersonImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsPackageImpl#getMemberToPerson()
+ * @generated
+ */
+ int MEMBER_TO_PERSON = 0;
+
+ /**
+ * The feature id for the '<em><b>Member</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER_TO_PERSON__MEMBER = 0;
+
+ /**
+ * The feature id for the '<em><b>Person</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER_TO_PERSON__PERSON = 1;
+
+ /**
+ * The feature id for the '<em><b>First Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER_TO_PERSON__FIRST_NAME = 2;
+
+ /**
+ * The feature id for the '<em><b>Family Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER_TO_PERSON__FAMILY_NAME = 3;
+
+ /**
+ * The number of structural features of the '<em>Member To Person</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER_TO_PERSON_FEATURE_COUNT = 4;
+
+ /**
+ * The number of operations of the '<em>Member To Person</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER_TO_PERSON_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Member2MaleImpl <em>Member2 Male</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Member2MaleImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsPackageImpl#getMember2Male()
+ * @generated
+ */
+ int MEMBER2_MALE = 1;
+
+ /**
+ * The feature id for the '<em><b>Member</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_MALE__MEMBER = MEMBER_TO_PERSON__MEMBER;
+
+ /**
+ * The feature id for the '<em><b>Person</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_MALE__PERSON = MEMBER_TO_PERSON__PERSON;
+
+ /**
+ * The feature id for the '<em><b>First Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_MALE__FIRST_NAME = MEMBER_TO_PERSON__FIRST_NAME;
+
+ /**
+ * The feature id for the '<em><b>Family Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_MALE__FAMILY_NAME = MEMBER_TO_PERSON__FAMILY_NAME;
+
+ /**
+ * The number of structural features of the '<em>Member2 Male</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_MALE_FEATURE_COUNT = MEMBER_TO_PERSON_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Member2 Male</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_MALE_OPERATION_COUNT = MEMBER_TO_PERSON_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Member2FemaleImpl <em>Member2 Female</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Member2FemaleImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsPackageImpl#getMember2Female()
+ * @generated
+ */
+ int MEMBER2_FEMALE = 2;
+
+ /**
+ * The feature id for the '<em><b>Member</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_FEMALE__MEMBER = MEMBER_TO_PERSON__MEMBER;
+
+ /**
+ * The feature id for the '<em><b>Person</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_FEMALE__PERSON = MEMBER_TO_PERSON__PERSON;
+
+ /**
+ * The feature id for the '<em><b>First Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_FEMALE__FIRST_NAME = MEMBER_TO_PERSON__FIRST_NAME;
+
+ /**
+ * The feature id for the '<em><b>Family Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_FEMALE__FAMILY_NAME = MEMBER_TO_PERSON__FAMILY_NAME;
+
+ /**
+ * The number of structural features of the '<em>Member2 Female</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_FEMALE_FEATURE_COUNT = MEMBER_TO_PERSON_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Member2 Female</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MEMBER2_FEMALE_OPERATION_COUNT = MEMBER_TO_PERSON_OPERATION_COUNT + 0;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson <em>Member To Person</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Member To Person</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson
+ * @generated
+ */
+ EClass getMemberToPerson();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getMember <em>Member</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Member</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getMember()
+ * @see #getMemberToPerson()
+ * @generated
+ */
+ EReference getMemberToPerson_Member();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getPerson <em>Person</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Person</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getPerson()
+ * @see #getMemberToPerson()
+ * @generated
+ */
+ EReference getMemberToPerson_Person();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getFirstName <em>First Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>First Name</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getFirstName()
+ * @see #getMemberToPerson()
+ * @generated
+ */
+ EAttribute getMemberToPerson_FirstName();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getFamilyName <em>Family Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Family Name</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getFamilyName()
+ * @see #getMemberToPerson()
+ * @generated
+ */
+ EAttribute getMemberToPerson_FamilyName();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Male <em>Member2 Male</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Member2 Male</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Male
+ * @generated
+ */
+ EClass getMember2Male();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Female <em>Member2 Female</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Member2 Female</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Female
+ * @generated
+ */
+ EClass getMember2Female();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ Families2PersonsFactory getFamilies2PersonsFactory();
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.MemberToPersonImpl <em>Member To Person</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.MemberToPersonImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsPackageImpl#getMemberToPerson()
+ * @generated
+ */
+ EClass MEMBER_TO_PERSON = eINSTANCE.getMemberToPerson();
+
+ /**
+ * The meta object literal for the '<em><b>Member</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MEMBER_TO_PERSON__MEMBER = eINSTANCE.getMemberToPerson_Member();
+
+ /**
+ * The meta object literal for the '<em><b>Person</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MEMBER_TO_PERSON__PERSON = eINSTANCE.getMemberToPerson_Person();
+
+ /**
+ * The meta object literal for the '<em><b>First Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MEMBER_TO_PERSON__FIRST_NAME = eINSTANCE.getMemberToPerson_FirstName();
+
+ /**
+ * The meta object literal for the '<em><b>Family Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MEMBER_TO_PERSON__FAMILY_NAME = eINSTANCE.getMemberToPerson_FamilyName();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Member2MaleImpl <em>Member2 Male</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Member2MaleImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsPackageImpl#getMember2Male()
+ * @generated
+ */
+ EClass MEMBER2_MALE = eINSTANCE.getMember2Male();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Member2FemaleImpl <em>Member2 Female</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Member2FemaleImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsPackageImpl#getMember2Female()
+ * @generated
+ */
+ EClass MEMBER2_FEMALE = eINSTANCE.getMember2Female();
+
+ }
+
+} //Families2PersonsPackage
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Member2Female.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Member2Female.java
new file mode 100644
index 000000000..23b578814
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Member2Female.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Member2 Female</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage#getMember2Female()
+ * @model
+ * @generated
+ */
+public interface Member2Female extends MemberToPerson {
+} // Member2Female
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Member2Male.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Member2Male.java
new file mode 100644
index 000000000..af0acd0f3
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/Member2Male.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Member2 Male</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage#getMember2Male()
+ * @model
+ * @generated
+ */
+public interface Member2Male extends MemberToPerson {
+} // Member2Male
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/MemberToPerson.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/MemberToPerson.java
new file mode 100644
index 000000000..b5b2fd7d2
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/MemberToPerson.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Member To Person</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getMember <em>Member</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getPerson <em>Person</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getFirstName <em>First Name</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getFamilyName <em>Family Name</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage#getMemberToPerson()
+ * @model abstract="true"
+ * @generated
+ */
+public interface MemberToPerson extends EObject {
+ /**
+ * Returns the value of the '<em><b>Member</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Member</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Member</em>' reference.
+ * @see #setMember(Member)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage#getMemberToPerson_Member()
+ * @model annotation="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName body='middle' upper='1'"
+ * @generated
+ */
+ Member getMember();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getMember <em>Member</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Member</em>' reference.
+ * @see #getMember()
+ * @generated
+ */
+ void setMember(Member value);
+
+ /**
+ * Returns the value of the '<em><b>Person</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Person</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Person</em>' reference.
+ * @see #setPerson(Person)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage#getMemberToPerson_Person()
+ * @model annotation="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName body='middle' upper='1'"
+ * @generated
+ */
+ Person getPerson();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getPerson <em>Person</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Person</em>' reference.
+ * @see #getPerson()
+ * @generated
+ */
+ void setPerson(Person value);
+
+ /**
+ * Returns the value of the '<em><b>First Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>First Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>First Name</em>' attribute.
+ * @see #setFirstName(String)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage#getMemberToPerson_FirstName()
+ * @model
+ * @generated
+ */
+ String getFirstName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getFirstName <em>First Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>First Name</em>' attribute.
+ * @see #getFirstName()
+ * @generated
+ */
+ void setFirstName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Family Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Family Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Family Name</em>' attribute.
+ * @see #setFamilyName(String)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage#getMemberToPerson_FamilyName()
+ * @model
+ * @generated
+ */
+ String getFamilyName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson#getFamilyName <em>Family Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Family Name</em>' attribute.
+ * @see #getFamilyName()
+ * @generated
+ */
+ void setFamilyName(String value);
+
+} // MemberToPerson
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Families2PersonsFactoryImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Families2PersonsFactoryImpl.java
new file mode 100644
index 000000000..769ec0edc
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Families2PersonsFactoryImpl.java
@@ -0,0 +1,117 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Female;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Male;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class Families2PersonsFactoryImpl extends EFactoryImpl implements Families2PersonsFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static Families2PersonsFactory init() {
+ try {
+ Families2PersonsFactory theFamilies2PersonsFactory = (Families2PersonsFactory)EPackage.Registry.INSTANCE.getEFactory(Families2PersonsPackage.eNS_URI);
+ if (theFamilies2PersonsFactory != null) {
+ return theFamilies2PersonsFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new Families2PersonsFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Families2PersonsFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case Families2PersonsPackage.MEMBER2_MALE: return createMember2Male();
+ case Families2PersonsPackage.MEMBER2_FEMALE: return createMember2Female();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Member2Male createMember2Male() {
+ Member2MaleImpl member2Male = new Member2MaleImpl();
+ return member2Male;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Member2Female createMember2Female() {
+ Member2FemaleImpl member2Female = new Member2FemaleImpl();
+ return member2Female;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Families2PersonsPackage getFamilies2PersonsPackage() {
+ return (Families2PersonsPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static Families2PersonsPackage getPackage() {
+ return Families2PersonsPackage.eINSTANCE;
+ }
+
+} //Families2PersonsFactoryImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Families2PersonsPackageImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Families2PersonsPackageImpl.java
new file mode 100644
index 000000000..49b691753
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Families2PersonsPackageImpl.java
@@ -0,0 +1,314 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamiliesPackageImpl;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Female;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Male;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class Families2PersonsPackageImpl extends EPackageImpl implements Families2PersonsPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass memberToPersonEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass member2MaleEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass member2FemaleEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private Families2PersonsPackageImpl() {
+ super(eNS_URI, Families2PersonsFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link Families2PersonsPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static Families2PersonsPackage init() {
+ if (isInited) return (Families2PersonsPackage)EPackage.Registry.INSTANCE.getEPackage(Families2PersonsPackage.eNS_URI);
+
+ // Obtain or create and register package
+ Object ePackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+ Families2PersonsPackageImpl theFamilies2PersonsPackage = (Families2PersonsPackageImpl)(ePackage instanceof Families2PersonsPackageImpl ? ePackage : new Families2PersonsPackageImpl());
+
+ isInited = true;
+
+ // Obtain or create and register interdependencies
+ FamiliesPackageImpl theFamiliesPackage = (FamiliesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(FamiliesPackage.eNS_URI) instanceof FamiliesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(FamiliesPackage.eNS_URI) : FamiliesPackage.eINSTANCE);
+ PersonsPackageImpl thePersonsPackage = (PersonsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PersonsPackage.eNS_URI) instanceof PersonsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PersonsPackage.eNS_URI) : PersonsPackage.eINSTANCE);
+
+ // Create package meta-data objects
+ theFamilies2PersonsPackage.createPackageContents();
+ theFamiliesPackage.createPackageContents();
+ thePersonsPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theFamilies2PersonsPackage.initializePackageContents();
+ theFamiliesPackage.initializePackageContents();
+ thePersonsPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theFamilies2PersonsPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(Families2PersonsPackage.eNS_URI, theFamilies2PersonsPackage);
+ return theFamilies2PersonsPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getMemberToPerson() {
+ return memberToPersonEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getMemberToPerson_Member() {
+ return (EReference)memberToPersonEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getMemberToPerson_Person() {
+ return (EReference)memberToPersonEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getMemberToPerson_FirstName() {
+ return (EAttribute)memberToPersonEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getMemberToPerson_FamilyName() {
+ return (EAttribute)memberToPersonEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getMember2Male() {
+ return member2MaleEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getMember2Female() {
+ return member2FemaleEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Families2PersonsFactory getFamilies2PersonsFactory() {
+ return (Families2PersonsFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ memberToPersonEClass = createEClass(MEMBER_TO_PERSON);
+ createEReference(memberToPersonEClass, MEMBER_TO_PERSON__MEMBER);
+ createEReference(memberToPersonEClass, MEMBER_TO_PERSON__PERSON);
+ createEAttribute(memberToPersonEClass, MEMBER_TO_PERSON__FIRST_NAME);
+ createEAttribute(memberToPersonEClass, MEMBER_TO_PERSON__FAMILY_NAME);
+
+ member2MaleEClass = createEClass(MEMBER2_MALE);
+
+ member2FemaleEClass = createEClass(MEMBER2_FEMALE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ FamiliesPackage theFamiliesPackage = (FamiliesPackage)EPackage.Registry.INSTANCE.getEPackage(FamiliesPackage.eNS_URI);
+ PersonsPackage thePersonsPackage = (PersonsPackage)EPackage.Registry.INSTANCE.getEPackage(PersonsPackage.eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ member2MaleEClass.getESuperTypes().add(this.getMemberToPerson());
+ member2FemaleEClass.getESuperTypes().add(this.getMemberToPerson());
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(memberToPersonEClass, MemberToPerson.class, "MemberToPerson", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getMemberToPerson_Member(), theFamiliesPackage.getMember(), null, "member", null, 0, 1, MemberToPerson.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getMemberToPerson_Person(), thePersonsPackage.getPerson(), null, "person", null, 0, 1, MemberToPerson.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getMemberToPerson_FirstName(), ecorePackage.getEString(), "firstName", null, 0, 1, MemberToPerson.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getMemberToPerson_FamilyName(), ecorePackage.getEString(), "familyName", null, 0, 1, MemberToPerson.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(member2MaleEClass, Member2Male.class, "Member2Male", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(member2FemaleEClass, Member2Female.class, "Member2Female", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ // Create resource
+ createResource(eNS_URI);
+
+ // Create annotations
+ // http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName
+ createEmofAnnotations();
+ }
+
+ /**
+ * Initializes the annotations for <b>http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void createEmofAnnotations() {
+ String source = "http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName";
+ addAnnotation
+ (getMemberToPerson_Member(),
+ source,
+ new String[] {
+ "body", "middle",
+ "upper", "1"
+ });
+ addAnnotation
+ (getMemberToPerson_Person(),
+ source,
+ new String[] {
+ "body", "middle",
+ "upper", "1"
+ });
+ }
+
+} //Families2PersonsPackageImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Member2FemaleImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Member2FemaleImpl.java
new file mode 100644
index 000000000..1ebc71e3e
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Member2FemaleImpl.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Female;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Member2 Female</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class Member2FemaleImpl extends MemberToPersonImpl implements Member2Female {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Member2FemaleImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return Families2PersonsPackage.Literals.MEMBER2_FEMALE;
+ }
+
+
+} //Member2FemaleImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Member2MaleImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Member2MaleImpl.java
new file mode 100644
index 000000000..f70897145
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/Member2MaleImpl.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Male;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Member2 Male</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class Member2MaleImpl extends MemberToPersonImpl implements Member2Male {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Member2MaleImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return Families2PersonsPackage.Literals.MEMBER2_MALE;
+ }
+
+
+} //Member2MaleImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/MemberToPersonImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/MemberToPersonImpl.java
new file mode 100644
index 000000000..387bd960f
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/impl/MemberToPersonImpl.java
@@ -0,0 +1,356 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Member To Person</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.MemberToPersonImpl#getMember <em>Member</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.MemberToPersonImpl#getPerson <em>Person</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.MemberToPersonImpl#getFirstName <em>First Name</em>}</li>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.MemberToPersonImpl#getFamilyName <em>Family Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class MemberToPersonImpl extends MinimalEObjectImpl.Container implements MemberToPerson {
+ /**
+ * The cached value of the '{@link #getMember() <em>Member</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMember()
+ * @generated
+ * @ordered
+ */
+ protected Member member;
+
+ /**
+ * The cached value of the '{@link #getPerson() <em>Person</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPerson()
+ * @generated
+ * @ordered
+ */
+ protected Person person;
+
+ /**
+ * The default value of the '{@link #getFirstName() <em>First Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFirstName()
+ * @generated
+ * @ordered
+ */
+ protected static final String FIRST_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getFirstName() <em>First Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFirstName()
+ * @generated
+ * @ordered
+ */
+ protected String firstName = FIRST_NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getFamilyName() <em>Family Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFamilyName()
+ * @generated
+ * @ordered
+ */
+ protected static final String FAMILY_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getFamilyName() <em>Family Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFamilyName()
+ * @generated
+ * @ordered
+ */
+ protected String familyName = FAMILY_NAME_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MemberToPersonImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return Families2PersonsPackage.Literals.MEMBER_TO_PERSON;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Member getMember() {
+ if (member != null && member.eIsProxy()) {
+ InternalEObject oldMember = (InternalEObject)member;
+ member = (Member)eResolveProxy(oldMember);
+ if (member != oldMember) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, Families2PersonsPackage.MEMBER_TO_PERSON__MEMBER, oldMember, member));
+ }
+ }
+ return member;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Member basicGetMember() {
+ return member;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setMember(Member newMember) {
+ Member oldMember = member;
+ member = newMember;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, Families2PersonsPackage.MEMBER_TO_PERSON__MEMBER, oldMember, member));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Person getPerson() {
+ if (person != null && person.eIsProxy()) {
+ InternalEObject oldPerson = (InternalEObject)person;
+ person = (Person)eResolveProxy(oldPerson);
+ if (person != oldPerson) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, Families2PersonsPackage.MEMBER_TO_PERSON__PERSON, oldPerson, person));
+ }
+ }
+ return person;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Person basicGetPerson() {
+ return person;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setPerson(Person newPerson) {
+ Person oldPerson = person;
+ person = newPerson;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, Families2PersonsPackage.MEMBER_TO_PERSON__PERSON, oldPerson, person));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getFirstName() {
+ return firstName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFirstName(String newFirstName) {
+ String oldFirstName = firstName;
+ firstName = newFirstName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, Families2PersonsPackage.MEMBER_TO_PERSON__FIRST_NAME, oldFirstName, firstName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getFamilyName() {
+ return familyName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFamilyName(String newFamilyName) {
+ String oldFamilyName = familyName;
+ familyName = newFamilyName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, Families2PersonsPackage.MEMBER_TO_PERSON__FAMILY_NAME, oldFamilyName, familyName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case Families2PersonsPackage.MEMBER_TO_PERSON__MEMBER:
+ if (resolve) return getMember();
+ return basicGetMember();
+ case Families2PersonsPackage.MEMBER_TO_PERSON__PERSON:
+ if (resolve) return getPerson();
+ return basicGetPerson();
+ case Families2PersonsPackage.MEMBER_TO_PERSON__FIRST_NAME:
+ return getFirstName();
+ case Families2PersonsPackage.MEMBER_TO_PERSON__FAMILY_NAME:
+ return getFamilyName();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case Families2PersonsPackage.MEMBER_TO_PERSON__MEMBER:
+ setMember((Member)newValue);
+ return;
+ case Families2PersonsPackage.MEMBER_TO_PERSON__PERSON:
+ setPerson((Person)newValue);
+ return;
+ case Families2PersonsPackage.MEMBER_TO_PERSON__FIRST_NAME:
+ setFirstName((String)newValue);
+ return;
+ case Families2PersonsPackage.MEMBER_TO_PERSON__FAMILY_NAME:
+ setFamilyName((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case Families2PersonsPackage.MEMBER_TO_PERSON__MEMBER:
+ setMember((Member)null);
+ return;
+ case Families2PersonsPackage.MEMBER_TO_PERSON__PERSON:
+ setPerson((Person)null);
+ return;
+ case Families2PersonsPackage.MEMBER_TO_PERSON__FIRST_NAME:
+ setFirstName(FIRST_NAME_EDEFAULT);
+ return;
+ case Families2PersonsPackage.MEMBER_TO_PERSON__FAMILY_NAME:
+ setFamilyName(FAMILY_NAME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case Families2PersonsPackage.MEMBER_TO_PERSON__MEMBER:
+ return member != null;
+ case Families2PersonsPackage.MEMBER_TO_PERSON__PERSON:
+ return person != null;
+ case Families2PersonsPackage.MEMBER_TO_PERSON__FIRST_NAME:
+ return FIRST_NAME_EDEFAULT == null ? firstName != null : !FIRST_NAME_EDEFAULT.equals(firstName);
+ case Families2PersonsPackage.MEMBER_TO_PERSON__FAMILY_NAME:
+ return FAMILY_NAME_EDEFAULT == null ? familyName != null : !FAMILY_NAME_EDEFAULT.equals(familyName);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (firstName: ");
+ result.append(firstName);
+ result.append(", familyName: ");
+ result.append(familyName);
+ result.append(')');
+ return result.toString();
+ }
+
+
+} //MemberToPersonImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/util/Families2PersonsAdapterFactory.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/util/Families2PersonsAdapterFactory.java
new file mode 100644
index 000000000..66c4e50df
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/util/Families2PersonsAdapterFactory.java
@@ -0,0 +1,165 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Female;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Male;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage
+ * @generated
+ */
+public class Families2PersonsAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static Families2PersonsPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Families2PersonsAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = Families2PersonsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Families2PersonsSwitch<@Nullable Adapter> modelSwitch =
+ new Families2PersonsSwitch<@Nullable Adapter>() {
+ @Override
+ public Adapter caseMemberToPerson(MemberToPerson object) {
+ return createMemberToPersonAdapter();
+ }
+ @Override
+ public Adapter caseMember2Male(Member2Male object) {
+ return createMember2MaleAdapter();
+ }
+ @Override
+ public Adapter caseMember2Female(Member2Female object) {
+ return createMember2FemaleAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson <em>Member To Person</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson
+ * @generated
+ */
+ public Adapter createMemberToPersonAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Male <em>Member2 Male</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Male
+ * @generated
+ */
+ public Adapter createMember2MaleAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Female <em>Member2 Female</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Female
+ * @generated
+ */
+ public Adapter createMember2FemaleAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //Families2PersonsAdapterFactory
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/util/Families2PersonsSwitch.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/util/Families2PersonsSwitch.java
new file mode 100644
index 000000000..1afce5492
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Families2Persons/util/Families2PersonsSwitch.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Female;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Member2Male;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.MemberToPerson;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage
+ * @generated
+ */
+public class Families2PersonsSwitch<@Nullable T> extends Switch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static Families2PersonsPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Families2PersonsSwitch() {
+ if (modelPackage == null) {
+ modelPackage = Families2PersonsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case Families2PersonsPackage.MEMBER_TO_PERSON: {
+ MemberToPerson memberToPerson = (MemberToPerson)theEObject;
+ T result = caseMemberToPerson(memberToPerson);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case Families2PersonsPackage.MEMBER2_MALE: {
+ Member2Male member2Male = (Member2Male)theEObject;
+ T result = caseMember2Male(member2Male);
+ if (result == null) result = caseMemberToPerson(member2Male);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case Families2PersonsPackage.MEMBER2_FEMALE: {
+ Member2Female member2Female = (Member2Female)theEObject;
+ T result = caseMember2Female(member2Female);
+ if (result == null) result = caseMemberToPerson(member2Female);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Member To Person</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Member To Person</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMemberToPerson(MemberToPerson object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Member2 Male</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Member2 Male</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMember2Male(Member2Male object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Member2 Female</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Member2 Female</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMember2Female(Member2Female object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //Families2PersonsSwitch
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Female.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Female.java
new file mode 100644
index 000000000..35c6998b6
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Female.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Female</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage#getFemale()
+ * @model
+ * @generated
+ */
+public interface Female extends Person {
+} // Female
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Male.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Male.java
new file mode 100644
index 000000000..26c10262c
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Male.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Male</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage#getMale()
+ * @model
+ * @generated
+ */
+public interface Male extends Person {
+} // Male
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Person.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Person.java
new file mode 100644
index 000000000..881961dd3
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/Person.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Person</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person#getFullName <em>Full Name</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage#getPerson()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Person extends EObject {
+ /**
+ * Returns the value of the '<em><b>Full Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Full Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Full Name</em>' attribute.
+ * @see #setFullName(String)
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage#getPerson_FullName()
+ * @model unique="false" required="true" ordered="false"
+ * @generated
+ */
+ String getFullName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person#getFullName <em>Full Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Full Name</em>' attribute.
+ * @see #getFullName()
+ * @generated
+ */
+ void setFullName(String value);
+
+} // Person
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/PersonsFactory.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/PersonsFactory.java
new file mode 100644
index 000000000..c49f1c281
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/PersonsFactory.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage
+ * @generated
+ */
+public interface PersonsFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ PersonsFactory eINSTANCE = org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Male</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Male</em>'.
+ * @generated
+ */
+ Male createMale();
+
+ /**
+ * Returns a new object of class '<em>Female</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Female</em>'.
+ * @generated
+ */
+ Female createFemale();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ PersonsPackage getPersonsPackage();
+
+} //PersonsFactory
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/PersonsPackage.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/PersonsPackage.java
new file mode 100644
index 000000000..abb0210fb
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/PersonsPackage.java
@@ -0,0 +1,282 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface PersonsPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "Persons";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Persons";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "persons";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ PersonsPackage eINSTANCE = org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonImpl <em>Person</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsPackageImpl#getPerson()
+ * @generated
+ */
+ int PERSON = 0;
+
+ /**
+ * The feature id for the '<em><b>Full Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PERSON__FULL_NAME = 0;
+
+ /**
+ * The number of structural features of the '<em>Person</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PERSON_FEATURE_COUNT = 1;
+
+ /**
+ * The number of operations of the '<em>Person</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PERSON_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.MaleImpl <em>Male</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.MaleImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsPackageImpl#getMale()
+ * @generated
+ */
+ int MALE = 1;
+
+ /**
+ * The feature id for the '<em><b>Full Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MALE__FULL_NAME = PERSON__FULL_NAME;
+
+ /**
+ * The number of structural features of the '<em>Male</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MALE_FEATURE_COUNT = PERSON_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Male</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MALE_OPERATION_COUNT = PERSON_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.FemaleImpl <em>Female</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.FemaleImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsPackageImpl#getFemale()
+ * @generated
+ */
+ int FEMALE = 2;
+
+ /**
+ * The feature id for the '<em><b>Full Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEMALE__FULL_NAME = PERSON__FULL_NAME;
+
+ /**
+ * The number of structural features of the '<em>Female</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEMALE_FEATURE_COUNT = PERSON_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Female</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEMALE_OPERATION_COUNT = PERSON_OPERATION_COUNT + 0;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person <em>Person</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Person</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person
+ * @generated
+ */
+ EClass getPerson();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person#getFullName <em>Full Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Full Name</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person#getFullName()
+ * @see #getPerson()
+ * @generated
+ */
+ EAttribute getPerson_FullName();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Male <em>Male</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Male</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Male
+ * @generated
+ */
+ EClass getMale();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Female <em>Female</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Female</em>'.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Female
+ * @generated
+ */
+ EClass getFemale();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ PersonsFactory getPersonsFactory();
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonImpl <em>Person</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsPackageImpl#getPerson()
+ * @generated
+ */
+ EClass PERSON = eINSTANCE.getPerson();
+
+ /**
+ * The meta object literal for the '<em><b>Full Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute PERSON__FULL_NAME = eINSTANCE.getPerson_FullName();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.MaleImpl <em>Male</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.MaleImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsPackageImpl#getMale()
+ * @generated
+ */
+ EClass MALE = eINSTANCE.getMale();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.FemaleImpl <em>Female</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.FemaleImpl
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonsPackageImpl#getFemale()
+ * @generated
+ */
+ EClass FEMALE = eINSTANCE.getFemale();
+
+ }
+
+} //PersonsPackage
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/FemaleImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/FemaleImpl.java
new file mode 100644
index 000000000..729797554
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/FemaleImpl.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Female;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Female</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class FemaleImpl extends PersonImpl implements Female {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FemaleImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return PersonsPackage.Literals.FEMALE;
+ }
+
+
+} //FemaleImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/MaleImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/MaleImpl.java
new file mode 100644
index 000000000..619edc480
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/MaleImpl.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Male;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Male</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class MaleImpl extends PersonImpl implements Male {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MaleImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return PersonsPackage.Literals.MALE;
+ }
+
+
+} //MaleImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonImpl.java
new file mode 100644
index 000000000..a26751646
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonImpl.java
@@ -0,0 +1,173 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Person</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl.PersonImpl#getFullName <em>Full Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class PersonImpl extends MinimalEObjectImpl.Container implements Person {
+ /**
+ * The default value of the '{@link #getFullName() <em>Full Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFullName()
+ * @generated
+ * @ordered
+ */
+ protected static final String FULL_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getFullName() <em>Full Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFullName()
+ * @generated
+ * @ordered
+ */
+ protected String fullName = FULL_NAME_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected PersonImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return PersonsPackage.Literals.PERSON;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getFullName() {
+ return fullName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFullName(String newFullName) {
+ String oldFullName = fullName;
+ fullName = newFullName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, PersonsPackage.PERSON__FULL_NAME, oldFullName, fullName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case PersonsPackage.PERSON__FULL_NAME:
+ return getFullName();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case PersonsPackage.PERSON__FULL_NAME:
+ setFullName((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case PersonsPackage.PERSON__FULL_NAME:
+ setFullName(FULL_NAME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case PersonsPackage.PERSON__FULL_NAME:
+ return FULL_NAME_EDEFAULT == null ? fullName != null : !FULL_NAME_EDEFAULT.equals(fullName);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (fullName: ");
+ result.append(fullName);
+ result.append(')');
+ return result.toString();
+ }
+
+
+} //PersonImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonsFactoryImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonsFactoryImpl.java
new file mode 100644
index 000000000..93a5b4296
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonsFactoryImpl.java
@@ -0,0 +1,117 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Female;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Male;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PersonsFactoryImpl extends EFactoryImpl implements PersonsFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static PersonsFactory init() {
+ try {
+ PersonsFactory thePersonsFactory = (PersonsFactory)EPackage.Registry.INSTANCE.getEFactory(PersonsPackage.eNS_URI);
+ if (thePersonsFactory != null) {
+ return thePersonsFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new PersonsFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PersonsFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case PersonsPackage.MALE: return createMale();
+ case PersonsPackage.FEMALE: return createFemale();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Male createMale() {
+ MaleImpl male = new MaleImpl();
+ return male;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Female createFemale() {
+ FemaleImpl female = new FemaleImpl();
+ return female;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public PersonsPackage getPersonsPackage() {
+ return (PersonsPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static PersonsPackage getPackage() {
+ return PersonsPackage.eINSTANCE;
+ }
+
+} //PersonsFactoryImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonsPackageImpl.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonsPackageImpl.java
new file mode 100644
index 000000000..31390880d
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/impl/PersonsPackageImpl.java
@@ -0,0 +1,245 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.impl.FamiliesPackageImpl;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.impl.Families2PersonsPackageImpl;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Female;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Male;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PersonsPackageImpl extends EPackageImpl implements PersonsPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass personEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass maleEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass femaleEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private PersonsPackageImpl() {
+ super(eNS_URI, PersonsFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link PersonsPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static PersonsPackage init() {
+ if (isInited) return (PersonsPackage)EPackage.Registry.INSTANCE.getEPackage(PersonsPackage.eNS_URI);
+
+ // Obtain or create and register package
+ Object ePackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+ PersonsPackageImpl thePersonsPackage = (PersonsPackageImpl)(ePackage instanceof PersonsPackageImpl ? ePackage : new PersonsPackageImpl());
+
+ isInited = true;
+
+ // Obtain or create and register interdependencies
+ Families2PersonsPackageImpl theFamilies2PersonsPackage = (Families2PersonsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Families2PersonsPackage.eNS_URI) instanceof Families2PersonsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Families2PersonsPackage.eNS_URI) : Families2PersonsPackage.eINSTANCE);
+ FamiliesPackageImpl theFamiliesPackage = (FamiliesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(FamiliesPackage.eNS_URI) instanceof FamiliesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(FamiliesPackage.eNS_URI) : FamiliesPackage.eINSTANCE);
+
+ // Create package meta-data objects
+ thePersonsPackage.createPackageContents();
+ theFamilies2PersonsPackage.createPackageContents();
+ theFamiliesPackage.createPackageContents();
+
+ // Initialize created meta-data
+ thePersonsPackage.initializePackageContents();
+ theFamilies2PersonsPackage.initializePackageContents();
+ theFamiliesPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ thePersonsPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(PersonsPackage.eNS_URI, thePersonsPackage);
+ return thePersonsPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getPerson() {
+ return personEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getPerson_FullName() {
+ return (EAttribute)personEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getMale() {
+ return maleEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getFemale() {
+ return femaleEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public PersonsFactory getPersonsFactory() {
+ return (PersonsFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ personEClass = createEClass(PERSON);
+ createEAttribute(personEClass, PERSON__FULL_NAME);
+
+ maleEClass = createEClass(MALE);
+
+ femaleEClass = createEClass(FEMALE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ maleEClass.getESuperTypes().add(this.getPerson());
+ femaleEClass.getESuperTypes().add(this.getPerson());
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(personEClass, Person.class, "Person", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getPerson_FullName(), ecorePackage.getEString(), "fullName", null, 1, 1, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(maleEClass, Male.class, "Male", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(femaleEClass, Female.class, "Female", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //PersonsPackageImpl
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/util/PersonsAdapterFactory.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/util/PersonsAdapterFactory.java
new file mode 100644
index 000000000..3fb8d03e4
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/util/PersonsAdapterFactory.java
@@ -0,0 +1,165 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Female;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Male;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage
+ * @generated
+ */
+public class PersonsAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static PersonsPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PersonsAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = PersonsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected PersonsSwitch<@Nullable Adapter> modelSwitch =
+ new PersonsSwitch<@Nullable Adapter>() {
+ @Override
+ public Adapter casePerson(Person object) {
+ return createPersonAdapter();
+ }
+ @Override
+ public Adapter caseMale(Male object) {
+ return createMaleAdapter();
+ }
+ @Override
+ public Adapter caseFemale(Female object) {
+ return createFemaleAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person <em>Person</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person
+ * @generated
+ */
+ public Adapter createPersonAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Male <em>Male</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Male
+ * @generated
+ */
+ public Adapter createMaleAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Female <em>Female</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Female
+ * @generated
+ */
+ public Adapter createFemaleAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //PersonsAdapterFactory
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/util/PersonsSwitch.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/util/PersonsSwitch.java
new file mode 100644
index 000000000..75cfa5400
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/Persons/util/PersonsSwitch.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2015, 2016 Willink Transformations 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:
+ * E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Female;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Male;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.Person;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage
+ * @generated
+ */
+public class PersonsSwitch<@Nullable T> extends Switch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static PersonsPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PersonsSwitch() {
+ if (modelPackage == null) {
+ modelPackage = PersonsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case PersonsPackage.PERSON: {
+ Person person = (Person)theEObject;
+ T result = casePerson(person);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case PersonsPackage.MALE: {
+ Male male = (Male)theEObject;
+ T result = caseMale(male);
+ if (result == null) result = casePerson(male);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case PersonsPackage.FEMALE: {
+ Female female = (Female)theEObject;
+ T result = caseFemale(female);
+ if (result == null) result = casePerson(female);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Person</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Person</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T casePerson(Person object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Male</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Male</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMale(Male object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Female</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Female</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseFemale(Female object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //PersonsSwitch
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/tx/Families2Persons.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/tx/Families2Persons.java
new file mode 100644
index 000000000..144028eea
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src-copy/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/tx/Families2Persons.java
@@ -0,0 +1,440 @@
+/*******************************************************************************
+ * «codeGenHelper.getCopyright(' * ')»
+ *
+ * This code is 100% auto-generated
+ * using: org.eclipse.qvtd.codegen.qvti.java.QVTiCodeGenerator
+ *
+ * Do not edit it.
+ ********************************************************************************/
+
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.tx;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+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.logical.BooleanNotOperation2;
+import org.eclipse.ocl.pivot.library.string.StringConcatOperation;
+import org.eclipse.ocl.pivot.utilities.ValueUtil;
+import org.eclipse.ocl.pivot.values.InvalidValueException;
+import org.eclipse.ocl.pivot.values.SetValue;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.Families2PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
+import org.eclipse.qvtd.runtime.evaluation.AbstractTransformer;
+import org.eclipse.qvtd.runtime.evaluation.AbstractValueOccurrence;
+import org.eclipse.qvtd.runtime.internal.evaluation.AbstractComputationConstructor;
+import org.eclipse.qvtd.runtime.library.model.ModelObjectsOfKindOperation;
+
+/**
+ * The Families2Persons 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 Families2Persons extends AbstractTransformer
+{
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull RootPackageId PACKid_org = IdManager.getRootPackageId("org");
+ 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 NestedPackageId PACKid_eclipse = PACKid_org.getNestedPackageId("eclipse");
+ 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 NsURIPackageId PACKid_http_c_s_s_www_eclipse_org_s_qvtd_s_xtext_s_qvtcore_s_tests_s_Upper2Lower_s_1_0_s_Families = IdManager.getNsURIPackageId("http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Families", null, FamiliesPackage.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_qvtd_s_xtext_s_qvtcore_s_tests_s_Upper2Lower_s_1_0_s_Families2Persons = IdManager.getNsURIPackageId("http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Families2Persons", null, Families2PersonsPackage.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_qvtd_s_xtext_s_qvtcore_s_tests_s_Upper2Lower_s_1_0_s_Persons = IdManager.getNsURIPackageId("http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Persons", null, PersonsPackage.eINSTANCE);
+ 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_Family = PACKid_http_c_s_s_www_eclipse_org_s_qvtd_s_xtext_s_qvtcore_s_tests_s_Upper2Lower_s_1_0_s_Families.getClassId("Family", 0);
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Female = PACKid_http_c_s_s_www_eclipse_org_s_qvtd_s_xtext_s_qvtcore_s_tests_s_Upper2Lower_s_1_0_s_Persons.getClassId("Female", 0);
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Male = PACKid_http_c_s_s_www_eclipse_org_s_qvtd_s_xtext_s_qvtcore_s_tests_s_Upper2Lower_s_1_0_s_Persons.getClassId("Male", 0);
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Member = PACKid_http_c_s_s_www_eclipse_org_s_qvtd_s_xtext_s_qvtcore_s_tests_s_Upper2Lower_s_1_0_s_Families.getClassId("Member", 0);
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Member2Female = PACKid_http_c_s_s_www_eclipse_org_s_qvtd_s_xtext_s_qvtcore_s_tests_s_Upper2Lower_s_1_0_s_Families2Persons.getClassId("Member2Female", 0);
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Member2Male = PACKid_http_c_s_s_www_eclipse_org_s_qvtd_s_xtext_s_qvtcore_s_tests_s_Upper2Lower_s_1_0_s_Families2Persons.getClassId("Member2Male", 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 NestedPackageId PACKid_qvtd = PACKid_eclipse.getNestedPackageId("qvtd");
+ public static final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.NonNull String STR__32 = " ";
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NestedPackageId PACKid_xtext = PACKid_qvtd.getNestedPackageId("xtext");
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_Member = TypeId.SET.getSpecializedId(CLSSid_Member);
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NestedPackageId PACKid_qvtcore = PACKid_xtext.getNestedPackageId("qvtcore");
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NestedPackageId PACKid_tests = PACKid_qvtcore.getNestedPackageId("tests");
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull NestedPackageId PACKid_families2persons = PACKid_tests.getNestedPackageId("families2persons");
+ public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Families2Persons = PACKid_families2persons.getClassId("Families2Persons", 0);
+
+ /*
+ * 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_Member // 0 => Member
+ };
+
+ /*
+ * 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 : Member -> {Member}
+ };
+
+ protected final @NonNull AbstractComputationConstructor FTOR_isFemale = new AbstractComputationConstructor(idResolver)
+ {
+ @Override
+ public @NonNull FUN_isFemale newInstance(@Nullable Object @NonNull [] values) {
+ return new FUN_isFemale(values);
+ }
+ };
+
+ protected final @NonNull AbstractComputationConstructor FTOR_familyName = new AbstractComputationConstructor(idResolver)
+ {
+ @Override
+ public @NonNull FUN_familyName newInstance(@Nullable Object @NonNull [] values) {
+ return new FUN_familyName(values);
+ }
+ };
+
+
+ public Families2Persons(final @NonNull Executor executor) {
+ super(executor, new @NonNull String[] {"family", "person", "middle"}, null, classIndex2classId, classIndex2allClassIndexes);
+ }
+
+ @Override
+ public boolean run() {
+ return MAP___root__() && invocationManager.flush();
+ }
+
+ /**
+ * ::isFemale(member : Families::Member[1]) : Boolean[1]
+ */
+ protected class FUN_isFemale extends AbstractValueOccurrence
+ {
+ protected final @NonNull Families2Persons self;
+ protected /*@NonInvalid*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.NonNull Member member;
+ protected final /*@NonInvalid*/ boolean symbol_3;
+
+ /**
+ *
+ * if not2 member.familyMother.oclIsUndefined()
+ * then true
+ * else
+ * if not2 member.familyDaughter.oclIsUndefined()
+ * then true
+ * else false
+ * endif
+ * endif
+ */
+ public FUN_isFemale(/*Nullable*/ Object @NonNull [] boundValues) {
+ this.self = (Families2Persons)boundValues[0];
+ this.member = (Member)boundValues[1];
+ /*@Caught*/ @Nullable Object CAUGHT_familyMother;
+ try {
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.Nullable Family familyMother = member.getFamilyMother();
+ CAUGHT_familyMother = familyMother;
+ }
+ catch (Exception e) {
+ CAUGHT_familyMother = ValueUtil.createInvalidValue(e);
+ }
+ final /*@NonInvalid*/ boolean symbol_0 = (CAUGHT_familyMother == null) || (CAUGHT_familyMother instanceof InvalidValueException);
+ final /*@NonInvalid*/ boolean not2 = BooleanNotOperation2.INSTANCE.evaluate(symbol_0).booleanValue();
+ /*@NonInvalid*/ boolean symbol_3;
+ if (not2) {
+ symbol_3 = ValueUtil.TRUE_VALUE;
+ }
+ else {
+ /*@Caught*/ @Nullable Object CAUGHT_familyDaughter;
+ try {
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.Nullable Family familyDaughter = member.getFamilyDaughter();
+ CAUGHT_familyDaughter = familyDaughter;
+ }
+ catch (Exception e) {
+ CAUGHT_familyDaughter = ValueUtil.createInvalidValue(e);
+ }
+ final /*@NonInvalid*/ boolean symbol_1 = (CAUGHT_familyDaughter == null) || (CAUGHT_familyDaughter instanceof InvalidValueException);
+ final /*@NonInvalid*/ boolean not2_0 = BooleanNotOperation2.INSTANCE.evaluate(symbol_1).booleanValue();
+ /*@NonInvalid*/ boolean symbol_2;
+ if (not2_0) {
+ symbol_2 = ValueUtil.TRUE_VALUE;
+ }
+ else {
+ symbol_2 = ValueUtil.FALSE_VALUE;
+ }
+ symbol_3 = symbol_2;
+ }
+ this.symbol_3 = symbol_3;
+ }
+
+ @Override
+ public @Nullable Object getResult() {
+ return symbol_3;
+ }
+
+ @Override
+ public boolean isEqual(@NonNull IdResolver idResolver, @Nullable Object @NonNull [] thoseValues) {
+ return this.self == thoseValues[0]
+ && idResolver.oclEquals(this.member, thoseValues[1]);
+ }
+ }
+
+ /**
+ * ::familyName(member : Families::Member[1]) : String[1]
+ */
+ protected class FUN_familyName extends AbstractValueOccurrence
+ {
+ protected final @NonNull Families2Persons self;
+ protected /*@NonInvalid*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.NonNull Member member_0;
+ protected final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String symbol_5;
+
+ /**
+ *
+ * if not2 member.familyFather.oclIsUndefined()
+ * then member.familyFather.lastName
+ * else
+ * if not2 member.familyMother.oclIsUndefined()
+ * then member.familyMother.lastName
+ * else
+ * if not2 member.familySon.oclIsUndefined()
+ * then member.familySon.lastName
+ * else member.familyDaughter.lastName
+ * endif
+ * endif
+ * endif
+ */
+ public FUN_familyName(/*Nullable*/ Object @NonNull [] boundValues) {
+ this.self = (Families2Persons)boundValues[0];
+ this.member_0 = (Member)boundValues[1];
+ /*@Caught*/ @Nullable Object CAUGHT_familyFather;
+ try {
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.Nullable Family familyFather = member_0.getFamilyFather();
+ CAUGHT_familyFather = familyFather;
+ }
+ catch (Exception e) {
+ CAUGHT_familyFather = ValueUtil.createInvalidValue(e);
+ }
+ final /*@NonInvalid*/ boolean symbol_0 = (CAUGHT_familyFather == null) || (CAUGHT_familyFather instanceof InvalidValueException);
+ final /*@NonInvalid*/ boolean not2 = BooleanNotOperation2.INSTANCE.evaluate(symbol_0).booleanValue();
+ /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String symbol_5;
+ if (not2) {
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.Nullable Family familyFather_0 = member_0.getFamilyFather();
+ if (familyFather_0 == null) {
+ throw new InvalidValueException("Null source for \'\'http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Families\'::Family::lastName\'");
+ }
+ @SuppressWarnings("null")
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String lastName = familyFather_0.getLastName();
+ symbol_5 = lastName;
+ }
+ else {
+ /*@Caught*/ @Nullable Object CAUGHT_familyMother;
+ try {
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.Nullable Family familyMother = member_0.getFamilyMother();
+ CAUGHT_familyMother = familyMother;
+ }
+ catch (Exception e) {
+ CAUGHT_familyMother = ValueUtil.createInvalidValue(e);
+ }
+ final /*@NonInvalid*/ boolean symbol_1 = (CAUGHT_familyMother == null) || (CAUGHT_familyMother instanceof InvalidValueException);
+ final /*@NonInvalid*/ boolean not2_0 = BooleanNotOperation2.INSTANCE.evaluate(symbol_1).booleanValue();
+ /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String symbol_4;
+ if (not2_0) {
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.Nullable Family familyMother_0 = member_0.getFamilyMother();
+ if (familyMother_0 == null) {
+ throw new InvalidValueException("Null source for \'\'http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Families\'::Family::lastName\'");
+ }
+ @SuppressWarnings("null")
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String lastName_0 = familyMother_0.getLastName();
+ symbol_4 = lastName_0;
+ }
+ else {
+ /*@Caught*/ @Nullable Object CAUGHT_familySon;
+ try {
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.Nullable Family familySon = member_0.getFamilySon();
+ CAUGHT_familySon = familySon;
+ }
+ catch (Exception e) {
+ CAUGHT_familySon = ValueUtil.createInvalidValue(e);
+ }
+ final /*@NonInvalid*/ boolean symbol_2 = (CAUGHT_familySon == null) || (CAUGHT_familySon instanceof InvalidValueException);
+ final /*@NonInvalid*/ boolean not2_1 = BooleanNotOperation2.INSTANCE.evaluate(symbol_2).booleanValue();
+ /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String symbol_3;
+ if (not2_1) {
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.Nullable Family familySon_0 = member_0.getFamilySon();
+ if (familySon_0 == null) {
+ throw new InvalidValueException("Null source for \'\'http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Families\'::Family::lastName\'");
+ }
+ @SuppressWarnings("null")
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String lastName_1 = familySon_0.getLastName();
+ symbol_3 = lastName_1;
+ }
+ else {
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.Nullable Family familyDaughter = member_0.getFamilyDaughter();
+ if (familyDaughter == null) {
+ throw new InvalidValueException("Null source for \'\'http://www.eclipse.org/qvtd/xtext/qvtcore/tests/Upper2Lower/1.0/Families\'::Family::lastName\'");
+ }
+ @SuppressWarnings("null")
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String lastName_2 = familyDaughter.getLastName();
+ symbol_3 = lastName_2;
+ }
+ symbol_4 = symbol_3;
+ }
+ symbol_5 = symbol_4;
+ }
+ this.symbol_5 = symbol_5;
+ }
+
+ @Override
+ public @Nullable Object getResult() {
+ return symbol_5;
+ }
+
+ @Override
+ public boolean isEqual(@NonNull IdResolver idResolver, @Nullable Object @NonNull [] thoseValues) {
+ return this.self == thoseValues[0]
+ && idResolver.oclEquals(this.member_0, thoseValues[1]);
+ }
+ }
+
+ /**
+ *
+ * map __root__ in Families2Persons {
+ *
+ * var _'\u00ABMember\u00BB' : Set(Families::Member) := family.objectsOfKind(Families::Member)
+ * ;
+ * ::ji_Member : Set(Families::Member)[*|1]for loop0 : Families::Member[1] in ji_Member {
+ * call _'m_Member2Female_Member_Boolean.r0' {
+ * s iterates loop0 : Families::Member[1];
+ * }}
+ * for loop0 : Families::Member[1] in ji_Member {
+ * call _'m_Member2Male_Member_Boolean.r0' {
+ * s iterates loop0 : Families::Member[1];
+ * }}
+ */
+ protected boolean MAP___root__() {
+ try {
+ 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_Families_c_c_Member_0 = idResolver.getClass(CLSSid_Member, null);
+ final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue objectsOfKind = ModelObjectsOfKindOperation.INSTANCE.evaluate(executor, SET_CLSSid_Member, models[0/*family*/], TYP_Families_c_c_Member_0);
+ // connection variables
+ final SetValue.@NonNull Accumulator ji_Member = createUnenforcedSetAccumulatorValue(SET_CLSSid_Member);
+ for (org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.NonNull Member iterator : ValueUtil.typedIterable(Member.class, objectsOfKind)) {
+ ji_Member.add(iterator);
+ }
+ // mapping statements
+ for (org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.NonNull Member loop0 : ValueUtil.typedIterable(Member.class, ji_Member)) {
+ MAP_m_Member2Female_Member_Boolean_46r0(loop0);
+ }
+ for (org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.NonNull Member loop0_0 : ValueUtil.typedIterable(Member.class, ji_Member)) {
+ MAP_m_Member2Male_Member_Boolean_46r0(loop0_0);
+ }
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable Boolean __root__ = ValueUtil.TRUE_VALUE;
+ return __root__;
+ } catch (Throwable e) {
+ return handleExecutionFailure("MAP___root__", e);
+ }
+ }
+
+ /**
+ *
+ * map _'m_Member2Female_Member_Boolean.r0' in Families2Persons {
+ *
+ * guard:family s : Families::Member[1];
+ * var firstName : String[1] := s.firstName;
+ * check this.isFemale(s);
+ * new:middle m2m : Families2Persons::Member2Female[1];
+ * new:person t : Persons::Female[1];
+ * set m2m.member := s;
+ * set m2m.person := t;
+ * set t.fullName := firstName + ' ' +
+ * this.familyName(s);
+ *
+ */
+ protected boolean MAP_m_Member2Female_Member_Boolean_46r0(final /*@NonInvalid*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.NonNull Member s) {
+ try {
+ @SuppressWarnings("null")
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String firstName = s.getFirstName();
+ final /*@Thrown*/ boolean isFemale = ((FUN_isFemale)FTOR_isFemale.getUniqueComputation(this, s)).symbol_3;
+ /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable Boolean symbol_4;
+ if (isFemale) {
+ // creations
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.@org.eclipse.jdt.annotation.Nullable Member2Female m2m = Families2PersonsFactory.eINSTANCE.createMember2Female();
+ assert m2m != null;
+ models[2/*middle*/].add(m2m);
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.@org.eclipse.jdt.annotation.Nullable Female t = PersonsFactory.eINSTANCE.createFemale();
+ assert t != null;
+ models[1/*person*/].add(t);
+ // mapping statements
+ m2m.setMember(s);
+ m2m.setPerson(t);
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String sum = StringConcatOperation.INSTANCE.evaluate(firstName, STR__32);
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String familyName = ((FUN_familyName)FTOR_familyName.getUniqueComputation(this, s)).symbol_5;
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String sum_0 = StringConcatOperation.INSTANCE.evaluate(sum, familyName);
+ t.setFullName(sum_0);
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable Boolean m_Member2Female_Member_Boolean_r0 = ValueUtil.TRUE_VALUE;
+ symbol_4 = m_Member2Female_Member_Boolean_r0;
+ }
+ else {
+ symbol_4 = ValueUtil.FALSE_VALUE;
+ }
+ return symbol_4;
+ } catch (Throwable e) {
+ return handleExecutionFailure("MAP_m_Member2Female_Member_Boolean_46r0", e);
+ }
+ }
+
+ /**
+ *
+ * map _'m_Member2Male_Member_Boolean.r0' in Families2Persons {
+ *
+ * guard:family s : Families::Member[1];
+ * var firstName : String[1] := s.firstName;
+ * check not2 this.isFemale(s);
+ * new:middle m2m : Families2Persons::Member2Male[1];
+ * new:person t : Persons::Male[1];
+ * set m2m.member := s;
+ * set m2m.person := t;
+ * set t.fullName := firstName + ' ' +
+ * this.familyName(s);
+ *
+ */
+ protected boolean MAP_m_Member2Male_Member_Boolean_46r0(final /*@NonInvalid*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.@org.eclipse.jdt.annotation.NonNull Member s_0) {
+ try {
+ @SuppressWarnings("null")
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String firstName = s_0.getFirstName();
+ final /*@Thrown*/ boolean isFemale = ((FUN_isFemale)FTOR_isFemale.getUniqueComputation(this, s_0)).symbol_3;
+ final /*@Thrown*/ boolean not2 = BooleanNotOperation2.INSTANCE.evaluate(isFemale).booleanValue();
+ /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable Boolean symbol_4;
+ if (not2) {
+ // creations
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families2Persons.@org.eclipse.jdt.annotation.Nullable Member2Male m2m = Families2PersonsFactory.eINSTANCE.createMember2Male();
+ assert m2m != null;
+ models[2/*middle*/].add(m2m);
+ final /*@Thrown*/ org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.@org.eclipse.jdt.annotation.Nullable Male t = PersonsFactory.eINSTANCE.createMale();
+ assert t != null;
+ models[1/*person*/].add(t);
+ // mapping statements
+ m2m.setMember(s_0);
+ m2m.setPerson(t);
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String sum = StringConcatOperation.INSTANCE.evaluate(firstName, STR__32);
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String familyName = ((FUN_familyName)FTOR_familyName.getUniqueComputation(this, s_0)).symbol_5;
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.NonNull String sum_0 = StringConcatOperation.INSTANCE.evaluate(sum, familyName);
+ t.setFullName(sum_0);
+ final /*@Thrown*/ java.lang.@org.eclipse.jdt.annotation.Nullable Boolean m_Member2Male_Member_Boolean_r0 = ValueUtil.TRUE_VALUE;
+ symbol_4 = m_Member2Male_Member_Boolean_r0;
+ }
+ else {
+ symbol_4 = ValueUtil.FALSE_VALUE;
+ }
+ return symbol_4;
+ } catch (Throwable e) {
+ return handleExecutionFailure("MAP_m_Member2Male_Member_Boolean_46r0", e);
+ }
+ }
+}
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/FamiliesGenerator.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/FamiliesGenerator.java
index 06ab5b4d1..5299550af 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/FamiliesGenerator.java
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/FamiliesGenerator.java
@@ -16,9 +16,9 @@ import java.util.concurrent.ThreadLocalRandom;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesFactory;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.Family;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.Member;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
public class FamiliesGenerator
{
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/PrintAndLog.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/PrintAndLog.java
index 8a575cf99..f86c21503 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/PrintAndLog.java
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/PrintAndLog.java
@@ -18,22 +18,28 @@ public class PrintAndLog
}
private PrintWriter writer;
-
+
public PrintAndLog(String testName) throws IOException {
- String testSuiteName = System.getProperty("testSuiteName", null);
- assert testSuiteName != null;
- File file = new File("results/" + testSuiteName + ".csv");
- file.getParentFile().mkdirs();
- writer = new PrintWriter(new FileWriter(file));
+ String testSuiteName = System.getProperty("testSuiteName", null);
+ // assert testSuiteName != null;
+ if (testSuiteName != null) {
+ File file = new File("results/" + testSuiteName + ".csv");
+ file.getParentFile().mkdirs();
+ writer = new PrintWriter(new FileWriter(file));
+ }
}
public void dispose() throws IOException {
- writer.close();
+ if (writer != null) {
+ writer.close();
+ }
+ }
+
+ public PrintStream printf(String format, Object ... args) {
+ if (writer != null) {
+ writer.printf(format, args);
+ writer.flush();
+ }
+ return System.out.printf(format, args);
}
-
- public PrintStream printf(String format, Object ... args) {
- writer.printf(format, args);
- writer.flush();
- return System.out.printf(format, args);
- }
} \ No newline at end of file
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java
index 2df4a6cef..4d6a7bd92 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java
@@ -31,8 +31,8 @@ import org.eclipse.m2m.atl.engine.emfvm.launch.EMFVMLauncher;
import org.eclipse.qvtd.doc.bigmde2016.tests.FamiliesGenerator;
import org.eclipse.qvtd.doc.bigmde2016.tests.PrintAndLog;
import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.BigMDE2016CGTests;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesPackage;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Persons.PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/emftvm/BigMDE2016EMFTVMTests.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/emftvm/BigMDE2016EMFTVMTests.java
index aa0b78799..184e4c2e0 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/emftvm/BigMDE2016EMFTVMTests.java
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/emftvm/BigMDE2016EMFTVMTests.java
@@ -31,8 +31,8 @@ import org.eclipse.m2m.atl.emftvm.util.TimingData;
import org.eclipse.qvtd.doc.bigmde2016.tests.FamiliesGenerator;
import org.eclipse.qvtd.doc.bigmde2016.tests.PrintAndLog;
import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.BigMDE2016CGTests;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesPackage;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Persons.PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/etl/BigMDE2016ETLTests.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/etl/BigMDE2016ETLTests.java
index c5369ff6d..7595a30ff 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/etl/BigMDE2016ETLTests.java
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/etl/BigMDE2016ETLTests.java
@@ -10,18 +10,13 @@ import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.epsilon.emc.emf.EmfModel;
import org.eclipse.epsilon.emc.emf.EmfModelFactory;
import org.eclipse.epsilon.emc.emf.EmfModelFactory.AccessMode;
-import org.eclipse.epsilon.eol.models.IModel;
-import org.eclipse.epsilon.epl.EplModule;
import org.eclipse.epsilon.etl.EtlModule;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.qvtd.doc.bigmde2016.tests.FamiliesGenerator;
import org.eclipse.qvtd.doc.bigmde2016.tests.PrintAndLog;
import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.BigMDE2016CGTests;
-import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.QVTcSimpleUMLGenerator;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesPackage;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Persons.PersonsPackage;
-import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simplerdbms.SimplerdbmsPackage;
-import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml.SimpleumlPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -29,166 +24,92 @@ import org.junit.Test;
import junit.framework.TestCase;
public class BigMDE2016ETLTests extends TestCase {
-
-
+
+
+ @Override
@Before
- public void setUp() throws Exception {
+ public void setUp() throws Exception {
super.setUp();
- }
+ }
- @After
- public void tearDown() throws Exception {
+ @Override
+ @After
+ public void tearDown() throws Exception {
super.tearDown();
- }
-
- static class NullInputStream extends InputStream {
- static final NullInputStream INSTANCE = new NullInputStream();
- private NullInputStream() {}
- public int read() { return -1; }
- public int available() { return 0; }
- }
-
- @Test
- public void testQVTcCompiler_Families2Persons_ETL() throws Exception {
- PrintAndLog logger = new PrintAndLog(getName());
- logger.printf("%s\n", getName());
- /*
- * Initializations
- */
- try {
- int[] tests = PrintAndLog.getTestSizes();
- for (int testSize : tests) {
- EtlModule transformationLauncher = new EtlModule();
- EmfModelFactory modelFactory = EmfModelFactory.getInstance();
- String etlpath = "src/org/eclipse/qvtd/doc/bigmde2016/tests/etl/Families2Persons.etl";
- File file = new File(etlpath);
- transformationLauncher.parse(file);
- /*
- * Load models
- */
-// file = new File("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Families.xmi");
-// EmfModel familiesModel = modelFactory.loadEmfModel("Families", file, FamiliesPackage.eINSTANCE, AccessMode.READ_ONLY);
- EmfModel familiesModel = new EmfModel();
- familiesModel.setName("Families");
- familiesModel.setMetamodelFileBased(false);
- familiesModel.setMetamodelUri(FamiliesPackage.eINSTANCE.getNsURI());
- familiesModel.setResource(new XMIResourceImpl());
- AccessMode.READ_ONLY.applyTo(familiesModel);
- Collection<@NonNull ? extends EObject> rootObjects = FamiliesGenerator.createFamiliesModel(testSize, 9);
- familiesModel.getResource().getContents().clear();
- familiesModel.getResource().getContents().addAll(rootObjects);
-// file = new File("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Persons.xmi");
-// EmfModel personsModel = modelFactory.createEmfModel("Persons", file, PersonsPackage.eINSTANCE, AccessMode.WRITE_ONLY);
- EmfModel personsModel = new EmfModel();
- personsModel.setName("Persons");
- personsModel.setMetamodelFileBased(false);
- personsModel.setMetamodelUri(PersonsPackage.eINSTANCE.getNsURI());
- personsModel.setResource(new XMIResourceImpl());
- AccessMode.WRITE_ONLY.applyTo(personsModel);
- transformationLauncher.getContext().getModelRepository().addModel(familiesModel);
- transformationLauncher.getContext().getModelRepository().addModel(personsModel);
- /*
- * Execute
- */
- logger.printf("%9d, ", 10*testSize);
- BigMDE2016CGTests.garbageCollect();
- long startTime = System.nanoTime();
- transformationLauncher.execute();
- long endTime = System.nanoTime();
-
- logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9);
-
- Resource personsResource = personsModel.getResource();
- Collection<@NonNull EObject> rootObjects2 = personsResource.getContents();
- assert rootObjects2.size() == 9*testSize;
- /*
- * Unload all models
- */
- transformationLauncher.reset();
- transformationLauncher.getContext().getModelRepository().dispose();
- transformationLauncher.getContext().dispose();
- }
- }
- finally {
- logger.dispose();
- }
}
-
- @Test
- public void testQVTcCompiler_UML2RDBMS_ETL() throws Exception {
- PrintAndLog logger = new PrintAndLog(getName());
- logger.printf("%s\n", getName());
+
+ static class NullInputStream extends InputStream {
+ static final NullInputStream INSTANCE = new NullInputStream();
+ private NullInputStream() {}
+ @Override
+ public int read() { return -1; }
+ @Override
+ public int available() { return 0; }
+ }
+
+ @Test
+ public void testQVTcCompiler_Families2Persons_ETL() throws Exception {
+ PrintAndLog logger = new PrintAndLog(getName());
+ logger.printf("%s\n", getName());
/*
* Initializations
*/
- try {
- int[] tests = PrintAndLog.getTestSizes();
- QVTcSimpleUMLGenerator generator = new QVTcSimpleUMLGenerator();
- for (int testSize : tests) {
- // Test model generation
- int nPackages = testSize;
- int nClasses = testSize * 8;
- int nTypes = 0;//testSize;
- int nProperties = 0;//testSize * 45;
- int nAssociations = 0;//testSize * 45;
- int nElements = nPackages + nClasses + nTypes + nProperties + nAssociations;
- Collection<@NonNull ? extends EObject> rootObjects = generator.createSimpleUMLModel(nPackages, nClasses, nTypes, nProperties, nAssociations);
-
- EmfModelFactory modelFactory = EmfModelFactory.getInstance();
- EplModule matchLauncher = new EplModule();
- String eplpath = "src/org/eclipse/qvtd/doc/bigmde2016/tests/etl/UML2RDBMSa.epl";
- File eplfile = new File(eplpath);
- EtlModule transformationLauncher = new EtlModule();
- String etlpath = "src/org/eclipse/qvtd/doc/bigmde2016/tests/etl/UML2RDBMSb.etl";
- File etlfile = new File(etlpath);
- /*
- * Load models
- */
- EmfModel familiesModel = new EmfModel();
- familiesModel.setName("uml");
- familiesModel.setMetamodelFileBased(false);
- familiesModel.setMetamodelUri(SimpleumlPackage.eINSTANCE.getNsURI());
- familiesModel.setResource(new XMIResourceImpl());
- AccessMode.READ_ONLY.applyTo(familiesModel);
- familiesModel.getResource().getContents().clear();
- familiesModel.getResource().getContents().addAll(rootObjects);
- EmfModel personsModel = new EmfModel();
- personsModel.setName("rdbms");
- personsModel.setMetamodelFileBased(false);
- personsModel.setMetamodelUri(SimplerdbmsPackage.eINSTANCE.getNsURI());
- personsModel.setResource(new XMIResourceImpl());
- AccessMode.WRITE_ONLY.applyTo(personsModel);
- transformationLauncher.getContext().getModelRepository().addModel(personsModel);
- transformationLauncher.getContext().getModelRepository().addModel(familiesModel);
- matchLauncher.getContext().getModelRepository().addModel(familiesModel);
- matchLauncher.parse(eplfile);
- transformationLauncher.parse(etlfile);
- /*
- * Execute
- */
- logger.printf("%9d, ", 10*testSize);
- BigMDE2016CGTests.garbageCollect();
- long startTime = System.nanoTime();
- IModel matchModel = (IModel) matchLauncher.execute();
- matchModel.setName("Patterns");
- transformationLauncher.getContext().getModelRepository().addModel(matchModel);
- transformationLauncher.execute();
- long endTime = System.nanoTime();
- logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9);
- Resource personsResource = personsModel.getResource();
- Collection<@NonNull EObject> rootObjects2 = personsResource.getContents();
- assert rootObjects2.size() == 9*testSize;
- /*
- * Unload all models
- */
- transformationLauncher.reset();
- transformationLauncher.getContext().getModelRepository().dispose();
- transformationLauncher.getContext().dispose();
- }
- }
- finally {
- logger.dispose();
- }
- }
+ try {
+ int[] tests = PrintAndLog.getTestSizes();
+ for (int testSize : tests) {
+ EtlModule transformationLauncher = new EtlModule();
+ EmfModelFactory modelFactory = EmfModelFactory.getInstance();
+ String etlpath = "src/org/eclipse/qvtd/doc/bigmde2016/tests/etl/Families2Persons.etl";
+ File file = new File(etlpath);
+ transformationLauncher.parse(file);
+ /*
+ * Load models
+ */
+ // file = new File("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Families.xmi");
+ // EmfModel familiesModel = modelFactory.loadEmfModel("Families", file, FamiliesPackage.eINSTANCE, AccessMode.READ_ONLY);
+ EmfModel familiesModel = new EmfModel();
+ familiesModel.setName("Families");
+ familiesModel.setMetamodelFileBased(false);
+ familiesModel.setMetamodelUri(FamiliesPackage.eINSTANCE.getNsURI());
+ familiesModel.setResource(new XMIResourceImpl());
+ AccessMode.READ_ONLY.applyTo(familiesModel);
+ Collection<@NonNull ? extends EObject> rootObjects = FamiliesGenerator.createFamiliesModel(testSize, 9);
+ familiesModel.getResource().getContents().clear();
+ familiesModel.getResource().getContents().addAll(rootObjects);
+ // file = new File("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Persons.xmi");
+ // EmfModel personsModel = modelFactory.createEmfModel("Persons", file, PersonsPackage.eINSTANCE, AccessMode.WRITE_ONLY);
+ EmfModel personsModel = new EmfModel();
+ personsModel.setName("Persons");
+ personsModel.setMetamodelFileBased(false);
+ personsModel.setMetamodelUri(PersonsPackage.eINSTANCE.getNsURI());
+ personsModel.setResource(new XMIResourceImpl());
+ AccessMode.WRITE_ONLY.applyTo(personsModel);
+ transformationLauncher.getContext().getModelRepository().addModel(familiesModel);
+ transformationLauncher.getContext().getModelRepository().addModel(personsModel);
+ /*
+ * Execute
+ */
+ logger.printf("%9d, ", 10*testSize);
+ BigMDE2016CGTests.garbageCollect();
+ long startTime = System.nanoTime();
+ transformationLauncher.execute();
+ long endTime = System.nanoTime();
+
+ logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9);
+ Resource personsResource = personsModel.getResource();
+ Collection<@NonNull EObject> rootObjects2 = personsResource.getContents();
+ assert rootObjects2.size() == 9*testSize;
+ /*
+ * Unload all models
+ */
+ transformationLauncher.reset();
+ transformationLauncher.getContext().getModelRepository().dispose();
+ transformationLauncher.getContext().dispose();
+ }
+ }
+ finally {
+ logger.dispose();
+ }
+ }
}
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/BigMDE2016CGTests.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/BigMDE2016CGTests.java
index 37bed9a7d..abf110286 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/BigMDE2016CGTests.java
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/BigMDE2016CGTests.java
@@ -18,48 +18,19 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.pivot.resource.ProjectManager;
-import org.eclipse.ocl.pivot.utilities.TreeIterable;
import org.eclipse.qvtd.doc.bigmde2016.tests.FamiliesGenerator;
import org.eclipse.qvtd.doc.bigmde2016.tests.PrintAndLog;
-import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativePivotStandaloneSetup;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesFactory;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Family;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.Member;
import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
-import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor;
-import org.eclipse.qvtd.runtime.evaluation.Transformer;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesFactory;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.Family;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.Member;
-import org.junit.After;
-import org.junit.Before;
import org.junit.Test;
-import cg._umlRdbms.umlRdbms;
-import cg.org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families2Persons;
-import junit.framework.TestCase;
-
/**
* Source code for CG results in BigMDE 2016, Eclipse QVTC First Results paper.
*/
-public class BigMDE2016CGTests extends TestCase
+public class BigMDE2016CGTests extends BigMDE2016_QVTc_AutomatedTests
{
- public static void garbageCollect() throws InterruptedException {
- for (int y = 0; y < 5; y++) {
- System.gc();
- Thread.sleep(100);
- }
- }
-
- @Override
- @Before
- public void setUp() throws Exception {
- super.setUp();
- QVTimperativePivotStandaloneSetup.doSetup();
- }
-
- @Override
- @After
- public void tearDown() throws Exception {
- super.tearDown();
- }
@Test
public void testQVTcCompiler_Families_EcoreUtilCopy() throws Exception {
@@ -93,18 +64,7 @@ public class BigMDE2016CGTests extends TestCase
try {
int[] tests = PrintAndLog.getTestSizes();
for (int testSize : tests) {
- Iterable<@NonNull ? extends Object> rootObjects = FamiliesGenerator.createFamiliesModel(testSize, 9);
- QVTiTransformationExecutor generatedExecutor = new QVTiTransformationExecutor(environmentFactory, Families2Persons.class);
- Transformer transformer = generatedExecutor.getTransformer();
- transformer.addRootObjects("family", rootObjects);
- garbageCollect();
- logger.printf("%9d, ", 10*testSize);
- long startTime = System.nanoTime();
- transformer.run();
- long endTime = System.nanoTime();
- logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9);
- Collection<@NonNull Object> rootObjects2 = transformer.getRootObjects("person");
- assert rootObjects2.size() == 9*testSize;
+ doTest(logger, environmentFactory, testSize);
}
}
finally {
@@ -184,7 +144,7 @@ public class BigMDE2016CGTests extends TestCase
return newMember;
}
- @Test
+ /* @Test
public void testQVTcCompiler_UML2RDBMS_CG() throws Exception {
PrintAndLog logger = new PrintAndLog(getName());
logger.printf("%s\n", getName());
@@ -224,5 +184,5 @@ public class BigMDE2016CGTests extends TestCase
environmentFactory.dispose();
logger.dispose();
}
- }
+ } */
}
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/BigMDE2016_QVTc_AutomatedTests.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/BigMDE2016_QVTc_AutomatedTests.java
new file mode 100644
index 000000000..2e61b3d5c
--- /dev/null
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/BigMDE2016_QVTc_AutomatedTests.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Willink Transformations 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:
+ * E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc;
+
+import java.util.Collection;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.resource.ProjectManager;
+import org.eclipse.qvtd.doc.bigmde2016.tests.FamiliesGenerator;
+import org.eclipse.qvtd.doc.bigmde2016.tests.PrintAndLog;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.tx.Families2Persons;
+import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativePivotStandaloneSetup;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
+import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor;
+import org.eclipse.qvtd.runtime.evaluation.Transformer;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestCase;
+
+/**
+ * Source code for CG results in BigMDE 2016, Eclipse QVTC First Results paper.
+ */
+public class BigMDE2016_QVTc_AutomatedTests extends TestCase
+{
+ public static void garbageCollect() throws InterruptedException {
+ for (int y = 0; y < 5; y++) {
+ System.gc();
+ Thread.sleep(100);
+ }
+ }
+
+ protected void doTest(@NonNull PrintAndLog logger, @NonNull QVTiEnvironmentFactory environmentFactory, int testSize) throws Exception {
+ Iterable<@NonNull ? extends Object> rootObjects = FamiliesGenerator.createFamiliesModel(testSize, 9);
+ QVTiTransformationExecutor generatedExecutor = new QVTiTransformationExecutor(environmentFactory, Families2Persons.class);
+ Transformer transformer = generatedExecutor.getTransformer();
+ transformer.addRootObjects("family", rootObjects);
+ garbageCollect();
+ logger.printf("%9d, ", 10*testSize);
+ long startTime = System.nanoTime();
+ transformer.run();
+ long endTime = System.nanoTime();
+ logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9);
+ Collection<@NonNull Object> rootObjects2 = transformer.getRootObjects("person");
+ assert rootObjects2.size() == 9*testSize;
+ }
+
+ @Override
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ QVTimperativePivotStandaloneSetup.doSetup();
+ }
+
+ @Override
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ @Test
+ public void testQVTcCompiler_Families2Persons_CG_10K() throws Exception {
+ PrintAndLog logger = new PrintAndLog(getName());
+ logger.printf("%s\n", getName());
+ QVTiEnvironmentFactory environmentFactory = new QVTiEnvironmentFactory(ProjectManager.NO_PROJECTS, null);
+ try {
+ doTest(logger, environmentFactory, 1000);
+ }
+ finally {
+ environmentFactory.dispose();
+ logger.dispose();
+ }
+ }
+}
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/QVTcSimpleUMLGenerator.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/QVTcSimpleUMLGenerator.java
deleted file mode 100644
index 769e3dc8f..000000000
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvtc/QVTcSimpleUMLGenerator.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012, 2015 Willink Transformations 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:
- * E.D.Willink - initial API and implementation
- *******************************************************************************/
-package org.eclipse.qvtd.doc.bigmde2016.tests.qvtc;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.qvtd.doc.bigmde2016.tests.SimpleUMLGenerator;
-
-import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml.Association;
-import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml.Attribute;
-import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml.Class;
-import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml.Package;
-import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml.PrimitiveDataType;
-import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml.SimpleumlFactory;
-
-public class QVTcSimpleUMLGenerator extends SimpleUMLGenerator<Package, Class, PrimitiveDataType, Attribute, Association>
-{
- @Override
- protected @NonNull Association createAssociation(@NonNull Package parentPackage, @NonNull String name, @NonNull Class fromClass, @NonNull Class toClass) {
- Association anAssociation = SimpleumlFactory.eINSTANCE.createAssociation();
- anAssociation.setName(name);
- anAssociation.setSource(fromClass);
- anAssociation.setDestination(toClass);
- parentPackage.getElements().add(anAssociation);
- return anAssociation;
- }
-
- @Override
- protected @NonNull Class createClass(@NonNull Package parentPackage, @NonNull String name) {
- Class aClass = SimpleumlFactory.eINSTANCE.createClass();
- aClass.setName(name);
-// aClass.getStereotype().add("persistent");
- if (parentPackage != null) {
- parentPackage.getElements().add(aClass);
- }
- return aClass;
- }
-
- @Override
- protected @NonNull List<@NonNull ? extends EObject> createModel(@NonNull List<Package> rootPackages, @NonNull String name) {
- Package aModel = SimpleumlFactory.eINSTANCE.createPackage();
- aModel.setName(name);
- aModel.getElements().addAll(rootPackages);
- return Collections.singletonList(aModel);
- }
-
- public @NonNull Package createPackage(@Nullable Package parentPackage, @NonNull String name) {
- Package aPackage = SimpleumlFactory.eINSTANCE.createPackage();
- aPackage.setName(name);
- if (parentPackage != null) {
- parentPackage.getElements().add(aPackage);
- }
- return aPackage;
- }
-
- @Override
- protected @NonNull Attribute createProperty(@NonNull Class aClass, @NonNull String name, @NonNull PrimitiveDataType type) {
- Attribute aProperty = SimpleumlFactory.eINSTANCE.createAttribute();
- aProperty.setName(name);
- aProperty.setType(type);
- if (aClass != null) {
- aClass.getAttributes().add(aProperty);
- }
- return aProperty;
- }
-
- @Override
- protected @NonNull PrimitiveDataType createType(@NonNull Package parentPackage, @NonNull String name) {
- PrimitiveDataType aType = SimpleumlFactory.eINSTANCE.createPrimitiveDataType();
- aType.setName(name);
- if (parentPackage != null) {
- parentPackage.getElements().add(aType);
- }
- return aType;
- }
-}
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvto/BigMDE2016QVToTests.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvto/BigMDE2016QVToTests.java
index bc9438de8..af5bc0d50 100644
--- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvto/BigMDE2016QVToTests.java
+++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/qvto/BigMDE2016QVToTests.java
@@ -36,8 +36,8 @@ import org.eclipse.ocl.pivot.utilities.XMIUtil;
import org.eclipse.qvtd.doc.bigmde2016.tests.FamiliesGenerator;
import org.eclipse.qvtd.doc.bigmde2016.tests.PrintAndLog;
import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.BigMDE2016CGTests;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesPackage;
-import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Persons.PersonsPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Families.FamiliesPackage;
+import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.Persons.PersonsPackage;
import org.junit.Test;
import junit.framework.TestCase;

Back to the top