<?xml version="1.0" encoding="UTF-8"?>
<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">
  <eClassifiers xsi:type="ecore:EClass" name="Package" eSuperTypes="base.ecore#//NamedElement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="member" upperBound="-1"
        eType="#//PackageMember" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="domain" eType="#//Domain"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="import" upperBound="-1"
        eType="#//Package"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="#//PackageMember">
    <eOperations name="getOriginType" eType="#//Type"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="constraint" upperBound="-1"
        eType="#//TypeConstraint" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="abstract" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Declaration" abstract="true" eSuperTypes="#//TypedElement base.ecore#//NamedElement #//PackageMember"/>
  <eClassifiers xsi:type="ecore:EClass" name="Operation" eSuperTypes="#//Declaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
        eType="#//Parameter" containment="true" eOpposite="#//Parameter/owningOperation"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Property" eSuperTypes="#//Declaration">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="const" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="readonly" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="external" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Parameter" eSuperTypes="#//TypedElement base.ecore#//NamedElement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="owningOperation" eType="#//Operation"
        eOpposite="#//Operation/parameters"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TypedElement" abstract="true" interface="true">
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="typeArguments" upperBound="-1"
        eType="#//Type"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Event" eSuperTypes="#//Declaration">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" eType="#//Direction"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EEnum" name="Direction">
    <eLiterals name="LOCAL" literal="local"/>
    <eLiterals name="IN" value="1" literal="in"/>
    <eLiterals name="OUT" value="2" literal="out"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="EnumerationType" eSuperTypes="#//PrimitiveType">
    <eStructuralFeatures xsi:type="ecore:EReference" name="enumerator" upperBound="-1"
        eType="#//Enumerator" containment="true" eOpposite="#//Enumerator/owningEnumeration"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PrimitiveType" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="baseType" eType="#//PrimitiveType"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ComplexType" eSuperTypes="#//ParameterizedType">
    <eOperations name="getAllFeatures" upperBound="-1" eType="#//Declaration"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
        eType="#//Declaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="superTypes" upperBound="-1"
        eType="#//ComplexType"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Enumerator" eSuperTypes="base.ecore#//NamedElement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="owningEnumeration" eType="#//EnumerationType"
        eOpposite="#//EnumerationType/enumerator"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="literalValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TypeConstraint">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TypeParameter" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="bound" eType="#//Type"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ParameterizedType" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" upperBound="-1"
        eType="#//TypeParameter" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PackageMember" eSuperTypes="base.ecore#//NamedElement"/>
  <eClassifiers xsi:type="ecore:EClass" name="RangeConstraint" eSuperTypes="#//TypeConstraint">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Domain">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="domainID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TypeAlias" eSuperTypes="#//TypedElement #//Type"/>
</ecore:EPackage>
