Просмотр исходного кода

Added PackageMember to Base Type System

Andreas Mülder 12 лет назад
Родитель
Сommit
e34090e816
16 измененных файлов с 346 добавлено и 148 удалено
  1. 5 3
      plugins/org.yakindu.base.types/model/types.ecore
  2. 8 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/ComplexType.java
  3. 7 7
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Package.java
  4. 2 35
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/PackageMember.java
  5. 1 2
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Type.java
  6. 9 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesFactory.java
  7. 59 11
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesPackage.java
  8. 97 61
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/ComplexTypeImpl.java
  9. 20 21
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/PackageImpl.java
  10. 41 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/PackageMemberImpl.java
  11. 1 2
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeImpl.java
  12. 12 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesFactoryImpl.java
  13. 28 4
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesPackageImpl.java
  14. 19 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesAdapterFactory.java
  15. 29 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesSwitch.java
  16. 8 2
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/DefaultTypeSystem.java

+ 5 - 3
plugins/org.yakindu.base.types/model/types.ecore

@@ -2,10 +2,10 @@
 <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="types" nsURI="http://www.yakindu.org/base/types/2.0.0" nsPrefix="types">
     xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="types" nsURI="http://www.yakindu.org/base/types/2.0.0" nsPrefix="types">
   <eClassifiers xsi:type="ecore:EClass" name="Package" eSuperTypes="base.ecore#//NamedElement">
   <eClassifiers xsi:type="ecore:EClass" name="Package" eSuperTypes="base.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
-        eType="#//Type" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="member" upperBound="-1"
+        eType="#//PackageMember" containment="true"/>
   </eClassifiers>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="base.ecore#//NamedElement">
+  <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="#//PackageMember">
     <eStructuralFeatures xsi:type="ecore:EReference" name="constraint" upperBound="-1"
     <eStructuralFeatures xsi:type="ecore:EReference" name="constraint" upperBound="-1"
         eType="#//TypeConstraint" containment="true"/>
         eType="#//TypeConstraint" containment="true"/>
   </eClassifiers>
   </eClassifiers>
@@ -36,6 +36,7 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="baseType" eType="#//PrimitiveType"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="baseType" eType="#//PrimitiveType"/>
   </eClassifiers>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ComplexType" eSuperTypes="#//ParameterizedType">
   <eClassifiers xsi:type="ecore:EClass" name="ComplexType" eSuperTypes="#//ParameterizedType">
+    <eOperations name="getAllFeatures" upperBound="-1" eType="#//Feature"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
     <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
         eType="#//Feature" containment="true" eOpposite="#//Feature/owningType"/>
         eType="#//Feature" containment="true" eOpposite="#//Feature/owningType"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="superTypes" upperBound="-1"
     <eStructuralFeatures xsi:type="ecore:EReference" name="superTypes" upperBound="-1"
@@ -56,4 +57,5 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" upperBound="-1"
     <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" upperBound="-1"
         eType="#//TypeParameter" containment="true"/>
         eType="#//TypeParameter" containment="true"/>
   </eClassifiers>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PackageMember" eSuperTypes="base.ecore#//NamedElement"/>
 </ecore:EPackage>
 </ecore:EPackage>

+ 8 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/ComplexType.java

@@ -56,4 +56,12 @@ public interface ComplexType extends ParameterizedType {
 	 */
 	 */
 	EList<ComplexType> getSuperTypes();
 	EList<ComplexType> getSuperTypes();
 
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	EList<Feature> getAllFeatures();
+
 } // ComplexType
 } // ComplexType

+ 7 - 7
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Package.java

@@ -13,7 +13,7 @@ import org.yakindu.base.base.NamedElement;
  * <p>
  * <p>
  * The following features are supported:
  * The following features are supported:
  * <ul>
  * <ul>
- *   <li>{@link org.yakindu.base.types.Package#getTypes <em>Types</em>}</li>
+ *   <li>{@link org.yakindu.base.types.Package#getMember <em>Member</em>}</li>
  * </ul>
  * </ul>
  * </p>
  * </p>
  *
  *
@@ -23,19 +23,19 @@ import org.yakindu.base.base.NamedElement;
  */
  */
 public interface Package extends NamedElement {
 public interface Package extends NamedElement {
 	/**
 	/**
-	 * Returns the value of the '<em><b>Types</b></em>' containment reference list.
-	 * The list contents are of type {@link org.yakindu.base.types.Type}.
+	 * Returns the value of the '<em><b>Member</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.base.types.PackageMember}.
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * <p>
-	 * If the meaning of the '<em>Types</em>' containment reference list isn't clear,
+	 * If the meaning of the '<em>Member</em>' containment reference list isn't clear,
 	 * there really should be more of a description here...
 	 * there really should be more of a description here...
 	 * </p>
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Types</em>' containment reference list.
-	 * @see org.yakindu.base.types.TypesPackage#getPackage_Types()
+	 * @return the value of the '<em>Member</em>' containment reference list.
+	 * @see org.yakindu.base.types.TypesPackage#getPackage_Member()
 	 * @model containment="true"
 	 * @model containment="true"
 	 * @generated
 	 * @generated
 	 */
 	 */
-	EList<Type> getTypes();
+	EList<PackageMember> getMember();
 
 
 } // Package
 } // Package

+ 2 - 35
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/PackageMember.java

@@ -2,51 +2,18 @@
  */
  */
 package org.yakindu.base.types;
 package org.yakindu.base.types;
 
 
-import org.eclipse.emf.ecore.EObject;
+import org.yakindu.base.base.NamedElement;
 
 
 /**
 /**
  * <!-- begin-user-doc -->
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Package Member</b></em>'.
  * A representation of the model object '<em><b>Package Member</b></em>'.
  * <!-- end-user-doc -->
  * <!-- end-user-doc -->
  *
  *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.yakindu.base.types.PackageMember#getPackage <em>Package</em>}</li>
- * </ul>
- * </p>
  *
  *
  * @see org.yakindu.base.types.TypesPackage#getPackageMember()
  * @see org.yakindu.base.types.TypesPackage#getPackageMember()
  * @model
  * @model
  * @generated
  * @generated
  */
  */
-public interface PackageMember extends EObject {
-	/**
-	 * Returns the value of the '<em><b>Package</b></em>' container reference.
-	 * It is bidirectional and its opposite is '{@link org.yakindu.base.types.Package#getMembers <em>Members</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Package</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>Package</em>' container reference.
-	 * @see #setPackage(org.yakindu.base.types.Package)
-	 * @see org.yakindu.base.types.TypesPackage#getPackageMember_Package()
-	 * @see org.yakindu.base.types.Package#getMembers
-	 * @model opposite="members" transient="false"
-	 * @generated
-	 */
-	org.yakindu.base.types.Package getPackage();
-
-	/**
-	 * Sets the value of the '{@link org.yakindu.base.types.PackageMember#getPackage <em>Package</em>}' container reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Package</em>' container reference.
-	 * @see #getPackage()
-	 * @generated
-	 */
-	void setPackage(org.yakindu.base.types.Package value);
+public interface PackageMember extends NamedElement {
 
 
 } // PackageMember
 } // PackageMember

+ 1 - 2
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Type.java

@@ -7,7 +7,6 @@
 package org.yakindu.base.types;
 package org.yakindu.base.types;
 
 
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.EList;
-import org.yakindu.base.base.NamedElement;
 
 
 /**
 /**
  * <!-- begin-user-doc -->
  * <!-- begin-user-doc -->
@@ -25,7 +24,7 @@ import org.yakindu.base.base.NamedElement;
  * @model abstract="true"
  * @model abstract="true"
  * @generated
  * @generated
  */
  */
-public interface Type extends NamedElement {
+public interface Type extends PackageMember {
 
 
 	/**
 	/**
 	 * Returns the value of the '<em><b>Constraint</b></em>' containment reference list.
 	 * Returns the value of the '<em><b>Constraint</b></em>' containment reference list.

+ 9 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesFactory.java

@@ -133,6 +133,15 @@ public interface TypesFactory extends EFactory {
 	 */
 	 */
 	ParameterizedType createParameterizedType();
 	ParameterizedType createParameterizedType();
 
 
+	/**
+	 * Returns a new object of class '<em>Package Member</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Package Member</em>'.
+	 * @generated
+	 */
+	PackageMember createPackageMember();
+
 	/**
 	/**
 	 * Returns the package supported by this factory.
 	 * Returns the package supported by this factory.
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->

+ 59 - 11
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesPackage.java

@@ -80,13 +80,13 @@ public interface TypesPackage extends EPackage {
 	int PACKAGE__NAME = BasePackage.NAMED_ELEMENT__NAME;
 	int PACKAGE__NAME = BasePackage.NAMED_ELEMENT__NAME;
 
 
 	/**
 	/**
-	 * The feature id for the '<em><b>Types</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Member</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @generated
 	 * @ordered
 	 * @ordered
 	 */
 	 */
-	int PACKAGE__TYPES = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 0;
+	int PACKAGE__MEMBER = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 0;
 
 
 	/**
 	/**
 	 * The number of structural features of the '<em>Package</em>' class.
 	 * The number of structural features of the '<em>Package</em>' class.
@@ -97,6 +97,34 @@ public interface TypesPackage extends EPackage {
 	 */
 	 */
 	int PACKAGE_FEATURE_COUNT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
 	int PACKAGE_FEATURE_COUNT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
 
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.base.types.impl.PackageMemberImpl <em>Package Member</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.base.types.impl.PackageMemberImpl
+	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getPackageMember()
+	 * @generated
+	 */
+	int PACKAGE_MEMBER = 15;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKAGE_MEMBER__NAME = BasePackage.NAMED_ELEMENT__NAME;
+
+	/**
+	 * The number of structural features of the '<em>Package Member</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKAGE_MEMBER_FEATURE_COUNT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 0;
+
 	/**
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.types.impl.TypeImpl <em>Type</em>}' class.
 	 * The meta object id for the '{@link org.yakindu.base.types.impl.TypeImpl <em>Type</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->
@@ -164,7 +192,7 @@ public interface TypesPackage extends EPackage {
 	 * @generated
 	 * @generated
 	 * @ordered
 	 * @ordered
 	 */
 	 */
-	int TYPE__NAME = BasePackage.NAMED_ELEMENT__NAME;
+	int TYPE__NAME = PACKAGE_MEMBER__NAME;
 
 
 	/**
 	/**
 	 * The feature id for the '<em><b>Constraint</b></em>' containment reference list.
 	 * The feature id for the '<em><b>Constraint</b></em>' containment reference list.
@@ -173,7 +201,7 @@ public interface TypesPackage extends EPackage {
 	 * @generated
 	 * @generated
 	 * @ordered
 	 * @ordered
 	 */
 	 */
-	int TYPE__CONSTRAINT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 0;
+	int TYPE__CONSTRAINT = PACKAGE_MEMBER_FEATURE_COUNT + 0;
 
 
 	/**
 	/**
 	 * The number of structural features of the '<em>Type</em>' class.
 	 * The number of structural features of the '<em>Type</em>' class.
@@ -182,7 +210,7 @@ public interface TypesPackage extends EPackage {
 	 * @generated
 	 * @generated
 	 * @ordered
 	 * @ordered
 	 */
 	 */
-	int TYPE_FEATURE_COUNT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
+	int TYPE_FEATURE_COUNT = PACKAGE_MEMBER_FEATURE_COUNT + 1;
 
 
 	/**
 	/**
 	 * The feature id for the '<em><b>Type</b></em>' reference.
 	 * The feature id for the '<em><b>Type</b></em>' reference.
@@ -809,15 +837,15 @@ public interface TypesPackage extends EPackage {
 	EClass getPackage();
 	EClass getPackage();
 
 
 	/**
 	/**
-	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.types.Package#getTypes <em>Types</em>}'.
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.types.Package#getMember <em>Member</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Types</em>'.
-	 * @see org.yakindu.base.types.Package#getTypes()
+	 * @return the meta object for the containment reference list '<em>Member</em>'.
+	 * @see org.yakindu.base.types.Package#getMember()
 	 * @see #getPackage()
 	 * @see #getPackage()
 	 * @generated
 	 * @generated
 	 */
 	 */
-	EReference getPackage_Types();
+	EReference getPackage_Member();
 
 
 	/**
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.base.types.Type <em>Type</em>}'.
 	 * Returns the meta object for class '{@link org.yakindu.base.types.Type <em>Type</em>}'.
@@ -1124,6 +1152,16 @@ public interface TypesPackage extends EPackage {
 	 */
 	 */
 	EReference getParameterizedType_Parameter();
 	EReference getParameterizedType_Parameter();
 
 
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.types.PackageMember <em>Package Member</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Package Member</em>'.
+	 * @see org.yakindu.base.types.PackageMember
+	 * @generated
+	 */
+	EClass getPackageMember();
+
 	/**
 	/**
 	 * Returns the factory that creates the instances of the model.
 	 * Returns the factory that creates the instances of the model.
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->
@@ -1157,12 +1195,12 @@ public interface TypesPackage extends EPackage {
 		EClass PACKAGE = eINSTANCE.getPackage();
 		EClass PACKAGE = eINSTANCE.getPackage();
 
 
 		/**
 		/**
-		 * The meta object literal for the '<em><b>Types</b></em>' containment reference list feature.
+		 * The meta object literal for the '<em><b>Member</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 * @generated
 		 */
 		 */
-		EReference PACKAGE__TYPES = eINSTANCE.getPackage_Types();
+		EReference PACKAGE__MEMBER = eINSTANCE.getPackage_Member();
 
 
 		/**
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.types.impl.TypeImpl <em>Type</em>}' class.
 		 * The meta object literal for the '{@link org.yakindu.base.types.impl.TypeImpl <em>Type</em>}' class.
@@ -1424,6 +1462,16 @@ public interface TypesPackage extends EPackage {
 		 */
 		 */
 		EReference PARAMETERIZED_TYPE__PARAMETER = eINSTANCE.getParameterizedType_Parameter();
 		EReference PARAMETERIZED_TYPE__PARAMETER = eINSTANCE.getParameterizedType_Parameter();
 
 
+		/**
+		 * The meta object literal for the '{@link org.yakindu.base.types.impl.PackageMemberImpl <em>Package Member</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.types.impl.PackageMemberImpl
+		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getPackageMember()
+		 * @generated
+		 */
+		EClass PACKAGE_MEMBER = eINSTANCE.getPackageMember();
+
 	}
 	}
 
 
 } //TypesPackage
 } //TypesPackage

+ 97 - 61
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/ComplexTypeImpl.java

@@ -3,8 +3,12 @@
 package org.yakindu.base.types.impl;
 package org.yakindu.base.types.impl;
 
 
 import java.util.Collection;
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEList;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.InternalEObject;
@@ -13,27 +17,29 @@ import org.eclipse.emf.ecore.util.EObjectResolvingEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.Feature;
 import org.yakindu.base.types.Feature;
+import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypesPackage;
 import org.yakindu.base.types.TypesPackage;
 
 
 /**
 /**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Complex Type</b></em>'.
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> An implementation of the model object '
+ * <em><b>Complex Type</b></em>'. <!-- end-user-doc -->
  * <p>
  * <p>
  * The following features are implemented:
  * The following features are implemented:
  * <ul>
  * <ul>
- *   <li>{@link org.yakindu.base.types.impl.ComplexTypeImpl#getFeatures <em>Features</em>}</li>
- *   <li>{@link org.yakindu.base.types.impl.ComplexTypeImpl#getSuperTypes <em>Super Types</em>}</li>
+ * <li>{@link org.yakindu.base.types.impl.ComplexTypeImpl#getFeatures <em>
+ * Features</em>}</li>
+ * <li>{@link org.yakindu.base.types.impl.ComplexTypeImpl#getSuperTypes <em>
+ * Super Types</em>}</li>
  * </ul>
  * </ul>
  * </p>
  * </p>
- *
+ * 
  * @generated
  * @generated
  */
  */
 public class ComplexTypeImpl extends ParameterizedTypeImpl implements ComplexType {
 public class ComplexTypeImpl extends ParameterizedTypeImpl implements ComplexType {
 	/**
 	/**
-	 * The cached value of the '{@link #getFeatures() <em>Features</em>}' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The cached value of the '{@link #getFeatures() <em>Features</em>}'
+	 * containment reference list. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @see #getFeatures()
 	 * @see #getFeatures()
 	 * @generated
 	 * @generated
 	 * @ordered
 	 * @ordered
@@ -41,9 +47,9 @@ public class ComplexTypeImpl extends ParameterizedTypeImpl implements ComplexTyp
 	protected EList<Feature> features;
 	protected EList<Feature> features;
 
 
 	/**
 	/**
-	 * The cached value of the '{@link #getSuperTypes() <em>Super Types</em>}' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * The cached value of the '{@link #getSuperTypes() <em>Super Types</em>}'
+	 * reference list. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @see #getSuperTypes()
 	 * @see #getSuperTypes()
 	 * @generated
 	 * @generated
 	 * @ordered
 	 * @ordered
@@ -51,8 +57,8 @@ public class ComplexTypeImpl extends ParameterizedTypeImpl implements ComplexTyp
 	protected EList<ComplexType> superTypes;
 	protected EList<ComplexType> superTypes;
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	protected ComplexTypeImpl() {
 	protected ComplexTypeImpl() {
@@ -60,8 +66,8 @@ public class ComplexTypeImpl extends ParameterizedTypeImpl implements ComplexTyp
 	}
 	}
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	@Override
 	@Override
@@ -70,127 +76,157 @@ public class ComplexTypeImpl extends ParameterizedTypeImpl implements ComplexTyp
 	}
 	}
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	public EList<Feature> getFeatures() {
 	public EList<Feature> getFeatures() {
 		if (features == null) {
 		if (features == null) {
-			features = new EObjectContainmentWithInverseEList<Feature>(Feature.class, this, TypesPackage.COMPLEX_TYPE__FEATURES, TypesPackage.FEATURE__OWNING_TYPE);
+			features = new EObjectContainmentWithInverseEList<Feature>(Feature.class, this,
+					TypesPackage.COMPLEX_TYPE__FEATURES, TypesPackage.FEATURE__OWNING_TYPE);
 		}
 		}
 		return features;
 		return features;
 	}
 	}
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	public EList<ComplexType> getSuperTypes() {
 	public EList<ComplexType> getSuperTypes() {
 		if (superTypes == null) {
 		if (superTypes == null) {
-			superTypes = new EObjectResolvingEList<ComplexType>(ComplexType.class, this, TypesPackage.COMPLEX_TYPE__SUPER_TYPES);
+			superTypes = new EObjectResolvingEList<ComplexType>(ComplexType.class, this,
+					TypesPackage.COMPLEX_TYPE__SUPER_TYPES);
 		}
 		}
 		return superTypes;
 		return superTypes;
 	}
 	}
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public EList<Feature> getAllFeatures() {
+		EList<Feature> features = new BasicEList<Feature>();
+		collectFeatures(this, features, new HashSet<Type>());
+		return features;
+	}
+
+	/**
+	 * Performs a simple search to collect all features of the type and all
+	 * super types.
+	 * 
+	 */
+	protected void collectFeatures(Type type, List<Feature> features, Set<Type> visited) {
+		if (type == null || visited.contains(type))
+			return;
+		if (type instanceof ComplexType) {
+			for (Type superType : ((ComplexType) type).getSuperTypes()) {
+				collectFeatures(superType, features, visited);
+			}
+			features.addAll(((ComplexType) type).getFeatures());
+		}
+		visited.add(type);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	@SuppressWarnings("unchecked")
 	@SuppressWarnings("unchecked")
 	@Override
 	@Override
 	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.COMPLEX_TYPE__FEATURES:
-				return ((InternalEList<InternalEObject>)(InternalEList<?>)getFeatures()).basicAdd(otherEnd, msgs);
+		case TypesPackage.COMPLEX_TYPE__FEATURES:
+			return ((InternalEList<InternalEObject>) (InternalEList<?>) getFeatures()).basicAdd(otherEnd, msgs);
 		}
 		}
 		return super.eInverseAdd(otherEnd, featureID, msgs);
 		return super.eInverseAdd(otherEnd, featureID, msgs);
 	}
 	}
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	@Override
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.COMPLEX_TYPE__FEATURES:
-				return ((InternalEList<?>)getFeatures()).basicRemove(otherEnd, msgs);
+		case TypesPackage.COMPLEX_TYPE__FEATURES:
+			return ((InternalEList<?>) getFeatures()).basicRemove(otherEnd, msgs);
 		}
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
 	}
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	@Override
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.COMPLEX_TYPE__FEATURES:
-				return getFeatures();
-			case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
-				return getSuperTypes();
+		case TypesPackage.COMPLEX_TYPE__FEATURES:
+			return getFeatures();
+		case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
+			return getSuperTypes();
 		}
 		}
 		return super.eGet(featureID, resolve, coreType);
 		return super.eGet(featureID, resolve, coreType);
 	}
 	}
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	@SuppressWarnings("unchecked")
 	@SuppressWarnings("unchecked")
 	@Override
 	@Override
 	public void eSet(int featureID, Object newValue) {
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.COMPLEX_TYPE__FEATURES:
-				getFeatures().clear();
-				getFeatures().addAll((Collection<? extends Feature>)newValue);
-				return;
-			case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
-				getSuperTypes().clear();
-				getSuperTypes().addAll((Collection<? extends ComplexType>)newValue);
-				return;
+		case TypesPackage.COMPLEX_TYPE__FEATURES:
+			getFeatures().clear();
+			getFeatures().addAll((Collection<? extends Feature>) newValue);
+			return;
+		case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
+			getSuperTypes().clear();
+			getSuperTypes().addAll((Collection<? extends ComplexType>) newValue);
+			return;
 		}
 		}
 		super.eSet(featureID, newValue);
 		super.eSet(featureID, newValue);
 	}
 	}
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	@Override
 	@Override
 	public void eUnset(int featureID) {
 	public void eUnset(int featureID) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.COMPLEX_TYPE__FEATURES:
-				getFeatures().clear();
-				return;
-			case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
-				getSuperTypes().clear();
-				return;
+		case TypesPackage.COMPLEX_TYPE__FEATURES:
+			getFeatures().clear();
+			return;
+		case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
+			getSuperTypes().clear();
+			return;
 		}
 		}
 		super.eUnset(featureID);
 		super.eUnset(featureID);
 	}
 	}
 
 
 	/**
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 * @generated
 	 */
 	 */
 	@Override
 	@Override
 	public boolean eIsSet(int featureID) {
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.COMPLEX_TYPE__FEATURES:
-				return features != null && !features.isEmpty();
-			case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
-				return superTypes != null && !superTypes.isEmpty();
+		case TypesPackage.COMPLEX_TYPE__FEATURES:
+			return features != null && !features.isEmpty();
+		case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
+			return superTypes != null && !superTypes.isEmpty();
 		}
 		}
 		return super.eIsSet(featureID);
 		return super.eIsSet(featureID);
 	}
 	}
 
 
-} //ComplexTypeImpl
+} // ComplexTypeImpl

+ 20 - 21
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/PackageImpl.java

@@ -11,7 +11,7 @@ import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.yakindu.base.base.impl.NamedElementImpl;
 import org.yakindu.base.base.impl.NamedElementImpl;
-import org.yakindu.base.types.Type;
+import org.yakindu.base.types.PackageMember;
 import org.yakindu.base.types.TypesPackage;
 import org.yakindu.base.types.TypesPackage;
 
 
 /**
 /**
@@ -21,7 +21,7 @@ import org.yakindu.base.types.TypesPackage;
  * <p>
  * <p>
  * The following features are implemented:
  * The following features are implemented:
  * <ul>
  * <ul>
- *   <li>{@link org.yakindu.base.types.impl.PackageImpl#getTypes <em>Types</em>}</li>
+ *   <li>{@link org.yakindu.base.types.impl.PackageImpl#getMember <em>Member</em>}</li>
  * </ul>
  * </ul>
  * </p>
  * </p>
  *
  *
@@ -29,15 +29,14 @@ import org.yakindu.base.types.TypesPackage;
  */
  */
 public class PackageImpl extends NamedElementImpl implements org.yakindu.base.types.Package {
 public class PackageImpl extends NamedElementImpl implements org.yakindu.base.types.Package {
 	/**
 	/**
-	 * The cached value of the '{@link #getTypes() <em>Types</em>}' containment reference list.
+	 * The cached value of the '{@link #getMember() <em>Member</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getTypes()
+	 * @see #getMember()
 	 * @generated
 	 * @generated
 	 * @ordered
 	 * @ordered
 	 */
 	 */
-	protected EList<Type> types;
-
+	protected EList<PackageMember> member;
 	/**
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * <!-- end-user-doc -->
@@ -62,11 +61,11 @@ public class PackageImpl extends NamedElementImpl implements org.yakindu.base.ty
 	 * <!-- end-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @generated
 	 */
 	 */
-	public EList<Type> getTypes() {
-		if (types == null) {
-			types = new EObjectContainmentEList<Type>(Type.class, this, TypesPackage.PACKAGE__TYPES);
+	public EList<PackageMember> getMember() {
+		if (member == null) {
+			member = new EObjectContainmentEList<PackageMember>(PackageMember.class, this, TypesPackage.PACKAGE__MEMBER);
 		}
 		}
-		return types;
+		return member;
 	}
 	}
 
 
 	/**
 	/**
@@ -77,8 +76,8 @@ public class PackageImpl extends NamedElementImpl implements org.yakindu.base.ty
 	@Override
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.PACKAGE__TYPES:
-				return ((InternalEList<?>)getTypes()).basicRemove(otherEnd, msgs);
+			case TypesPackage.PACKAGE__MEMBER:
+				return ((InternalEList<?>)getMember()).basicRemove(otherEnd, msgs);
 		}
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
 	}
@@ -91,8 +90,8 @@ public class PackageImpl extends NamedElementImpl implements org.yakindu.base.ty
 	@Override
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.PACKAGE__TYPES:
-				return getTypes();
+			case TypesPackage.PACKAGE__MEMBER:
+				return getMember();
 		}
 		}
 		return super.eGet(featureID, resolve, coreType);
 		return super.eGet(featureID, resolve, coreType);
 	}
 	}
@@ -106,9 +105,9 @@ public class PackageImpl extends NamedElementImpl implements org.yakindu.base.ty
 	@Override
 	@Override
 	public void eSet(int featureID, Object newValue) {
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.PACKAGE__TYPES:
-				getTypes().clear();
-				getTypes().addAll((Collection<? extends Type>)newValue);
+			case TypesPackage.PACKAGE__MEMBER:
+				getMember().clear();
+				getMember().addAll((Collection<? extends PackageMember>)newValue);
 				return;
 				return;
 		}
 		}
 		super.eSet(featureID, newValue);
 		super.eSet(featureID, newValue);
@@ -122,8 +121,8 @@ public class PackageImpl extends NamedElementImpl implements org.yakindu.base.ty
 	@Override
 	@Override
 	public void eUnset(int featureID) {
 	public void eUnset(int featureID) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.PACKAGE__TYPES:
-				getTypes().clear();
+			case TypesPackage.PACKAGE__MEMBER:
+				getMember().clear();
 				return;
 				return;
 		}
 		}
 		super.eUnset(featureID);
 		super.eUnset(featureID);
@@ -137,8 +136,8 @@ public class PackageImpl extends NamedElementImpl implements org.yakindu.base.ty
 	@Override
 	@Override
 	public boolean eIsSet(int featureID) {
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 		switch (featureID) {
-			case TypesPackage.PACKAGE__TYPES:
-				return types != null && !types.isEmpty();
+			case TypesPackage.PACKAGE__MEMBER:
+				return member != null && !member.isEmpty();
 		}
 		}
 		return super.eIsSet(featureID);
 		return super.eIsSet(featureID);
 	}
 	}

+ 41 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/PackageMemberImpl.java

@@ -0,0 +1,41 @@
+/**
+ */
+package org.yakindu.base.types.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.yakindu.base.base.impl.NamedElementImpl;
+
+import org.yakindu.base.types.PackageMember;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Package Member</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class PackageMemberImpl extends NamedElementImpl implements PackageMember {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PackageMemberImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TypesPackage.Literals.PACKAGE_MEMBER;
+	}
+
+} //PackageMemberImpl

+ 1 - 2
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeImpl.java

@@ -14,7 +14,6 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.emf.ecore.util.InternalEList;
-import org.yakindu.base.base.impl.NamedElementImpl;
 import org.yakindu.base.types.Type;
 import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypeConstraint;
 import org.yakindu.base.types.TypeConstraint;
 import org.yakindu.base.types.TypesPackage;
 import org.yakindu.base.types.TypesPackage;
@@ -32,7 +31,7 @@ import org.yakindu.base.types.TypesPackage;
  *
  *
  * @generated
  * @generated
  */
  */
-public abstract class TypeImpl extends NamedElementImpl implements Type {
+public abstract class TypeImpl extends PackageMemberImpl implements Type {
 	/**
 	/**
 	 * The cached value of the '{@link #getConstraint() <em>Constraint</em>}' containment reference list.
 	 * The cached value of the '{@link #getConstraint() <em>Constraint</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->

+ 12 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesFactoryImpl.java

@@ -16,6 +16,7 @@ import org.yakindu.base.types.EnumerationType;
 import org.yakindu.base.types.Enumerator;
 import org.yakindu.base.types.Enumerator;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Operation;
 import org.yakindu.base.types.Operation;
+import org.yakindu.base.types.PackageMember;
 import org.yakindu.base.types.Parameter;
 import org.yakindu.base.types.Parameter;
 import org.yakindu.base.types.ParameterizedType;
 import org.yakindu.base.types.ParameterizedType;
 import org.yakindu.base.types.PrimitiveType;
 import org.yakindu.base.types.PrimitiveType;
@@ -81,6 +82,7 @@ public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
 			case TypesPackage.TYPE_CONSTRAINT: return createTypeConstraint();
 			case TypesPackage.TYPE_CONSTRAINT: return createTypeConstraint();
 			case TypesPackage.TYPE_PARAMETER: return createTypeParameter();
 			case TypesPackage.TYPE_PARAMETER: return createTypeParameter();
 			case TypesPackage.PARAMETERIZED_TYPE: return createParameterizedType();
 			case TypesPackage.PARAMETERIZED_TYPE: return createParameterizedType();
+			case TypesPackage.PACKAGE_MEMBER: return createPackageMember();
 			default:
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
 		}
@@ -206,6 +208,16 @@ public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
 		return parameterizedType;
 		return parameterizedType;
 	}
 	}
 
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PackageMember createPackageMember() {
+		PackageMemberImpl packageMember = new PackageMemberImpl();
+		return packageMember;
+	}
+
 	/**
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * <!-- end-user-doc -->

+ 28 - 4
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesPackageImpl.java

@@ -18,6 +18,7 @@ import org.yakindu.base.types.Enumerator;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Feature;
 import org.yakindu.base.types.Feature;
 import org.yakindu.base.types.Operation;
 import org.yakindu.base.types.Operation;
+import org.yakindu.base.types.PackageMember;
 import org.yakindu.base.types.Parameter;
 import org.yakindu.base.types.Parameter;
 import org.yakindu.base.types.ParameterizedType;
 import org.yakindu.base.types.ParameterizedType;
 import org.yakindu.base.types.PrimitiveType;
 import org.yakindu.base.types.PrimitiveType;
@@ -129,6 +130,13 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	 */
 	 */
 	private EClass parameterizedTypeEClass = null;
 	private EClass parameterizedTypeEClass = null;
 
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass packageMemberEClass = null;
+
 	/**
 	/**
 	 * Creates an instance of the model <b>Package</b>, registered with
 	 * Creates an instance of the model <b>Package</b>, registered with
 	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the
 	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the
@@ -207,7 +215,7 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	 * <!-- end-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @generated
 	 */
 	 */
-	public EReference getPackage_Types() {
+	public EReference getPackage_Member() {
 		return (EReference)packageEClass.getEStructuralFeatures().get(0);
 		return (EReference)packageEClass.getEStructuralFeatures().get(0);
 	}
 	}
 
 
@@ -451,6 +459,15 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		return (EReference)parameterizedTypeEClass.getEStructuralFeatures().get(0);
 		return (EReference)parameterizedTypeEClass.getEStructuralFeatures().get(0);
 	}
 	}
 
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPackageMember() {
+		return packageMemberEClass;
+	}
+
 	/**
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 * @generated
@@ -478,7 +495,7 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 
 
 		// Create classes and their features
 		// Create classes and their features
 		packageEClass = createEClass(PACKAGE);
 		packageEClass = createEClass(PACKAGE);
-		createEReference(packageEClass, PACKAGE__TYPES);
+		createEReference(packageEClass, PACKAGE__MEMBER);
 
 
 		typeEClass = createEClass(TYPE);
 		typeEClass = createEClass(TYPE);
 		createEReference(typeEClass, TYPE__CONSTRAINT);
 		createEReference(typeEClass, TYPE__CONSTRAINT);
@@ -522,6 +539,8 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 
 
 		parameterizedTypeEClass = createEClass(PARAMETERIZED_TYPE);
 		parameterizedTypeEClass = createEClass(PARAMETERIZED_TYPE);
 		createEReference(parameterizedTypeEClass, PARAMETERIZED_TYPE__PARAMETER);
 		createEReference(parameterizedTypeEClass, PARAMETERIZED_TYPE__PARAMETER);
+
+		packageMemberEClass = createEClass(PACKAGE_MEMBER);
 	}
 	}
 
 
 	/**
 	/**
@@ -555,7 +574,7 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 
 
 		// Add supertypes to classes
 		// Add supertypes to classes
 		packageEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 		packageEClass.getESuperTypes().add(theBasePackage.getNamedElement());
-		typeEClass.getESuperTypes().add(theBasePackage.getNamedElement());
+		typeEClass.getESuperTypes().add(this.getPackageMember());
 		featureEClass.getESuperTypes().add(this.getTypedElement());
 		featureEClass.getESuperTypes().add(this.getTypedElement());
 		featureEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 		featureEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 		operationEClass.getESuperTypes().add(this.getFeature());
 		operationEClass.getESuperTypes().add(this.getFeature());
@@ -570,10 +589,11 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		typeConstraintEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 		typeConstraintEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 		typeParameterEClass.getESuperTypes().add(this.getType());
 		typeParameterEClass.getESuperTypes().add(this.getType());
 		parameterizedTypeEClass.getESuperTypes().add(this.getType());
 		parameterizedTypeEClass.getESuperTypes().add(this.getType());
+		packageMemberEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 
 
 		// Initialize classes and features; add operations and parameters
 		// Initialize classes and features; add operations and parameters
 		initEClass(packageEClass, org.yakindu.base.types.Package.class, "Package", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEClass(packageEClass, org.yakindu.base.types.Package.class, "Package", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getPackage_Types(), this.getType(), null, "types", null, 0, -1, org.yakindu.base.types.Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPackage_Member(), this.getPackageMember(), null, "member", null, 0, -1, org.yakindu.base.types.Package.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 
 		initEClass(typeEClass, Type.class, "Type", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEClass(typeEClass, Type.class, "Type", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getType_Constraint(), this.getTypeConstraint(), null, "constraint", null, 0, -1, Type.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getType_Constraint(), this.getTypeConstraint(), null, "constraint", null, 0, -1, Type.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -605,6 +625,8 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		initEReference(getComplexType_Features(), this.getFeature(), this.getFeature_OwningType(), "features", null, 0, -1, ComplexType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getComplexType_Features(), this.getFeature(), this.getFeature_OwningType(), "features", null, 0, -1, ComplexType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getComplexType_SuperTypes(), this.getComplexType(), null, "superTypes", null, 0, -1, ComplexType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getComplexType_SuperTypes(), this.getComplexType(), null, "superTypes", null, 0, -1, ComplexType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 
+		addEOperation(complexTypeEClass, this.getFeature(), "getAllFeatures", 0, -1, IS_UNIQUE, IS_ORDERED);
+
 		initEClass(enumeratorEClass, Enumerator.class, "Enumerator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEClass(enumeratorEClass, Enumerator.class, "Enumerator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getEnumerator_OwningEnumeration(), this.getEnumerationType(), this.getEnumerationType_Enumerator(), "owningEnumeration", null, 0, 1, Enumerator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getEnumerator_OwningEnumeration(), this.getEnumerationType(), this.getEnumerationType_Enumerator(), "owningEnumeration", null, 0, 1, Enumerator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getEnumerator_LiteralValue(), ecorePackage.getEJavaObject(), "literalValue", null, 0, 1, Enumerator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getEnumerator_LiteralValue(), ecorePackage.getEJavaObject(), "literalValue", null, 0, 1, Enumerator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -618,6 +640,8 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		initEClass(parameterizedTypeEClass, ParameterizedType.class, "ParameterizedType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEClass(parameterizedTypeEClass, ParameterizedType.class, "ParameterizedType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getParameterizedType_Parameter(), this.getTypeParameter(), null, "parameter", null, 0, -1, ParameterizedType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getParameterizedType_Parameter(), this.getTypeParameter(), null, "parameter", null, 0, -1, ParameterizedType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 
+		initEClass(packageMemberEClass, PackageMember.class, "PackageMember", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
 		// Create resource
 		// Create resource
 		createResource(eNS_URI);
 		createResource(eNS_URI);
 	}
 	}

+ 19 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesAdapterFactory.java

@@ -17,6 +17,7 @@ import org.yakindu.base.types.Enumerator;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Feature;
 import org.yakindu.base.types.Feature;
 import org.yakindu.base.types.Operation;
 import org.yakindu.base.types.Operation;
+import org.yakindu.base.types.PackageMember;
 import org.yakindu.base.types.Parameter;
 import org.yakindu.base.types.Parameter;
 import org.yakindu.base.types.ParameterizedType;
 import org.yakindu.base.types.ParameterizedType;
 import org.yakindu.base.types.PrimitiveType;
 import org.yakindu.base.types.PrimitiveType;
@@ -141,6 +142,10 @@ public class TypesAdapterFactory extends AdapterFactoryImpl {
 				return createParameterizedTypeAdapter();
 				return createParameterizedTypeAdapter();
 			}
 			}
 			@Override
 			@Override
+			public Adapter casePackageMember(PackageMember object) {
+				return createPackageMemberAdapter();
+			}
+			@Override
 			public Adapter caseNamedElement(NamedElement object) {
 			public Adapter caseNamedElement(NamedElement object) {
 				return createNamedElementAdapter();
 				return createNamedElementAdapter();
 			}
 			}
@@ -392,6 +397,20 @@ public class TypesAdapterFactory extends AdapterFactoryImpl {
 		return null;
 		return null;
 	}
 	}
 
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.PackageMember <em>Package 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.yakindu.base.types.PackageMember
+	 * @generated
+	 */
+	public Adapter createPackageMemberAdapter() {
+		return null;
+	}
+
 	/**
 	/**
 	 * Creates a new adapter for the default case.
 	 * Creates a new adapter for the default case.
 	 * <!-- begin-user-doc --> This
 	 * <!-- begin-user-doc --> This

+ 29 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesSwitch.java

@@ -16,6 +16,7 @@ import org.yakindu.base.types.Enumerator;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Feature;
 import org.yakindu.base.types.Feature;
 import org.yakindu.base.types.Operation;
 import org.yakindu.base.types.Operation;
+import org.yakindu.base.types.PackageMember;
 import org.yakindu.base.types.Parameter;
 import org.yakindu.base.types.Parameter;
 import org.yakindu.base.types.ParameterizedType;
 import org.yakindu.base.types.ParameterizedType;
 import org.yakindu.base.types.PrimitiveType;
 import org.yakindu.base.types.PrimitiveType;
@@ -89,6 +90,7 @@ public class TypesSwitch<T> extends Switch<T> {
 			case TypesPackage.TYPE: {
 			case TypesPackage.TYPE: {
 				Type type = (Type)theEObject;
 				Type type = (Type)theEObject;
 				T result = caseType(type);
 				T result = caseType(type);
+				if (result == null) result = casePackageMember(type);
 				if (result == null) result = caseNamedElement(type);
 				if (result == null) result = caseNamedElement(type);
 				if (result == null) result = defaultCase(theEObject);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 				return result;
@@ -147,6 +149,7 @@ public class TypesSwitch<T> extends Switch<T> {
 				T result = caseEnumerationType(enumerationType);
 				T result = caseEnumerationType(enumerationType);
 				if (result == null) result = casePrimitiveType(enumerationType);
 				if (result == null) result = casePrimitiveType(enumerationType);
 				if (result == null) result = caseType(enumerationType);
 				if (result == null) result = caseType(enumerationType);
+				if (result == null) result = casePackageMember(enumerationType);
 				if (result == null) result = caseNamedElement(enumerationType);
 				if (result == null) result = caseNamedElement(enumerationType);
 				if (result == null) result = defaultCase(theEObject);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 				return result;
@@ -155,6 +158,7 @@ public class TypesSwitch<T> extends Switch<T> {
 				PrimitiveType primitiveType = (PrimitiveType)theEObject;
 				PrimitiveType primitiveType = (PrimitiveType)theEObject;
 				T result = casePrimitiveType(primitiveType);
 				T result = casePrimitiveType(primitiveType);
 				if (result == null) result = caseType(primitiveType);
 				if (result == null) result = caseType(primitiveType);
+				if (result == null) result = casePackageMember(primitiveType);
 				if (result == null) result = caseNamedElement(primitiveType);
 				if (result == null) result = caseNamedElement(primitiveType);
 				if (result == null) result = defaultCase(theEObject);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 				return result;
@@ -164,6 +168,7 @@ public class TypesSwitch<T> extends Switch<T> {
 				T result = caseComplexType(complexType);
 				T result = caseComplexType(complexType);
 				if (result == null) result = caseParameterizedType(complexType);
 				if (result == null) result = caseParameterizedType(complexType);
 				if (result == null) result = caseType(complexType);
 				if (result == null) result = caseType(complexType);
+				if (result == null) result = casePackageMember(complexType);
 				if (result == null) result = caseNamedElement(complexType);
 				if (result == null) result = caseNamedElement(complexType);
 				if (result == null) result = defaultCase(theEObject);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 				return result;
@@ -186,6 +191,7 @@ public class TypesSwitch<T> extends Switch<T> {
 				TypeParameter typeParameter = (TypeParameter)theEObject;
 				TypeParameter typeParameter = (TypeParameter)theEObject;
 				T result = caseTypeParameter(typeParameter);
 				T result = caseTypeParameter(typeParameter);
 				if (result == null) result = caseType(typeParameter);
 				if (result == null) result = caseType(typeParameter);
+				if (result == null) result = casePackageMember(typeParameter);
 				if (result == null) result = caseNamedElement(typeParameter);
 				if (result == null) result = caseNamedElement(typeParameter);
 				if (result == null) result = defaultCase(theEObject);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 				return result;
@@ -194,10 +200,18 @@ public class TypesSwitch<T> extends Switch<T> {
 				ParameterizedType parameterizedType = (ParameterizedType)theEObject;
 				ParameterizedType parameterizedType = (ParameterizedType)theEObject;
 				T result = caseParameterizedType(parameterizedType);
 				T result = caseParameterizedType(parameterizedType);
 				if (result == null) result = caseType(parameterizedType);
 				if (result == null) result = caseType(parameterizedType);
+				if (result == null) result = casePackageMember(parameterizedType);
 				if (result == null) result = caseNamedElement(parameterizedType);
 				if (result == null) result = caseNamedElement(parameterizedType);
 				if (result == null) result = defaultCase(theEObject);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 				return result;
 			}
 			}
+			case TypesPackage.PACKAGE_MEMBER: {
+				PackageMember packageMember = (PackageMember)theEObject;
+				T result = casePackageMember(packageMember);
+				if (result == null) result = caseNamedElement(packageMember);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 			default: return defaultCase(theEObject);
 		}
 		}
 	}
 	}
@@ -432,6 +446,21 @@ public class TypesSwitch<T> extends Switch<T> {
 		return null;
 		return null;
 	}
 	}
 
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Package 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>Package Member</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePackageMember(PackageMember object) {
+		return null;
+	}
+
 	/**
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
 	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
 	 * <!-- begin-user-doc --> This implementation returns
 	 * <!-- begin-user-doc --> This implementation returns

+ 8 - 2
plugins/org.yakindu.base.types/src/org/yakindu/base/types/DefaultTypeSystem.java

@@ -188,8 +188,11 @@ public class DefaultTypeSystem extends AbstractTypeSystem implements ITypeSystem
 					+ binaryOperator.getSymbol() + ", because types were not inferred for all of its operands.",
 					+ binaryOperator.getSymbol() + ", because types were not inferred for all of its operands.",
 					IStatus.ERROR));
 					IStatus.ERROR));
 		}
 		}
+		//TODO:
+		if(firstOperandType.getType() instanceof TypeParameter || secondOperandType.getType() instanceof TypeParameter)
+			return null;
 
 
-		// infer type base on operator (fist pass: check types are valid, second
+			// infer type base on operator (fist pass: check types are valid, second
 		// pass: compute result type)
 		// pass: compute result type)
 		BinaryOperators o = (BinaryOperators) binaryOperator;
 		BinaryOperators o = (BinaryOperators) binaryOperator;
 		switch (o) {
 		switch (o) {
@@ -534,10 +537,13 @@ public class DefaultTypeSystem extends AbstractTypeSystem implements ITypeSystem
 		if (isVoidType(type))
 		if (isVoidType(type))
 			return null;
 			return null;
 		if (isStringType(type))
 		if (isStringType(type))
-			return "";
+			return "\"\"";
 		if (type instanceof EnumerationType) {
 		if (type instanceof EnumerationType) {
 			return ((EnumerationType) type).getEnumerator().get(0);
 			return ((EnumerationType) type).getEnumerator().get(0);
 		}
 		}
+		if(type instanceof ComplexType){
+			return "{}";
+		}
 		return null;
 		return null;
 
 
 	}
 	}