Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

1465 lines (1464 sloc) 223.134 kB
<?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" xmi:id="_WosmsNz1Ed2bJ_pQViWxFg"
name="java" nsURI="http://www.emftext.org/java" nsPrefix="java">
<eSubpackages xmi:id="_Wosmsdz1Ed2bJ_pQViWxFg" name="annotations" nsURI="http://www.emftext.org/java/annotations"
nsPrefix="annotations">
<eClassifiers xsi:type="ecore:EClass" name="Annotable" abstract="true" eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
eType="#_Wosms9z1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wosms9z1Ed2bJ_pQViWxFg" name="AnnotationInstance"
eSuperTypes="#//references/Reference #//modifiers/AnnotationInstanceOrModifier #//commons/NamespaceAwareElement">
<eStructuralFeatures xsi:type="ecore:EReference" name="annotation" lowerBound="1"
eType="#//classifiers/Classifier"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wosmttz1Ed2bJ_pQViWxFg"
name="parameter" eType="#//annotations/AnnotationParameter" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AnnotationParameter" abstract="true"
eSuperTypes="#//commons/Commentable"/>
<eClassifiers xsi:type="ecore:EClass" name="SingleAnnotationParameter" eSuperTypes="#//annotations/AnnotationParameter">
<eStructuralFeatures xsi:type="ecore:EReference" name="value" lowerBound="1"
eType="#//annotations/AnnotationValue" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AnnotationParameterList" eSuperTypes="#//annotations/AnnotationParameter">
<eStructuralFeatures xsi:type="ecore:EReference" name="settings" upperBound="-1"
eType="#_Wosmt9z1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wosmt9z1Ed2bJ_pQViWxFg" name="AnnotationAttributeSetting"
eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_WosmuNz1Ed2bJ_pQViWxFg"
name="attribute" lowerBound="1" eType="#//members/InterfaceMethod"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wosmudz1Ed2bJ_pQViWxFg"
name="value" lowerBound="1" eType="#//annotations/AnnotationValue" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AnnotationValue" abstract="true" eSuperTypes="#//commons/Commentable"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wosmv9z1Ed2bJ_pQViWxFg" name="AnnotationAttribute"
eSuperTypes="#//members/InterfaceMethod">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_WosmwNz1Ed2bJ_pQViWxFg"
name="defaultValue" lowerBound="1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
</eSubpackages>
<eSubpackages name="arrays" nsURI="http://www.emftext.org/java/arrays" nsPrefix="arrays">
<eClassifiers xsi:type="ecore:EClass" name="ArrayTypeable" abstract="true" eSuperTypes="#//commons/Commentable">
<eOperations name="getArrayDimension" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="arrayDimensionsBefore"
upperBound="-1" eType="#//arrays/ArrayDimension" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="arrayDimensionsAfter"
upperBound="-1" eType="#//arrays/ArrayDimension" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ArrayDimension" eSuperTypes="#//commons/Commentable"/>
<eClassifiers xsi:type="ecore:EClass" name="ArrayInitializer" eSuperTypes="#//arrays/ArrayInitializationValue #//annotations/AnnotationValue">
<eStructuralFeatures xsi:type="ecore:EReference" name="initialValues" upperBound="-1"
eType="#//arrays/ArrayInitializationValue" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ArrayInitializationValue" abstract="true"
eSuperTypes="#//commons/Commentable"/>
<eClassifiers xsi:type="ecore:EClass" name="ArrayInstantiation" abstract="true"
eSuperTypes="#_Wo2YDNz1Ed2bJ_pQViWxFg #//references/Reference"/>
<eClassifiers xsi:type="ecore:EClass" name="ArrayInstantiationBySize" eSuperTypes="#//arrays/ArrayInstantiation #_Wo2ZP9z1Ed2bJ_pQViWxFg #//arrays/ArrayTypeable">
<eStructuralFeatures xsi:type="ecore:EReference" name="sizes" lowerBound="1"
upperBound="-1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ArrayInstantiationByValues" abstract="true"
eSuperTypes="#//arrays/ArrayInstantiation">
<eStructuralFeatures xsi:type="ecore:EReference" name="arrayInitializer" lowerBound="1"
eType="#//arrays/ArrayInitializer" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ArrayInstantiationByValuesUntyped"
eSuperTypes="#//arrays/ArrayInstantiationByValues"/>
<eClassifiers xsi:type="ecore:EClass" name="ArrayInstantiationByValuesTyped" eSuperTypes="#//arrays/ArrayInstantiationByValues #_Wo2ZP9z1Ed2bJ_pQViWxFg #//arrays/ArrayTypeable"/>
<eClassifiers xsi:type="ecore:EClass" name="ArraySelector" eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="position" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg"
containment="true"/>
</eClassifiers>
</eSubpackages>
<eSubpackages name="classifiers" nsURI="http://www.emftext.org/java/classifiers"
nsPrefix="classifiers">
<eClassifiers xsi:type="ecore:EClass" name="Classifier" abstract="true" eSuperTypes="#_Wo2ZO9z1Ed2bJ_pQViWxFg #//references/ReferenceableElement">
<eOperations name="getAllSuperClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="//method has to be specified in subclasses&#xA;throw new java.lang.UnsupportedOperationException();"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ConcreteClassifier" abstract="true"
eSuperTypes="#//classifiers/Classifier #//generics/TypeParametrizable #//members/MemberContainer #//members/Member #_Wo2YzNz1Ed2bJ_pQViWxFg #//modifiers/AnnotableAndModifiable">
<eOperations name="getInnerClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (this.eIsProxy()) {&#xA;&#x9; java.lang.String uriString = (( org.eclipse.emf.ecore.InternalEObject)this).eProxyURI().trimFragment().toString();&#xA;&#x9; java.lang.String fullName = uriString.substring( org.emftext.language.java.JavaUniquePathConstructor.JAVA_CLASSIFIER_PATHMAP.length(), &#xA;&#x9;&#x9;&#x9; uriString.length() - &quot;.java&quot;.length()) + &quot;$&quot;;&#xA;&#x9; return getConcreteClassifierProxies(fullName, &quot;*&quot;);&#xA;}&#xA;else {&#xA;&#x9;java.lang.String suffix = &quot;&quot;;&#xA;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier containingClass = this;&#xA;&#x9;while (containingClass.eContainer() instanceof org.emftext.language.java.classifiers.ConcreteClassifier) {&#xA;&#x9;&#x9;containingClass = ( org.emftext.language.java.classifiers.ConcreteClassifier) containingClass.eContainer();&#xA;&#x9;&#x9;suffix = containingClass.getName() + org.emftext.language.java.JavaUniquePathConstructor.CLASSIFIER_SEPARATOR + suffix;&#xA;&#x9;}&#xA;&#x9;if (containingClass.eContainer() instanceof org.emftext.language.java.containers.CompilationUnit) {&#xA;&#x9;&#x9;org.emftext.language.java.containers.CompilationUnit compilationUnit = ( org.emftext.language.java.containers.CompilationUnit) containingClass.eContainer();&#xA;&#x9; java.lang.String fullName = compilationUnit.getNamespacesAsString() + suffix + &#xA;&#x9; &#x9;getName() + org.emftext.language.java.JavaUniquePathConstructor.CLASSIFIER_SEPARATOR;&#xA;&#x9; return getConcreteClassifierProxies(fullName, &quot;*&quot;);&#xA;&#x9;}&#xA;}&#xA;&#xA;//for classes declared locally inside methods that are not registered in the class path&#xA;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> result = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;//can not call ClassifierUtil.getAllMembers, because it will try to call this method!&#xA;for( org.emftext.language.java.members.Member member : getMembers()) {&#xA;&#x9;if(member instanceof org.emftext.language.java.classifiers.ConcreteClassifier) {&#xA;&#x9;&#x9;result.add(( org.emftext.language.java.classifiers.ConcreteClassifier) member);&#xA;&#x9;}&#xA;}&#xA;for( org.emftext.language.java.classifiers.ConcreteClassifier superClassifier : getAllSuperClassifiers()) {&#xA;&#x9;for( org.emftext.language.java.members.Member member : superClassifier.getMembers()) {&#xA;&#x9;&#x9;if(member instanceof org.emftext.language.java.classifiers.ConcreteClassifier) {&#xA;&#x9;&#x9;&#x9;result.add(( org.emftext.language.java.classifiers.ConcreteClassifier) member);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;return result;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="getAllInnerClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> innerClassifierList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;&#xA;innerClassifierList.addAll(getInnerClassifiers());&#xA;&#xA;for ( org.emftext.language.java.classifiers.ConcreteClassifier superClassifier : getAllSuperClassifiers()) {&#xA;&#x9;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> superInnerList = superClassifier&#xA;&#x9;&#x9;&#x9;.getInnerClassifiers();&#xA;&#xA;&#x9;for ( org.emftext.language.java.classifiers.ConcreteClassifier superInner : superInnerList) {&#xA;&#x9;&#x9;if (superInner.eIsProxy()) {&#xA;&#x9;&#x9;&#x9;superInner = ( org.emftext.language.java.classifiers.ConcreteClassifier) org.eclipse.emf.ecore.util.EcoreUtil.resolve(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;superInner, this);&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;if (!superInner.isHidden(this)) {&#xA;&#x9;&#x9;&#x9;innerClassifierList.add(superInner);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#x9;&#xA;return innerClassifierList;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="getSuperTypeReferences" upperBound="-1" eType="#//types/ClassifierReference">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.types.ClassifierReference> typeReferenceList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.types.ClassifierReference>();&#xA;if(this == null) {&#xA;&#x9;return typeReferenceList;&#xA;}&#xA;&#xA;if (this instanceof org.emftext.language.java.classifiers.Class) {&#xA;&#x9;org.emftext.language.java.classifiers.Class javaClass = ( org.emftext.language.java.classifiers.Class) this;&#xA;&#x9;if (javaClass.getExtends() != null) {&#xA;&#x9;&#x9;org.emftext.language.java.types.ClassifierReference classifierReference = javaClass.getExtends().getPureClassifierReference();&#xA;&#x9;&#x9;typeReferenceList.add(classifierReference);&#xA;&#x9;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier target = ( org.emftext.language.java.classifiers.ConcreteClassifier) classifierReference.getTarget();&#xA;&#x9;&#x9;if (!target.equals(getObjectClass())) {&#xA;&#x9;&#x9;&#x9;typeReferenceList.addAll(target.getSuperTypeReferences());&#xA;&#x9;&#x9;}&#xA;&#x9;}&#x9;&#xA;&#x9;for( org.emftext.language.java.types.TypeReference interfaceReference : javaClass.getImplements()) {&#xA;&#x9;&#x9;org.emftext.language.java.types.ClassifierReference classifierReference = interfaceReference.getPureClassifierReference();&#xA;&#x9;&#x9;typeReferenceList.add(classifierReference);&#xA;&#x9;&#x9;typeReferenceList.addAll((( org.emftext.language.java.classifiers.ConcreteClassifier) classifierReference.getTarget()).getSuperTypeReferences());&#xA;&#x9;}&#xA;} else if (this instanceof org.emftext.language.java.classifiers.Interface) {&#xA;&#x9;org.emftext.language.java.classifiers.Interface javaInterface = ( org.emftext.language.java.classifiers.Interface) this;&#xA;&#x9;for( org.emftext.language.java.types.TypeReference interfaceReference : javaInterface.getExtends()) {&#xA;&#x9;&#x9;org.emftext.language.java.types.ClassifierReference classifierReference = interfaceReference.getPureClassifierReference();&#xA;&#x9;&#x9;typeReferenceList.add(classifierReference);&#xA;&#x9;&#x9;typeReferenceList.addAll((( org.emftext.language.java.classifiers.ConcreteClassifier) classifierReference.getTarget()).getSuperTypeReferences());&#xA;&#x9;}&#xA;}&#xA;return typeReferenceList;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="getAllMembers" upperBound="-1" eType="#//members/Member">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.members.Member> memberList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.members.Member>();&#xA;&#xA;org.emftext.language.java.classifiers.ConcreteClassifier concreteClassifier = ( org.emftext.language.java.classifiers.ConcreteClassifier) this;&#xA;memberList.addAll(concreteClassifier.getMembers());&#xA;memberList.addAll(concreteClassifier.getDefaultMembers());&#xA;//because inner classes are found in separate class files&#xA;memberList.addAll(concreteClassifier.getAllInnerClassifiers());&#xA;&#xA;for ( org.emftext.language.java.classifiers.ConcreteClassifier superClassifier : getAllSuperClassifiers()) {&#xA;&#x9;for( org.emftext.language.java.members.Member member : superClassifier.getMembers()) {&#xA;&#x9;&#x9;if(member instanceof org.emftext.language.java.modifiers.AnnotableAndModifiable) {&#x9;&#x9;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.modifiers.AnnotableAndModifiable modifiable = ( org.emftext.language.java.modifiers.AnnotableAndModifiable) member;&#xA;&#xA;&#x9;&#x9;&#x9;if(!modifiable.isHidden(context)) {&#xA;&#x9;&#x9;&#x9;&#x9;memberList.add(member);&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;memberList.add(member);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;memberList.addAll(superClassifier.getDefaultMembers());&#xA;}&#xA;return memberList;"/>
<details key="documentation" value="&#xA; Returns all members of the given classifier including inner classes and &#xA; all members of super types (extended classes and implemented interfaces).&#xA; &#xA; @param context to check protected visibility&#xA; @return member list&#xA;"/>
</eAnnotations>
<eParameters name="context" eType="#//commons/Commentable"/>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Implementor" abstract="true" eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="implements" upperBound="-1"
eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Class" eSuperTypes="#//classifiers/ConcreteClassifier #//classifiers/Implementor">
<eOperations name="getAllSuperClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> result = &#xA;&#x9;new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;&#x9;&#x9;&#x9;&#xA;//collects all superclasses first&#xA;org.emftext.language.java.classifiers.Class superClass = this;&#xA;while (superClass != null &amp;&amp; !superClass.eIsProxy() &amp;&amp; &#xA;&#x9;&#x9;!superClass.equals(getObjectClass())) {&#xA;&#x9;superClass = superClass.getSuperClass();&#xA;&#x9;if (superClass != null) {&#xA;&#x9;&#x9;result.add(superClass);&#xA;&#x9;}&#xA;}&#xA;&#xA;//collect all implemented interfaces&#xA;for ( org.emftext.language.java.types.TypeReference typeArg : this.getImplements()) {&#xA;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier superInterface = ( org.emftext.language.java.classifiers.ConcreteClassifier) typeArg.getTarget();&#xA;&#x9;if (superInterface != null) {&#xA;&#x9;&#x9;result.add(superInterface);&#xA;&#x9;&#x9;if (superInterface instanceof org.emftext.language.java.classifiers.Interface) {&#xA;&#x9;&#x9;&#x9;result.addAll((( org.emftext.language.java.classifiers.Interface)superInterface).getAllSuperClassifiers());&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;//collect all implemented interfaces of super classes&#xA;superClass = this.getSuperClass();&#x9;&#xA;if (superClass != null &amp;&amp; !superClass.eIsProxy() &amp;&amp; &#xA;&#x9;&#x9;!superClass.equals(getObjectClass())) {&#xA;&#x9;result.addAll(superClass.getAllSuperClassifiers());&#xA;}&#x9;&#xA;&#xA;return result;"/>
<details key="documentation" value="&#xA; Recursively collects all super types (extended classes and implemented interfaces)&#xA; of the given class.&#xA; &#xA; @param classifierList the list for the result&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getSuperClass" eType="#//classifiers/Class">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.types.TypeReference superClassReference = this.getExtends();&#xA;if (superClassReference == null) {&#xA;&#x9;superClassReference = this.getDefaultExtends();&#xA;}&#xA;if (superClassReference == null) {&#xA;&#x9;return null;&#xA;}&#xA;org.emftext.language.java.types.Type result = superClassReference.getTarget();&#xA;if (result instanceof org.emftext.language.java.classifiers.Class) {&#xA;&#x9;return ( org.emftext.language.java.classifiers.Class) result;&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; @param this&#xA; @return the direct super class&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="unWrapPrimitiveType" eType="#_Wo2ZR9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (getLibClass(&quot;Boolean&quot;).equals(this)) {&#xA;&#x9;return org.emftext.language.java.types.TypesFactory.eINSTANCE.createBoolean();&#xA;}&#xA;if (getLibClass(&quot;Byte&quot;).equals(this)) {&#xA;&#x9;return org.emftext.language.java.types.TypesFactory.eINSTANCE.createByte();&#xA;}&#xA;if (getLibClass(&quot;Character&quot;).equals(this)) {&#xA;&#x9;return org.emftext.language.java.types.TypesFactory.eINSTANCE.createChar();&#xA;}&#xA;if (getLibClass(&quot;Float&quot;).equals(this)) {&#xA;&#x9;return org.emftext.language.java.types.TypesFactory.eINSTANCE.createFloat();&#xA;}&#xA;if (getLibClass(&quot;Double&quot;).equals(this)) {&#xA;&#x9;return org.emftext.language.java.types.TypesFactory.eINSTANCE.createDouble();&#xA;}&#xA;if (getLibClass(&quot;Integer&quot;).equals(this)) {&#xA;&#x9;return org.emftext.language.java.types.TypesFactory.eINSTANCE.createInt();&#xA;}&#xA;if (getLibClass(&quot;Long&quot;).equals(this)) {&#xA;&#x9;return org.emftext.language.java.types.TypesFactory.eINSTANCE.createLong();&#xA;}&#xA;if (getLibClass(&quot;Short&quot;).equals(this)) {&#xA;&#x9;return org.emftext.language.java.types.TypesFactory.eINSTANCE.createShort();&#xA;}&#xA;if (getLibClass(&quot;Void&quot;).equals(this)) {&#xA;&#x9;return org.emftext.language.java.types.TypesFactory.eINSTANCE.createVoid();&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; @param this&#xA; @return primitive type, if the class can be wrapped&#xA;"/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="extends" eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg"
containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="defaultExtends" eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Interface" eSuperTypes="#//classifiers/ConcreteClassifier">
<eOperations name="getAllSuperClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> result = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;&#xA;for ( org.emftext.language.java.types.TypeReference typeArg : this.getExtends()) {&#xA;&#x9;//use ConcreteClassifier instead of Interface because java.lang.Object can also act as implemented interface&#xA;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier superInterface = ( org.emftext.language.java.classifiers.ConcreteClassifier) typeArg.getTarget();&#xA;&#x9;if (superInterface != null) {&#xA;&#x9;&#x9;result.add(superInterface);&#xA;&#x9;&#x9;if (superInterface instanceof org.emftext.language.java.classifiers.Interface) {&#xA;&#x9;&#x9;&#x9;result.addAll((( org.emftext.language.java.classifiers.Interface)superInterface).getAllSuperClassifiers());&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;for ( org.emftext.language.java.types.TypeReference typeArg : this.getDefaultExtends()) {&#xA;&#x9;//use ConcreteClassifier instead of Interface because java.lang.Object can also act as implemented interface&#xA;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier superInterface = ( org.emftext.language.java.classifiers.ConcreteClassifier) typeArg.getTarget();&#xA;&#x9;if (superInterface != null) {&#xA;&#x9;&#x9;result.add(superInterface);&#xA;&#x9;&#x9;if (superInterface instanceof org.emftext.language.java.classifiers.Interface) {&#xA;&#x9;&#x9;&#x9;result.addAll((( org.emftext.language.java.classifiers.Interface)superInterface).getAllSuperClassifiers());&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;return result;"/>
<details key="documentation" value="&#xA; @return all interfaces extended by this interface. The type is &#xA; ConcreteClassifier, because java.lang.Object is also extended although&#xA; it is a Class.&#xA;"/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="extends" upperBound="-1"
eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="defaultExtends" upperBound="-1"
eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Enumeration" eSuperTypes="#//classifiers/ConcreteClassifier #//classifiers/Implementor">
<eOperations name="getAllSuperClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> result = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;&#xA;//enumerations inherit from java.lang.Enum&#xA;org.emftext.language.java.classifiers.Class enumClass = getLibClass(&quot;Enum&quot;);&#xA;result.add(enumClass);&#xA;result.addAll(enumClass.getAllSuperClassifiers());&#xA;&#xA;//collect all implemented interfaces&#xA;for ( org.emftext.language.java.types.TypeReference typeArg : this.getImplements()) {&#xA;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier superInterface = ( org.emftext.language.java.classifiers.ConcreteClassifier) typeArg.getTarget();&#xA;&#x9;if (superInterface != null) {&#xA;&#x9;&#x9;result.add(superInterface);&#xA;&#x9;&#x9;if (superInterface instanceof org.emftext.language.java.classifiers.Interface) {&#xA;&#x9;&#x9;&#x9;result.addAll((( org.emftext.language.java.classifiers.Interface)superInterface).getAllSuperClassifiers());&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;return result;"/>
<details key="documentation" value="&#xA; @return all interfaces extended by this enumeration.&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getContainedConstant" eType="#//members/EnumConstant">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="for( org.emftext.language.java.members.EnumConstant constant : getConstants()) {&#xA;&#x9;if (name.equals(constant.getName())) {&#xA;&#x9;&#x9;return constant;&#xA;&#x9;}&#xA; &#x9;&#x9;}&#xA;return null;"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="constants" upperBound="-1"
eType="#//members/EnumConstant" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Annotation" eSuperTypes="#//classifiers/ConcreteClassifier">
<eOperations name="getAllSuperClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> result = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;result.add(getAnnotationInterface());&#xA;return result;"/>
<details key="documentation" value="&#xA; @return &lt;code>java.lang.annotation.Annotation&lt;/code> &#xA;"/>
</eAnnotations>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AnonymousClass" eSuperTypes="#_Wo2ZO9z1Ed2bJ_pQViWxFg #//members/MemberContainer">
<eOperations name="getAllSuperClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> superClassifierList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;&#xA;org.emftext.language.java.classifiers.ConcreteClassifier superClassifier = getSuperClassifier();&#xA;&#xA;if (superClassifier != null) {&#xA;&#x9;superClassifierList.add(superClassifier);&#xA;&#x9;superClassifierList.addAll(superClassifier.getAllSuperClassifiers());&#xA;}&#xA;else {&#xA;&#x9;superClassifierList.add(getObjectClass());&#xA;}&#xA;return superClassifierList;"/>
<details key="documentation" value="&#xA; @return a view on all super classifiers&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getSuperClassifier" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.instantiations.NewConstructorCall ncCall = null;&#xA;if (this.eContainer() instanceof org.emftext.language.java.instantiations.NewConstructorCall) {&#xA;&#x9;ncCall = ( org.emftext.language.java.instantiations.NewConstructorCall) this.eContainer();&#xA;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier superClassifier = ( org.emftext.language.java.classifiers.ConcreteClassifier) ncCall.getTypeReference().getTarget();&#xA;&#x9;return superClassifier;&#xA;}&#xA;else if (this.eContainer() instanceof org.emftext.language.java.members.EnumConstant) {&#xA;&#x9;if (this.eContainer().eContainer() instanceof org.emftext.language.java.classifiers.Enumeration) {&#xA;&#x9;&#x9;return ( org.emftext.language.java.classifiers.Enumeration) this.eContainer().eContainer();&#xA;&#x9;}&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; @return the direct super classifier&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getAllMembers" upperBound="-1" eType="#//members/Member">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.members.Member> memberList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.members.Member>();&#xA;memberList.addAll(this.getMembers());&#xA;memberList.addAll(this.getDefaultMembers());&#xA;&#xA;org.emftext.language.java.instantiations.NewConstructorCall ncCall = null;&#xA;if (this.eContainer() instanceof org.emftext.language.java.instantiations.NewConstructorCall) {&#xA;&#x9;ncCall = ( org.emftext.language.java.instantiations.NewConstructorCall) this.eContainer();;&#xA;}&#xA;if (ncCall == null) {&#xA;&#x9;return memberList;&#xA;}&#xA;else {&#xA;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier classifier = ( org.emftext.language.java.classifiers.ConcreteClassifier) ncCall.getTypeReference().getTarget();&#xA;&#x9;if (classifier != null) {&#xA;&#x9;&#x9;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.members.Member> superMemberList = classifier.getAllMembers(context);&#xA;&#x9;&#x9;for( org.emftext.language.java.members.Member superMember : superMemberList) {&#xA;&#x9;&#x9;&#x9;//exclude private members&#xA;&#x9;&#x9;&#x9;if(superMember instanceof org.emftext.language.java.modifiers.AnnotableAndModifiable) {&#x9;&#x9;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;&#x9;if (superMember.eIsProxy()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;superMember = ( org.emftext.language.java.members.Member) org.eclipse.emf.ecore.util.EcoreUtil.resolve(superMember, this);&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.modifiers.AnnotableAndModifiable modifiable = ( org.emftext.language.java.modifiers.AnnotableAndModifiable) superMember;&#xA;&#x9;&#x9;&#x9;&#x9;if(!modifiable.isHidden(context)) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;memberList.add(superMember);&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;&#x9;memberList.add(superMember);&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;return memberList;&#xA;}"/>
<details key="documentation" value="&#xA; @param context to check protected visibility&#xA; @return a view on all members including super classifiers' members&#xA;"/>
</eAnnotations>
<eParameters name="context" eType="#//commons/Commentable"/>
</eOperations>
</eClassifiers>
</eSubpackages>
<eSubpackages name="commons" nsURI="http://www.emftext.org/java/commons" nsPrefix="commons">
<eClassifiers xsi:type="ecore:EClass" name="Commentable" abstract="true">
<eOperations name="getConcreteClassifier" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return ( org.emftext.language.java.classifiers.ConcreteClassifier) org.eclipse.emf.ecore.util.EcoreUtil.resolve(&#xA;&#x9;org.emftext.language.java.JavaClasspath.get(this).getClassifier(name), this);"/>
<details key="documentation" value="&#xA; Finds the &lt;code>org.emftext.language.java.classifiers.ConcreteClassifier&lt;/code>&#xA; representing the class with the given classified name.&#xA; &#xA; @param name classified name of the ConcreteClassifier&#xA;"/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getConcreteClassifierProxy" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return ( org.emftext.language.java.classifiers.ConcreteClassifier) org.emftext.language.java.JavaClasspath.get(this).getClassifier(name);"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getConcreteClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> result = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;for( org.eclipse.emf.ecore.EObject classifier : org.emftext.language.java.JavaClasspath.get(this).getClassifiers(packageName, classifierQuery)) {&#xA;&#x9;result.add(( org.emftext.language.java.classifiers.ConcreteClassifier) org.eclipse.emf.ecore.util.EcoreUtil.resolve(classifier, this));&#xA;}&#xA;return result;"/>
<details key="documentation" value="&#xA; Finds all &lt;code>org.emftext.language.java.classifiers.ConcreteClassifier&lt;/code>&#xA; representing the classes in the given package or a single class from that package.&#xA; &#xA; @param packageName name of the package&#xA; for all classifiers or name of a single classifier&#xA;"/>
</eAnnotations>
<eParameters name="packageName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eParameters name="classifierQuery" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getConcreteClassifierProxies" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> result = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;for( org.eclipse.emf.ecore.EObject classifier : org.emftext.language.java.JavaClasspath.get(this).getClassifiers(packageName, classifierQuery)) {&#xA;&#x9;result.add(( org.emftext.language.java.classifiers.ConcreteClassifier)classifier);&#xA;}&#xA;return result;"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="packageName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eParameters name="classifierQuery" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getLibClass" eType="#//classifiers/Class">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.classifiers.Class classClass = ( org.emftext.language.java.classifiers.Class) getConcreteClassifierProxy(&#xA;&#x9;&#x9;&quot;java.lang.&quot; + name);&#xA;org.eclipse.emf.ecore.EObject resolved = ( org.emftext.language.java.classifiers.ConcreteClassifier) org.eclipse.emf.ecore.util.EcoreUtil.resolve(classClass, this);&#xA;if (resolved instanceof org.emftext.language.java.classifiers.Class) {&#xA;&#x9;return ( org.emftext.language.java.classifiers.Class) resolved;&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; Finds the &lt;code>org.emftext.language.java.classifiers.Class&lt;/code>&#xA; representing the class with the given name located in &lt;code>java.lang&lt;/code>.&#xA; &#xA; @param name name of the Class&#xA; @return the Class&#xA;"/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getLibInterface" eType="#//classifiers/Interface">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.classifiers.ConcreteClassifier interfaceClass = getConcreteClassifierProxy(&#xA;&#x9;&#x9;&quot;java.lang.&quot; + name);&#xA;org.eclipse.emf.ecore.EObject resolved = org.eclipse.emf.ecore.util.EcoreUtil.resolve(interfaceClass, this);&#xA;if (resolved instanceof org.emftext.language.java.classifiers.Interface) {&#xA;&#x9;return ( org.emftext.language.java.classifiers.Interface) resolved;&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; Finds the &lt;code>org.emftext.language.java.classifiers.Interface&lt;/code>&#xA; representing the interface with the given name located in &lt;code>java.lang&lt;/code>.&#xA; &#xA; @param name name of the Interface&#xA; @return the Class&#xA;"/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getClassClass" eType="#//classifiers/Class">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return getLibClass(&quot;Class&quot;);"/>
<details key="documentation" value="&#xA; Finds the &lt;code>org.emftext.language.java.classifiers.Class&lt;/code>&#xA; representing &lt;code>java.lang.Class&lt;/code>.&#xA; &#xA; @return the Class&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getObjectClass" eType="#//classifiers/Class">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return getLibClass(&quot;Object&quot;);"/>
<details key="documentation" value="&#xA; Finds the &lt;code>org.emftext.language.java.classifiers.Class&lt;/code>&#xA; representing &lt;code>java.lang.Object&lt;/code>.&#xA; &#xA; @return the Class&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getStringClass" eType="#//classifiers/Class">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return getLibClass(&quot;String&quot;);"/>
<details key="documentation" value="&#xA; Finds the &lt;code>org.emftext.language.java.classifiers.Class&lt;/code>&#xA; representing &lt;code>java.lang.String&lt;/code>.&#xA; &#xA; @return the Class&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getAnnotationInterface" eType="#//classifiers/Interface">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.classifiers.Interface annotationClass = ( org.emftext.language.java.classifiers.Interface) org.eclipse.emf.ecore.util.EcoreUtil.resolve(&#xA;&#x9;&#x9;getConcreteClassifierProxy(&quot;java.lang.annotation.Annotation&quot;), this);&#xA;org.eclipse.emf.ecore.EObject resolved = org.eclipse.emf.ecore.util.EcoreUtil.resolve(annotationClass, this);&#xA;if (resolved instanceof org.emftext.language.java.classifiers.Interface) {&#xA;&#x9;return ( org.emftext.language.java.classifiers.Interface) resolved;&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; Finds the &lt;code>org.emftext.language.java.classifiers.Interface&lt;/code>&#xA; representing &lt;code>java.lang.annotation.Annotation&lt;/code>.&#xA; &#xA; @return the Class&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getContainingAnnotationInstance" eType="#_Wosms9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.ecore.EObject value = this;&#xA;while (!(value instanceof org.emftext.language.java.annotations.AnnotationInstance) &amp;&amp; value != null) {&#xA;&#x9;value = value.eContainer();&#xA;}&#xA;return ( org.emftext.language.java.annotations.AnnotationInstance) value;"/>
<details key="documentation" value=" &#xA; Finds the containing annotation instance for the given element.&#xA; &#xA; @param value&#xA; @return containing annotation instance&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getContainingAnonymousClass" eType="#//classifiers/AnonymousClass">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.ecore.EObject value = this;&#xA;while (!(value instanceof org.emftext.language.java.classifiers.AnonymousClass) &#xA;&#x9;&#x9;&amp;&amp; !(value instanceof org.emftext.language.java.classifiers.ConcreteClassifier) //do not jump over other classifiers &#xA;&#x9;&#x9;&amp;&amp; value != null) {&#xA;&#x9;value = value.eContainer();&#xA;}&#xA;if (!(value instanceof org.emftext.language.java.classifiers.AnonymousClass)) {&#xA;&#x9;return null;&#xA;}&#xA;return ( org.emftext.language.java.classifiers.AnonymousClass) value;"/>
<details key="documentation" value="&#xA; Finds the containing anonymous class for the given element.&#xA; &#xA; @param value&#xA; @return containing anonymous class &#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getContainingConcreteClassifier" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.ecore.EObject value = this;&#xA;while (!(value instanceof org.emftext.language.java.classifiers.ConcreteClassifier) &amp;&amp; value != null) {&#xA;&#x9;value = value.eContainer();&#xA;}&#xA;return ( org.emftext.language.java.classifiers.ConcreteClassifier) value;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="getContainingCompilationUnit" eType="#//containers/CompilationUnit">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.ecore.EObject value = this;&#xA;while (!(value instanceof org.emftext.language.java.containers.CompilationUnit) &amp;&amp; value != null) {&#xA;&#x9;value = value.eContainer();&#xA;}&#xA;return ( org.emftext.language.java.containers.CompilationUnit) value;"/>
<details key="documentation" value="&#xA; Finds the containing compilation unit for the given element.&#xA; &#xA; @param value&#xA; @return containing compilation unit&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getContainingPackageName" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.containers.CompilationUnit cu = getContainingCompilationUnit();&#xA;if (cu == null) {&#xA;&#x9;return null;&#xA;}&#xA;&#xA;int idx = cu.getNamespaces().size();&#xA;if(cu.getName() != null) {&#xA;&#x9;char[] fullName = cu.getName().toCharArray();&#xA;&#x9;for(int i = 0; i &lt; fullName.length; i++) {&#xA;&#x9;&#x9;if (fullName[i] == '$') {&#xA;&#x9;&#x9;&#x9;idx--;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;return new org.eclipse.emf.common.util.BasicEList&lt; java.lang.String>(cu.getNamespaces().subList(0, idx));"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="getParentConcreteClassifier" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.classifiers.ConcreteClassifier classifier = getContainingConcreteClassifier();&#xA;if(classifier == null) {&#xA;&#x9;org.emftext.language.java.containers.CompilationUnit cu = getContainingCompilationUnit();&#xA;&#x9;//maybe the outer classifier is in an extra cu&#xA;&#x9;if (cu != null &amp;&amp; cu.getName() != null &amp;&amp; cu.getName().contains(&quot;$&quot;)) {&#xA;&#x9;&#x9;classifier = ( org.emftext.language.java.classifiers.ConcreteClassifier) org.eclipse.emf.ecore.util.EcoreUtil.resolve(&#xA;&#x9;&#x9;getConcreteClassifierProxy(cu.getNamespacesAsString()), this);&#xA;&#x9;&#x9;if(classifier.eIsProxy()) {&#xA;&#x9;&#x9;&#x9;classifier = null;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;return classifier;"/>
<details key="documentation" value="&#xA; Finds the classifier that is the parent of this element. If &#xA; this element is an inner classifier the parent classifier does&#xA; not necessarily contain this element, since it can reside in &#xA; a different compilation unit when stored in byte code.&#xA; &#xA; @param value&#xA; @return containing classifier&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getParentByEType" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.ecore.EObject container = this.eContainer();&#xA;while (container != null) {&#xA;&#x9;if (type.isInstance(container)) {&#xA;&#x9;&#x9;return container;&#xA;&#x9;}&#xA;&#x9;container = container.eContainer();&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; Walks up the containment hierarchy and returns the first parent with the&#xA; given type. If no such parent is found, null is returned.&#xA;"/>
</eAnnotations>
<eParameters name="type" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
</eOperations>
<eOperations name="getFirstChildByEType" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.util.Iterator&lt; org.eclipse.emf.ecore.EObject> it = this.eAllContents();&#xA;while (it.hasNext()) {&#xA;&#x9;org.eclipse.emf.ecore.EObject next = it.next();&#xA;&#x9;if (type.isInstance(next)) {&#xA;&#x9;&#x9;return next;&#xA;&#x9;}&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; Searches for the first child with the given type. If no such child is found, null is returned.&#xA;"/>
</eAnnotations>
<eParameters name="type" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
</eOperations>
<eOperations name="getParentByType">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.ecore.EObject container = this.eContainer();&#xA;while (container != null) {&#xA;&#x9;if (type.isInstance(container)) {&#xA;&#x9;&#x9;return type.cast(container);&#xA;&#x9;}&#xA;&#x9;container = container.eContainer();&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; Walks up the containment hierarchy and returns the first parent with the&#xA; given type. If no such parent is found, null is returned.&#xA;"/>
</eAnnotations>
<eGenericType eTypeParameter="#//commons/Commentable/getParentByType/T"/>
<eTypeParameters name="T"/>
<eParameters name="type">
<eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass">
<eTypeArguments eTypeParameter="#//commons/Commentable/getParentByType/T"/>
</eGenericType>
</eParameters>
</eOperations>
<eOperations name="getFirstChildByType">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.util.Iterator&lt; org.eclipse.emf.ecore.EObject> it = this.eAllContents();&#xA;while (it.hasNext()) {&#xA;&#x9;org.eclipse.emf.ecore.EObject next = it.next();&#xA;&#x9;if (type.isInstance(next)) {&#xA;&#x9;&#x9;return type.cast(next);&#xA;&#x9;}&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; Searches for the first child with the given type. If no such child is found, null is returned.&#xA;"/>
</eAnnotations>
<eGenericType eTypeParameter="#//commons/Commentable/getFirstChildByType/T"/>
<eTypeParameters name="T"/>
<eParameters name="type">
<eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass">
<eTypeArguments eTypeParameter="#//commons/Commentable/getFirstChildByType/T"/>
</eGenericType>
</eParameters>
</eOperations>
<eOperations name="getChildrenByEType" upperBound="-1" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.eclipse.emf.ecore.EObject> children = new org.eclipse.emf.common.util.BasicEList&lt; org.eclipse.emf.ecore.EObject>();&#xA;java.util.Iterator&lt; org.eclipse.emf.ecore.EObject> it = this.eAllContents();&#xA;while (it.hasNext()) {&#xA;&#x9;org.eclipse.emf.ecore.EObject next = it.next();&#xA;&#x9;if (type.isInstance(next)) {&#xA;&#x9;&#x9;children.add(next);&#xA;&#x9;}&#xA;}&#xA;return children;"/>
<details key="documentation" value="&#xA; Returns all children of the given type.&#xA;"/>
</eAnnotations>
<eParameters name="type" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
</eOperations>
<eOperations name="getChildrenByType" upperBound="-1">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt;T> children = new org.eclipse.emf.common.util.BasicEList&lt;T>();&#xA;java.util.Iterator&lt; org.eclipse.emf.ecore.EObject> it = this.eAllContents();&#xA;while (it.hasNext()) {&#xA;&#x9;org.eclipse.emf.ecore.EObject next = it.next();&#xA;&#x9;if (type.isInstance(next)) {&#xA;&#x9;&#x9;children.add(type.cast(next));&#xA;&#x9;}&#xA;}&#xA;return children;"/>
<details key="documentation" value="&#xA; Returns all children of the given type.&#xA;"/>
</eAnnotations>
<eGenericType eTypeParameter="#//commons/Commentable/getChildrenByType/T"/>
<eTypeParameters name="T"/>
<eParameters name="type">
<eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass">
<eTypeArguments eTypeParameter="#//commons/Commentable/getChildrenByType/T"/>
</eGenericType>
</eParameters>
</eOperations>
<eOperations name="getComments" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; java.lang.String> comments = new org.eclipse.emf.common.util.BasicEList&lt; java.lang.String>();&#xA;if (this instanceof org.emftext.language.java.modifiers.AnnotableAndModifiable) {&#xA;&#x9;for ( org.emftext.language.java.modifiers.AnnotationInstanceOrModifier aom : (( org.emftext.language.java.modifiers.AnnotableAndModifiable) this).getAnnotationsAndModifiers()) {&#xA;&#x9;&#x9;comments.addAll(aom.getComments());&#xA;&#x9;}&#xA;}&#xA;for ( org.emftext.commons.layout.LayoutInformation layoutInformation : getLayoutInformations()) {&#xA;&#x9;java.lang.String text = layoutInformation.getHiddenTokenText();&#xA;&#x9;if (text.contains(&quot;/*&quot;) || text.contains(&quot;//&quot;)) {&#xA;&#x9;&#x9;comments.add(layoutInformation.getHiddenTokenText().trim());&#xA;&#x9;}&#xA;}&#xA;return org.eclipse.emf.common.util.ECollections.unmodifiableEList(comments);"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="addBeforeContainingStatement">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.ecore.EObject container = this.eContainer();&#xA;org.eclipse.emf.ecore.EObject statement = this;&#xA;while (container != null) {&#xA;&#x9;if (container instanceof org.emftext.language.java.statements.StatementListContainer) {&#xA;&#x9;&#x9;break;&#xA;&#x9;}&#xA;&#x9;container = container.eContainer();&#xA;&#x9;statement = statement.eContainer();&#xA;}&#xA;if (container == null) {&#xA;&#x9;throw new java.lang.IllegalArgumentException(&quot;Element &quot; + this + &quot; is not contained in a StatementListContainer.&quot;);&#xA;}&#xA;org.emftext.language.java.statements.StatementListContainer statementListContainer = ( org.emftext.language.java.statements.StatementListContainer) container;&#xA;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.statements.Statement> statements = statementListContainer.getStatements();&#xA;int index = statements.indexOf(statement);&#xA;&#xA;statements.add(index, statementToAdd);"/>
<details key="documentation" value="&#xA; Adds the given statement before the statement that contains this element.&#xA;/&#xA;"/>
</eAnnotations>
<eParameters name="statementToAdd" lowerBound="1" eType="#_Wo2YzNz1Ed2bJ_pQViWxFg"/>
</eOperations>
<eOperations name="addAfterContainingStatement">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.ecore.EObject container = this.eContainer();&#xA;org.eclipse.emf.ecore.EObject statement = this;&#xA;while (container != null) {&#xA;&#x9;if (container instanceof org.emftext.language.java.statements.StatementListContainer) {&#xA;&#x9;&#x9;break;&#xA;&#x9;}&#xA;&#x9;container = container.eContainer();&#xA;&#x9;statement = statement.eContainer();&#xA;}&#xA;if (container == null) {&#xA;&#x9;throw new java.lang.IllegalArgumentException(&quot;Element &quot; + this + &quot; is not contained in a StatementListContainer.&quot;);&#xA;}&#xA;org.emftext.language.java.statements.StatementListContainer statementListContainer = ( org.emftext.language.java.statements.StatementListContainer) container;&#xA;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.statements.Statement> statements = statementListContainer.getStatements();&#xA;int index = statements.indexOf(statement);&#xA;&#xA;if (index == statements.size() - 1) {&#xA;&#x9;// statement is the last one&#xA;&#x9;statements.add(statementToAdd);&#xA;} else {&#xA;&#x9;statements.add(index + 1, statementToAdd);&#xA;}"/>
<details key="documentation" value="&#xA; Adds the given statement after the statement that contains this element.&#xA;/&#xA;"/>
</eAnnotations>
<eParameters name="statementToAdd" lowerBound="1" eType="#_Wo2YzNz1Ed2bJ_pQViWxFg"/>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="layoutInformations" upperBound="-1"
eType="ecore:EClass ../../org.emftext.commons.layout/metamodel/layout.ecore#//LayoutInformation"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true" eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="NamespaceAwareElement" abstract="true"
eSuperTypes="#//commons/Commentable">
<eOperations name="getNamespacesAsString" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.lang.String containerName = &quot;&quot;; &#xA;for( java.util.Iterator&lt; java.lang.String> it = getNamespaces().iterator(); it.hasNext(); ) {&#xA;&#x9;java.lang.String namespaceFragment = it.next();&#xA;&#x9;//does it point at a classifier or a package as container?&#xA;&#x9;java.lang.String assumedPackageName = containerName + namespaceFragment + org.emftext.language.java.JavaUniquePathConstructor.PACKAGE_SEPARATOR;&#xA;&#x9;java.lang.String assumedClassifierName = containerName + namespaceFragment + org.emftext.language.java.JavaUniquePathConstructor.CLASSIFIER_SEPARATOR;&#xA;&#x9;&#xA;&#x9;if (it.hasNext()) {&#xA;&#x9;&#x9;if ( org.emftext.language.java.JavaClasspath.get(this).existsPackage(assumedClassifierName)) {&#xA;&#x9;&#x9;&#x9;containerName = assumedClassifierName;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;//assume package&#xA;&#x9;&#x9;&#x9;containerName = assumedPackageName;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;else {&#xA;&#x9;&#x9;if ( org.emftext.language.java.JavaClasspath.get(this).existsPackage(assumedPackageName)) {&#xA;&#x9;&#x9;&#x9;//a package is always available as key&#xA;&#x9;&#x9;&#x9;containerName = assumedPackageName;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;//assume classifier that is not key, but value in the map&#xA;&#x9;&#x9;&#x9;containerName = assumedClassifierName;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;return containerName;"/>
<details key="documentation" value="&#xA; Converts the namespaces array of the given namespace aware element into&#xA; a String representation using package (.) and class ($) delimiters. The method&#xA; uses the classpath to determine for each element of the namespace if it &#xA; identifies a package or a class.&#xA; &#xA; @param naElement&#xA; @return single string representation of namespace&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getClassifierAtNamespaces" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.lang.String fullQualifiedName = getNamespacesAsString();&#xA;if (fullQualifiedName == null || fullQualifiedName.endsWith( org.emftext.language.java.JavaUniquePathConstructor.PACKAGE_SEPARATOR)) {&#xA;&#x9;return null;&#xA;}&#xA;//cut the trailing separator&#xA;fullQualifiedName = fullQualifiedName.substring(0,fullQualifiedName.length() - 1);&#xA;&#xA;return ( org.emftext.language.java.classifiers.ConcreteClassifier) org.eclipse.emf.ecore.util.EcoreUtil.resolve(&#xA;&#x9;&#x9;getConcreteClassifierProxy(fullQualifiedName), this);"/>
<details key="documentation" value="&#xA; Assuming the namespace&#xA; identifies a classifier, that classifier is returned.&#xA; &#xA; @return classifier at namespace&#xA;"/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="namespaces" unique="false"
upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
</eSubpackages>
<eSubpackages name="containers" nsURI="http://www.emftext.org/java/containers" nsPrefix="containers">
<eClassifiers xsi:type="ecore:EClass" name="JavaRoot" abstract="true" eSuperTypes="#//commons/NamedElement #//commons/NamespaceAwareElement #//imports/ImportingElement">
<eOperations name="getClassifiersInSamePackage" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> defaultImportList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;&#xA;java.lang.String packageName = getNamespacesAsString();&#xA;&#xA;defaultImportList.addAll(getConcreteClassifierProxies(&#xA;&#x9;&#x9;packageName, &quot;*&quot;));&#xA;&#xA;return defaultImportList;"/>
<details key="documentation" value="&#xA; @return all classes in the same package imports&#xA;"/>
</eAnnotations>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="CompilationUnit" eSuperTypes="#//containers/JavaRoot">
<eOperations name="getContainedClassifier" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (name == null) {&#xA;&#x9;return null;&#xA;}&#xA;for( org.emftext.language.java.classifiers.ConcreteClassifier candidate : getClassifiers()) {&#xA;&#x9;if(name.equals(candidate.getName())) {&#xA;&#x9;&#x9;return candidate;&#xA;&#x9;}&#xA;}&#xA;return null;"/>
<details key="documentation" value="&#xA; @param name name of the contained Classifier&#xA; @return the Classifier&#xA;"/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getClassifiersInSamePackage" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> defaultImportList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;&#xA;java.lang.String packageName = getNamespacesAsString();&#xA;&#xA;//locally defined in this container&#xA;defaultImportList.addAll(getClassifiers());&#xA;&#xA;defaultImportList.addAll(getConcreteClassifierProxies(&#xA;&#x9;&#x9;packageName, &quot;*&quot;));&#xA;&#xA;return defaultImportList;"/>
<details key="documentation" value="&#xA; @return all classes in the same package imports&#xA;"/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="classifiers" lowerBound="1"
upperBound="-1" eType="#//classifiers/ConcreteClassifier" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Package" eSuperTypes="#//containers/JavaRoot #//annotations/Annotable">
<eOperations name="getNamespacesAsString" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.lang.String packageName = &quot;&quot;; &#xA;for( java.util.Iterator&lt; java.lang.String> it = getNamespaces().iterator(); it.hasNext(); ) {&#xA;&#x9;java.lang.String namespaceFragment = it.next();&#xA;&#x9;packageName = packageName + namespaceFragment + org.emftext.language.java.JavaUniquePathConstructor.PACKAGE_SEPARATOR;&#xA;}&#xA;return packageName;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="getClassifiersInSamePackage" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> defaultImportList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;&#xA;java.lang.String packageName = getNamespacesAsString();&#xA;&#xA;defaultImportList.addAll(getConcreteClassifierProxies(&#xA;&#x9;&#x9;packageName + getName(), &quot;*&quot;));&#xA;&#xA;return defaultImportList;"/>
<details key="documentation" value="&#xA; @return all classes in the same package&#xA;"/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="compilationUnits" upperBound="-1"
eType="#//containers/CompilationUnit" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="EmptyModel" eSuperTypes="#//containers/JavaRoot"/>
</eSubpackages>
<eSubpackages xmi:id="_Wo2YC9z1Ed2bJ_pQViWxFg" name="expressions" nsURI="http://www.emftext.org/java/expressions"
nsPrefix="expressions">
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YF9z1Ed2bJ_pQViWxFg" name="ExpressionList"
eSuperTypes="#_Wo2Y9tz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YGNz1Ed2bJ_pQViWxFg"
name="expressions" upperBound="-1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YDNz1Ed2bJ_pQViWxFg" name="Expression"
abstract="true" eSuperTypes="#//arrays/ArrayInitializationValue #//annotations/AnnotationValue">
<eOperations name="getType" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return getOneType(false);"/>
<details key="documentation" value="&#xA; Returns the type of the expression considering all concrete&#xA; subtypes of Expression.&#xA; &#xA; @return type of expression&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getAlternativeType" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return getOneType(true);"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="getOneType" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.classifiers.Class stringClass = getStringClass();&#xA;&#xA;org.emftext.language.java.types.Type type = null;&#xA;&#xA;if (this instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;org.emftext.language.java.references.Reference reference = ( org.emftext.language.java.references.Reference) this;&#xA;&#x9;//navigate down references&#xA;&#x9;while(reference.getNext() != null) {&#xA;&#x9;&#x9;reference = reference.getNext();&#xA;&#x9;}&#xA;&#x9;type = reference.getReferencedType();&#xA;}&#xA;else if (this instanceof org.emftext.language.java.literals.Literal) {&#xA;&#x9;type = (( org.emftext.language.java.literals.Literal) this).getType();&#xA;}&#xA;else if (this instanceof org.emftext.language.java.expressions.CastExpression) {&#xA;&#x9;type = (( org.emftext.language.java.expressions.CastExpression)this).getTypeReference().getTarget();&#xA;}&#xA;else if (this instanceof org.emftext.language.java.expressions.AssignmentExpression) {&#xA;&#x9;type = (( org.emftext.language.java.expressions.AssignmentExpression) this).getChild().getOneType(alternative);&#xA;}&#xA;else if (this instanceof org.emftext.language.java.expressions.ConditionalExpression &amp;&amp;&#xA;&#x9;&#x9;(( org.emftext.language.java.expressions.ConditionalExpression)this).getExpressionIf() != null) {&#xA;&#x9;if (alternative) {&#xA;&#x9;&#x9;type = (( org.emftext.language.java.expressions.ConditionalExpression)this).getExpressionElse().getOneType(alternative);&#xA;&#x9;}&#xA;&#x9;else {&#xA;&#x9;&#x9;type = (( org.emftext.language.java.expressions.ConditionalExpression)this).getExpressionIf().getOneType(alternative);&#xA;&#x9;}&#xA;&#x9;&#xA;}&#xA;else if (this instanceof org.emftext.language.java.expressions.EqualityExpression ||&#xA;&#x9;&#x9;this instanceof org.emftext.language.java.expressions.RelationExpression ||&#xA;&#x9;&#x9;this instanceof org.emftext.language.java.expressions.ConditionalOrExpression ||&#xA;&#x9;&#x9;this instanceof org.emftext.language.java.expressions.ConditionalAndExpression ||&#xA;&#x9;&#x9;this instanceof org.emftext.language.java.expressions.InstanceOfExpression ) {&#xA;&#x9;type = getLibClass(&quot;Boolean&quot;);&#xA;}&#xA;else if (this instanceof org.emftext.language.java.expressions.AdditiveExpression ||&#xA;&#x9;&#x9;this instanceof org.emftext.language.java.expressions.MultiplicativeExpression ||&#xA;&#x9;&#x9;this instanceof org.emftext.language.java.expressions.InclusiveOrExpression ||&#xA;&#x9;&#x9;this instanceof org.emftext.language.java.expressions.ExclusiveOrExpression ||&#xA;&#x9;&#x9;this instanceof org.emftext.language.java.expressions.AndExpression ||&#xA;&#x9;&#x9;this instanceof org.emftext.language.java.expressions.ShiftExpression ) {&#xA;&#x9;&#xA;&#x9;if (this instanceof org.emftext.language.java.expressions.AdditiveExpression) {&#xA;&#x9;&#x9;org.emftext.language.java.expressions.AdditiveExpression additiveExpression = ( org.emftext.language.java.expressions.AdditiveExpression) this;&#xA;&#x9;&#x9;for( org.emftext.language.java.expressions.Expression subExp : additiveExpression.getChildren()) {&#xA;&#x9;&#x9;&#x9;if (stringClass.equals(subExp.getOneType(alternative))) {&#xA;&#x9;&#x9;&#x9;&#x9;//special case: string concatenation&#xA;&#x9;&#x9;&#x9;&#x9;return stringClass;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;&#xA;&#x9;@SuppressWarnings(&quot;unchecked&quot;)&#xA;&#x9;org.emftext.language.java.expressions.Expression subExp = (( org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.expressions.Expression>) &#xA;&#x9;&#x9;&#x9;this.eGet(this.eClass().getEStructuralFeature(&quot;children&quot;))).get(0);&#xA;&#x9;&#xA;&#x9;return subExp.getOneType(alternative);&#xA;}&#xA;else if (this instanceof org.emftext.language.java.expressions.UnaryExpression) {&#xA;&#x9;org.emftext.language.java.expressions.Expression subExp = (( org.emftext.language.java.expressions.UnaryExpression)this).getChild();&#xA;&#x9;&#xA;&#x9;return subExp.getOneType(alternative);&#xA;}&#xA;else for( org.eclipse.emf.common.util.TreeIterator&lt; org.eclipse.emf.ecore.EObject> i = this.eAllContents(); i.hasNext(); ) {&#xA;&#x9;org.eclipse.emf.ecore.EObject next = i.next();&#xA;&#x9;org.emftext.language.java.types.Type nextType = null;&#xA;&#xA;&#x9;if (next instanceof org.emftext.language.java.expressions.PrimaryExpression) {&#xA;&#xA;&#x9;&#x9;if (next instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.references.Reference ref = ( org.emftext.language.java.references.Reference) next;&#xA;&#x9;&#x9;&#x9;//navigate down references&#xA;&#x9;&#x9;&#x9;while(ref.getNext() != null) {&#xA;&#x9;&#x9;&#x9;&#x9;ref = ref.getNext();&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;next = ref;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;if (next instanceof org.emftext.language.java.literals.Literal) {&#xA;&#x9;&#x9;&#x9;nextType = (( org.emftext.language.java.literals.Literal) next).getType();&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else if (next instanceof org.emftext.language.java.expressions.CastExpression) {&#xA;&#x9;&#x9;&#x9;nextType = (( org.emftext.language.java.expressions.CastExpression)next).getTypeReference().getTarget();&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;nextType = (( org.emftext.language.java.references.Reference) next).getReferencedType();&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;i.prune();&#xA;&#xA;&#x9;}&#xA;&#x9;if (nextType != null) {&#xA;&#x9;&#x9;type = nextType;&#xA;&#x9;&#x9;//in the special case that this is an expression with&#xA;&#x9;&#x9;//some string included, everything is converted to string&#xA;&#x9;&#x9;if (stringClass.equals(type)) {&#xA;&#x9;&#x9;&#x9;break;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;//type can be null in cases of unresolved/unresolvable proxies&#xA;return type;"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="alternative" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
</eOperations>
<eOperations name="getArrayDimension" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="long size = 0;&#xA;org.emftext.language.java.arrays.ArrayTypeable arrayType = null;&#xA;if (this instanceof org.emftext.language.java.expressions.NestedExpression &amp;&amp; &#xA;&#x9;&#x9;(( org.emftext.language.java.expressions.NestedExpression)this).getNext() == null) {&#xA;&#x9;return (( org.emftext.language.java.expressions.NestedExpression) this).getExpression().getArrayDimension()&#xA;&#x9;&#x9;- (( org.emftext.language.java.expressions.NestedExpression)this).getArraySelectors().size();&#xA;}&#xA;if (this instanceof org.emftext.language.java.expressions.ConditionalExpression &amp;&amp;&#xA;&#x9;&#x9;(( org.emftext.language.java.expressions.ConditionalExpression)this).getExpressionIf() != null) {&#x9;&#x9;&#xA;&#x9;return (( org.emftext.language.java.expressions.ConditionalExpression)this).getExpressionIf().getArrayDimension();&#xA;}&#xA;if (this instanceof org.emftext.language.java.expressions.AssignmentExpression) {&#xA;&#x9;org.emftext.language.java.expressions.Expression value = (( org.emftext.language.java.expressions.AssignmentExpression) this).getValue();&#xA;&#x9;if (value == null) {&#xA;&#x9;&#x9;return 0;&#xA;&#x9;}&#xA;&#x9;return value.getArrayDimension();&#xA;}&#xA;if (this instanceof org.emftext.language.java.expressions.InstanceOfExpression) {&#xA;&#x9;return 0;&#xA;}&#xA;if (this instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;org.emftext.language.java.references.Reference reference = ( org.emftext.language.java.references.Reference) this;&#xA;&#x9;while (reference.getNext() != null) {&#xA;&#x9;&#x9;reference = reference.getNext();&#xA;&#x9;}&#xA;&#x9;//an array clone? -> dimension defined by cloned array&#xA;&#x9;if (reference instanceof org.emftext.language.java.references.ElementReference &amp;&amp; &#xA;&#x9;&#x9;&#x9;reference.getPrevious() != null) {&#xA;&#x9;&#x9;org.emftext.language.java.references.ReferenceableElement target = (( org.emftext.language.java.references.ElementReference)reference).getTarget();&#xA;&#x9;&#x9;if (target instanceof org.emftext.language.java.members.Method) {&#xA;&#x9;&#x9;&#x9;if(&quot;clone&quot;.equals((( org.emftext.language.java.members.Method)target).getName())) {&#xA;&#x9;&#x9;&#x9;&#x9;reference = ( org.emftext.language.java.references.Reference) reference.eContainer();&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;&#xA;&#x9;if (reference instanceof org.emftext.language.java.references.ElementReference) {&#xA;&#x9;&#x9;org.emftext.language.java.references.ElementReference elementReference = ( org.emftext.language.java.references.ElementReference) reference;&#xA;&#x9;&#x9;if (elementReference.getTarget() instanceof org.emftext.language.java.arrays.ArrayTypeable) {&#xA;&#x9;&#x9;&#x9;arrayType = ( org.emftext.language.java.arrays.ArrayTypeable) elementReference.getTarget();&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;if (elementReference.getTarget() instanceof org.emftext.language.java.variables.AdditionalLocalVariable) {&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.variables.AdditionalLocalVariable additionalLocalVariable = ( org.emftext.language.java.variables.AdditionalLocalVariable) elementReference.getTarget();&#xA;&#x9;&#x9;&#x9;arrayType = ( org.emftext.language.java.variables.LocalVariable) additionalLocalVariable.eContainer();&#xA;&#x9;&#x9;&#x9;size += additionalLocalVariable.getArrayDimensionsAfter().size();&#xA;&#x9;&#x9;&#x9;size -= arrayType.getArrayDimensionsAfter().size();&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;if (elementReference.getTarget() instanceof org.emftext.language.java.members.AdditionalField) {&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.members.AdditionalField additionalField = ( org.emftext.language.java.members.AdditionalField) elementReference.getTarget();&#xA;&#x9;&#x9;&#x9;arrayType = ( org.emftext.language.java.members.Field) additionalField.eContainer();&#xA;&#x9;&#x9;&#x9;size += additionalField.getArrayDimensionsAfter().size();&#xA;&#x9;&#x9;&#x9;size -= arrayType.getArrayDimensionsAfter().size();&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;else if (this instanceof org.emftext.language.java.arrays.ArrayTypeable) {&#xA;&#x9;&#x9;size += (( org.emftext.language.java.arrays.ArrayTypeable)this).getArrayDimensionsBefore().size() + (( org.emftext.language.java.arrays.ArrayTypeable)this).getArrayDimensionsAfter().size();&#xA;&#x9;&#x9;if (this instanceof org.emftext.language.java.parameters.VariableLengthParameter) {&#xA;&#x9;&#x9;&#x9;size++;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;size -= reference.getArraySelectors().size();&#xA;}&#xA;else if (this instanceof org.emftext.language.java.arrays.ArrayTypeable) {&#xA;&#x9;size += (( org.emftext.language.java.arrays.ArrayTypeable)this).getArrayDimensionsBefore().size() + (( org.emftext.language.java.arrays.ArrayTypeable)this).getArrayDimensionsAfter().size();&#xA;&#x9;if (this instanceof org.emftext.language.java.parameters.VariableLengthParameter) {&#xA;&#x9;&#x9;size++;&#xA;&#x9;}&#xA;}&#xA;&#xA;if(this instanceof org.emftext.language.java.arrays.ArrayInstantiationBySize) {&#xA;&#x9;size += (( org.emftext.language.java.arrays.ArrayInstantiationBySize)this).getSizes().size();&#xA;}&#xA;&#xA;if(arrayType != null) {&#xA;&#x9;size += arrayType.getArrayDimension();&#xA;}&#xA;&#xA;return size;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentExpression" eSuperTypes="#_Wo2YDNz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EReference" name="child" lowerBound="1"
eType="#//expressions/AssignmentExpressionChild" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="assignmentOperator" lowerBound="1"
eType="#//operators/AssignmentOperator" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="value" lowerBound="1"
eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentExpressionChild" abstract="true"
eSuperTypes="#_Wo2YDNz1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YIdz1Ed2bJ_pQViWxFg" name="ConditionalExpression"
eSuperTypes="#//expressions/AssignmentExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YI9z1Ed2bJ_pQViWxFg"
name="child" eType="#//expressions/ConditionalExpressionChild" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YJdz1Ed2bJ_pQViWxFg"
name="expressionIf" lowerBound="1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="expressionElse" lowerBound="1"
eType="#//expressions/AssignmentExpressionChild" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ConditionalExpressionChild" abstract="true"
eSuperTypes="#//expressions/AssignmentExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YHdz1Ed2bJ_pQViWxFg" name="ConditionalOrExpression"
eSuperTypes="#//expressions/ConditionalExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YH9z1Ed2bJ_pQViWxFg"
name="children" lowerBound="1" upperBound="-1" eType="#//expressions/ConditionalOrExpressionChild"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ConditionalOrExpressionChild" abstract="true"
eSuperTypes="#//expressions/ConditionalExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YGtz1Ed2bJ_pQViWxFg" name="ConditionalAndExpression"
eSuperTypes="#//expressions/ConditionalOrExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YHNz1Ed2bJ_pQViWxFg"
name="children" lowerBound="1" upperBound="-1" eType="#//expressions/ConditionalAndExpressionChild"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ConditionalAndExpressionChild" abstract="true"
eSuperTypes="#//expressions/ConditionalOrExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YJ9z1Ed2bJ_pQViWxFg" name="InclusiveOrExpression"
eSuperTypes="#//expressions/ConditionalAndExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YKdz1Ed2bJ_pQViWxFg"
name="children" lowerBound="1" upperBound="-1" eType="#//expressions/InclusiveOrExpressionChild"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="InclusiveOrExpressionChild" abstract="true"
eSuperTypes="#//expressions/ConditionalAndExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" name="ExclusiveOrExpression" eSuperTypes="#//expressions/InclusiveOrExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" name="children" lowerBound="1"
upperBound="-1" eType="#//expressions/ExclusiveOrExpressionChild" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ExclusiveOrExpressionChild" abstract="true"
eSuperTypes="#//expressions/InclusiveOrExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YLdz1Ed2bJ_pQViWxFg" name="AndExpression"
eSuperTypes="#//expressions/ExclusiveOrExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YL9z1Ed2bJ_pQViWxFg"
name="children" lowerBound="1" upperBound="-1" eType="#//expressions/AndExpressionChild"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AndExpressionChild" abstract="true"
eSuperTypes="#//expressions/ExclusiveOrExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YMNz1Ed2bJ_pQViWxFg" name="EqualityExpression"
eSuperTypes="#//expressions/AndExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YM9z1Ed2bJ_pQViWxFg"
name="equalityOperators" lowerBound="1" upperBound="-1" eType="#//operators/EqualityOperator"
containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YMtz1Ed2bJ_pQViWxFg"
name="children" lowerBound="1" upperBound="-1" eType="#//expressions/EqualityExpressionChild"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="EqualityExpressionChild" abstract="true"
eSuperTypes="#//expressions/AndExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YNdz1Ed2bJ_pQViWxFg" name="InstanceOfExpression"
eSuperTypes="#//arrays/ArrayTypeable #_Wo2ZP9z1Ed2bJ_pQViWxFg #//expressions/EqualityExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YONz1Ed2bJ_pQViWxFg"
name="child" lowerBound="1" eType="#//expressions/InstanceOfExpressionChild"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="InstanceOfExpressionChild" abstract="true"
eSuperTypes="#//expressions/EqualityExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YOtz1Ed2bJ_pQViWxFg" name="RelationExpression"
eSuperTypes="#//expressions/InstanceOfExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YPNz1Ed2bJ_pQViWxFg"
name="children" lowerBound="1" upperBound="-1" eType="#//expressions/RelationExpressionChild"
containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YPdz1Ed2bJ_pQViWxFg"
name="relationOperators" lowerBound="1" upperBound="-1" eType="#//operators/RelationOperator"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="RelationExpressionChild" abstract="true"
eSuperTypes="#//expressions/InstanceOfExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YPtz1Ed2bJ_pQViWxFg" name="ShiftExpression"
eSuperTypes="#//expressions/RelationExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YQNz1Ed2bJ_pQViWxFg"
name="children" lowerBound="1" upperBound="-1" eType="#//expressions/ShiftExpressionChild"
containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YQdz1Ed2bJ_pQViWxFg"
name="shiftOperators" lowerBound="1" upperBound="-1" eType="#//operators/ShiftOperator"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ShiftExpressionChild" abstract="true"
eSuperTypes="#//expressions/RelationExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YQtz1Ed2bJ_pQViWxFg" name="AdditiveExpression"
eSuperTypes="#//expressions/ShiftExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YRNz1Ed2bJ_pQViWxFg"
name="children" lowerBound="1" upperBound="-1" eType="#//expressions/AdditiveExpressionChild"
containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YRdz1Ed2bJ_pQViWxFg"
name="additiveOperators" lowerBound="1" upperBound="-1" eType="#//operators/AdditiveOperator"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AdditiveExpressionChild" abstract="true"
eSuperTypes="#//expressions/ShiftExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YRtz1Ed2bJ_pQViWxFg" name="MultiplicativeExpression"
eSuperTypes="#//expressions/AdditiveExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YSNz1Ed2bJ_pQViWxFg"
name="children" lowerBound="1" upperBound="-1" eType="#//expressions/MultiplicativeExpressionChild"
containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YSdz1Ed2bJ_pQViWxFg"
name="multiplicativeOperators" lowerBound="1" upperBound="-1" eType="#//operators/MultiplicativeOperator"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="MultiplicativeExpressionChild" abstract="true"
eSuperTypes="#//expressions/AdditiveExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YStz1Ed2bJ_pQViWxFg" name="UnaryExpression"
eSuperTypes="#//expressions/MultiplicativeExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YTNz1Ed2bJ_pQViWxFg"
name="operators" lowerBound="1" upperBound="-1" eType="#//operators/UnaryOperator"
containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YT9z1Ed2bJ_pQViWxFg"
name="child" lowerBound="1" eType="#//expressions/UnaryExpressionChild"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="UnaryExpressionChild" abstract="true"
eSuperTypes="#//expressions/MultiplicativeExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" name="UnaryModificationExpression" abstract="true"
eSuperTypes="#//expressions/UnaryExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" name="child" lowerBound="1"
eType="#//expressions/UnaryModificationExpressionChild" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="operator" lowerBound="1"
eType="#//operators/UnaryModificationOperator" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="PrefixUnaryModificationExpression"
eSuperTypes="#//expressions/UnaryModificationExpression"/>
<eClassifiers xsi:type="ecore:EClass" name="SuffixUnaryModificationExpression"
eSuperTypes="#//expressions/UnaryModificationExpression"/>
<eClassifiers xsi:type="ecore:EClass" name="UnaryModificationExpressionChild"
abstract="true" eSuperTypes="#//expressions/UnaryExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YWdz1Ed2bJ_pQViWxFg" name="CastExpression"
eSuperTypes="#_Wo2ZP9z1Ed2bJ_pQViWxFg #//arrays/ArrayTypeable #//expressions/UnaryModificationExpressionChild">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2YXdz1Ed2bJ_pQViWxFg"
name="child" lowerBound="1" eType="#//expressions/MultiplicativeExpressionChild"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="PrimaryExpression" abstract="true"
eSuperTypes="#//expressions/UnaryModificationExpressionChild"/>
<eClassifiers xsi:type="ecore:EClass" name="NestedExpression" eSuperTypes="#//references/Reference">
<eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
</eSubpackages>
<eSubpackages name="generics" nsURI="http://www.emftext.org/java/generics" nsPrefix="generics">
<eClassifiers xsi:type="ecore:EClass" name="TypeArgument" abstract="true" eSuperTypes="#//arrays/ArrayTypeable"/>
<eClassifiers xsi:type="ecore:EClass" name="TypeArgumentable" abstract="true"
eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="typeArguments" upperBound="-1"
eType="#//generics/TypeArgument" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="CallTypeArgumentable" abstract="true"
eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="callTypeArguments" upperBound="-1"
eType="#//generics/TypeArgument" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="TypeParametrizable" abstract="true"
eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="typeParameters" upperBound="-1"
eType="#//generics/TypeParameter" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ExtendsTypeArgument" eSuperTypes="#//generics/TypeArgument">
<eStructuralFeatures xsi:type="ecore:EReference" name="extendTypes" lowerBound="1"
upperBound="-1" eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="QualifiedTypeArgument" eSuperTypes="#//generics/TypeArgument #_Wo2ZP9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" name="SuperTypeArgument" eSuperTypes="#//generics/TypeArgument">
<eStructuralFeatures xsi:type="ecore:EReference" name="superType" lowerBound="1"
eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="TypeParameter" eSuperTypes="#//classifiers/Classifier">
<eOperations name="getAllSuperClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> result = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;for( org.emftext.language.java.types.TypeReference typeRef : getExtendTypes()) {&#xA;&#x9;org.emftext.language.java.types.Type type = typeRef.getTarget();&#xA;&#x9;if (type instanceof org.emftext.language.java.classifiers.ConcreteClassifier) {&#xA;&#x9;&#x9;result.add(( org.emftext.language.java.classifiers.ConcreteClassifier)type);&#xA;&#x9;}&#xA;&#x9;if (type instanceof org.emftext.language.java.classifiers.Classifier) {&#xA;&#x9;&#x9;result.addAll((( org.emftext.language.java.classifiers.Classifier)type).getAllSuperClassifiers());&#x9;&#xA;&#x9;}&#xA;}&#x9;&#x9;&#xA;&#xA;return result;"/>
<details key="documentation" value="&#xA; @return all type restrictions&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getAllMembers" upperBound="-1" eType="#//members/Member">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.members.Member> memberList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.members.Member>();&#xA;&#xA;org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.types.Type> possiblyVisibleSuperClassifier = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.types.Type>();&#xA;for( org.emftext.language.java.types.TypeReference typeReference : (( org.emftext.language.java.generics.TypeParameter)this).getExtendTypes()) {&#xA;&#x9;possiblyVisibleSuperClassifier.add(typeReference.getTarget());&#xA;}&#xA;&#xA;for ( org.emftext.language.java.classifiers.ConcreteClassifier superClassifier : getAllSuperClassifiers()) {&#xA;&#x9;for( org.emftext.language.java.members.Member member : superClassifier.getMembers()) {&#xA;&#x9;&#x9;if(member instanceof org.emftext.language.java.modifiers.AnnotableAndModifiable) {&#x9;&#x9;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.modifiers.AnnotableAndModifiable modifiable = ( org.emftext.language.java.modifiers.AnnotableAndModifiable) member;&#xA;&#xA;&#x9;&#x9;&#x9;if(!modifiable.isHidden(context)) {&#xA;&#x9;&#x9;&#x9;&#x9;memberList.add(member);&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;else if (possiblyVisibleSuperClassifier.contains(superClassifier)) {&#xA;&#x9;&#x9;&#x9;&#x9;memberList.add(member);&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;memberList.add(member);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;memberList.addAll(superClassifier.getDefaultMembers());&#xA;}&#xA;return memberList;"/>
<details key="documentation" value="&#xA; Returns all members of the given classifier including inner classes and &#xA; all members of super types (extended classes and implemented interfaces).&#xA; &#xA; @param context to check protected visibility&#xA; @return member list&#xA;"/>
</eAnnotations>
<eParameters name="context" eType="#//commons/Commentable"/>
</eOperations>
<eOperations name="getBoundType" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.types.Type> resultList = new org.eclipse.emf.common.util.BasicEList&lt; org.emftext.language.java.types.Type>();&#xA;org.emftext.language.java.generics.TypeParametrizable typeParameterDeclarator = ( org.emftext.language.java.generics.TypeParametrizable) this.eContainer();&#xA;org.emftext.language.java.references.Reference parentReference = null;&#xA;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.types.Type> prevTypeList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.types.Type>();&#xA;if (reference != null &amp;&amp; &#xA;&#x9;&#x9;reference.getPrevious() instanceof org.emftext.language.java.expressions.NestedExpression) {&#xA;&#x9;org.emftext.language.java.expressions.NestedExpression nestedExpression = ( org.emftext.language.java.expressions.NestedExpression) reference.getPrevious();&#xA;&#x9;org.emftext.language.java.expressions.Expression expression = null;&#xA;&#x9;if (nestedExpression.getExpression() instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;&#x9;expression = nestedExpression.getExpression();&#xA;&#x9;}&#xA;&#x9;else if (nestedExpression.getExpression() instanceof org.emftext.language.java.expressions.ConditionalExpression) {&#xA;&#x9;&#x9;expression = (( org.emftext.language.java.expressions.ConditionalExpression)nestedExpression.getExpression()).getExpressionIf();&#xA;&#x9;}&#xA;&#xA;&#x9;&#xA;&#x9;if (expression instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;&#x9;org.emftext.language.java.references.Reference expressionReference = ( org.emftext.language.java.references.Reference) expression;&#xA;&#x9;&#x9;//navigate down references&#xA;&#x9;&#x9;while(expressionReference.getNext() != null) {&#xA;&#x9;&#x9;&#x9;expressionReference = expressionReference.getNext();&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;parentReference = expressionReference;&#xA;&#x9;&#x9;org.emftext.language.java.types.Type prevType = nestedExpression.getExpression().getType();&#xA;&#x9;&#x9;if(prevType instanceof org.emftext.language.java.util.TemporalCompositeClassifier) {&#xA;&#x9;&#x9;&#x9;for( org.eclipse.emf.ecore.EObject aType : (( org.emftext.language.java.util.TemporalCompositeClassifier)prevType).getSuperTypes()) {&#xA;&#x9;&#x9;&#x9;&#x9;prevTypeList.add(( org.emftext.language.java.types.Type)aType);&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;prevTypeList.add(prevType);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;else if (nestedExpression.getExpression() instanceof org.emftext.language.java.expressions.CastExpression) {&#xA;&#x9;&#x9;prevTypeList.add((( org.emftext.language.java.expressions.CastExpression)nestedExpression.getExpression()).getTypeReference().getTarget());&#xA;&#x9;}&#xA;}&#xA;else if (reference != null &amp;&amp; reference.getPrevious() != null) {&#xA;&#x9;parentReference = reference.getPrevious();&#xA;&#x9;while (parentReference instanceof org.emftext.language.java.references.SelfReference) {&#xA;&#x9;&#x9;if ((( org.emftext.language.java.references.SelfReference)parentReference).getSelf() instanceof org.emftext.language.java.literals.Super) {&#xA;&#x9;&#x9;&#x9;if (parentReference.eContainer() instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;&#x9;&#x9;&#x9;parentReference = ( org.emftext.language.java.references.Reference) parentReference.eContainer();&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier containingClassifier = reference.getContainingConcreteClassifier();&#xA;&#x9;&#x9;&#x9;&#x9;if (containingClassifier != null) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;prevTypeList.add(containingClassifier);&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;parentReference = null;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;break;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;if (parentReference != null) {&#xA;&#x9;&#x9;org.emftext.language.java.types.Type prevType = parentReference.getReferencedType();&#xA;&#x9;&#x9;if(prevType instanceof org.emftext.language.java.util.TemporalCompositeClassifier) {&#xA;&#x9;&#x9;&#x9;for( org.eclipse.emf.ecore.EObject aType : (( org.emftext.language.java.util.TemporalCompositeClassifier)prevType).getSuperTypes()) {&#xA;&#x9;&#x9;&#x9;&#x9;prevTypeList.add(( org.emftext.language.java.types.Type)aType);&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;prevTypeList.add(prevType);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;else if (reference != null) {&#xA;&#x9;//prev type is on of the containing classes which can still bind by inheritance&#xA;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier containingClassifier = reference.getContainingConcreteClassifier();&#xA;&#x9;while (containingClassifier != null) {&#xA;&#x9;&#x9;prevTypeList.add(containingClassifier);&#xA;&#x9;&#x9;org.eclipse.emf.ecore.EObject container = containingClassifier.eContainer();&#xA;&#x9;&#x9;if (container instanceof org.emftext.language.java.commons.Commentable) {&#xA;&#x9;&#x9;&#x9;containingClassifier = (( org.emftext.language.java.commons.Commentable) container).getContainingConcreteClassifier();&#xA;&#x9;&#x9;} else {&#xA;&#x9;&#x9;&#x9;containingClassifier = null;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;for( org.emftext.language.java.types.Type prevType : prevTypeList) {&#xA;&#x9;int typeParameterIndex = -1;&#xA;&#x9;if (typeParameterDeclarator instanceof org.emftext.language.java.classifiers.ConcreteClassifier) {&#xA;&#x9;&#x9;typeParameterIndex = typeParameterDeclarator.getTypeParameters().indexOf(this);&#xA;&#x9;&#x9;if(reference != null) {&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.types.ClassifierReference classifierReference = null;&#xA;&#x9;&#x9;&#x9;if(parentReference instanceof org.emftext.language.java.references.ElementReference) {&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.references.ReferenceableElement prevReferenced = (( org.emftext.language.java.references.ElementReference) parentReference).getTarget();&#xA;&#x9;&#x9;&#x9;&#x9;if(prevReferenced instanceof org.emftext.language.java.types.TypedElement) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.types.TypeReference prevTypeReference = (( org.emftext.language.java.types.TypedElement)prevReferenced).getTypeReference ();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if (prevTypeReference != null) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;classifierReference = prevTypeReference.getPureClassifierReference(); &#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;if(parentReference instanceof org.emftext.language.java.types.TypedElement) {&#xA;&#x9;&#x9;&#x9;&#x9;//e.g. New Constructor Call&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.types.TypeReference prevParentReference = (( org.emftext.language.java.types.TypedElement)parentReference).getTypeReference ();&#xA;&#x9;&#x9;&#x9;&#x9;if (prevParentReference != null) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;classifierReference = prevParentReference.getPureClassifierReference(); &#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;if (prevType instanceof org.emftext.language.java.classifiers.ConcreteClassifier) {&#xA;&#x9;&#x9;&#x9;&#x9;//bound through inheritance?&#xA;&#x9;&#x9;&#x9;&#x9;int idx = 0;&#xA;&#x9;&#x9;&#x9;&#x9;for( org.emftext.language.java.types.ClassifierReference superClassifierReference : (( org.emftext.language.java.classifiers.ConcreteClassifier) prevType).getSuperTypeReferences()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if (typeParameterIndex &lt; superClassifierReference.getTypeArguments().size()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;//is this an argument for the correct class?&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (typeParameterDeclarator.equals(superClassifierReference.getTarget()) ||&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;(( org.emftext.language.java.classifiers.Classifier)superClassifierReference.getTarget()).getAllSuperClassifiers().contains(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;typeParameterDeclarator)) {&#x9;&#x9;&#x9;&#x9;&#x9; &#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.generics.TypeArgument arg = superClassifierReference.getTypeArguments().get(typeParameterIndex);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (arg instanceof org.emftext.language.java.generics.QualifiedTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(idx, (( org.emftext.language.java.generics.QualifiedTypeArgument) arg).getTypeReference().getTarget());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;idx++;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.generics.TypeArgument> typeArgumentList;&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.util.TemporalTypeArgumentHolder ttah = null;&#xA;&#x9;&#x9;&#x9;&#x9;for( org.eclipse.emf.common.notify.Adapter adapter : prevType.eAdapters()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if (adapter instanceof org.emftext.language.java.util.TemporalTypeArgumentHolder) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;ttah = ( org.emftext.language.java.util.TemporalTypeArgumentHolder) adapter; &#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;prevType.eAdapters().remove(ttah);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;break;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;if (ttah != null) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;typeArgumentList = ttah.getTypeArguments();&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;else if (classifierReference != null) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;typeArgumentList = classifierReference.getTypeArguments();&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;typeArgumentList = org.eclipse.emf.common.util.ECollections.emptyEList();&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;&#x9;if (typeParameterIndex &lt; typeArgumentList.size()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.generics.TypeArgument arg = typeArgumentList.get(typeParameterIndex);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if (arg instanceof org.emftext.language.java.generics.QualifiedTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.types.ClassifierReference theTypeRef = (( org.emftext.language.java.generics.QualifiedTypeArgument) arg).getTypeReference().getPureClassifierReference();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (theTypeRef != null) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.types.Type theType = theTypeRef.getBoundTarget(parentReference);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (theType != null) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (!theTypeRef.getTypeArguments().isEmpty()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;ttah = new org.emftext.language.java.util.TemporalTypeArgumentHolder();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;ttah.getTypeArguments().addAll(theTypeRef.getTypeArguments());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;theType.eAdapters().add(ttah);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(0, theType);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if (arg instanceof org.emftext.language.java.generics.ExtendsTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;for( org.emftext.language.java.types.TypeReference extendedType : (( org.emftext.language.java.generics.ExtendsTypeArgument) arg).getExtendTypes()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(0, extendedType.getBoundTarget(parentReference));&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;else if (prevType instanceof org.emftext.language.java.generics.TypeParameter) {&#xA;&#x9;&#x9;&#x9;&#x9;//the prev. type parameter, although unbound, may contain type restrictions through extends &#xA;&#x9;&#x9;&#x9;&#x9;resultList.add(prevType);&#xA;&#x9;&#x9;&#x9;&#x9;for( org.emftext.language.java.types.TypeReference extendedRef : (( org.emftext.language.java.generics.TypeParameter) prevType).getExtendTypes()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.classifiers.ConcreteClassifier extended = ( org.emftext.language.java.classifiers.ConcreteClassifier)extendedRef.getTarget();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;int idx = (( org.emftext.language.java.generics.TypeParametrizable)prevType.eContainer()).getTypeParameters().indexOf(prevType);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if (extended.getTypeParameters().size() > idx) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;//also add more precise bindings from extensions&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(extended.getTypeParameters().get(idx));&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;if(reference != null &amp;&amp; reference.eContainer() instanceof org.emftext.language.java.references.ReflectiveClassReference) {&#xA;&#x9;&#x9;&#x9;if (reference.eContainer().eContainer() instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;&#x9;&#x9;&#x9;//the &quot;.class&quot; instantiation implicitly binds the T parameter of java.lang.Class to the class itself&#xA;&#x9;&#x9;&#x9;&#x9;resultList.add(0, (( org.emftext.language.java.references.Reference)reference.eContainer().eContainer()).getReferencedType());&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;if (typeParameterDeclarator instanceof org.emftext.language.java.members.Method) {&#xA;&#x9;if (reference instanceof org.emftext.language.java.references.MethodCall) {&#xA;&#x9;&#x9;org.emftext.language.java.members.Method method = ( org.emftext.language.java.members.Method) typeParameterDeclarator;&#xA;&#x9;&#x9;org.emftext.language.java.references.MethodCall methodCall = ( org.emftext.language.java.references.MethodCall) reference;&#xA;&#x9;&#x9;if(method.getTypeParameters().size() == methodCall.getCallTypeArguments().size()) {&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.generics.TypeArgument typeArgument = methodCall.getCallTypeArguments().get(method.getTypeParameters().indexOf(this));&#xA;&#x9;&#x9;&#x9;if (typeArgument instanceof org.emftext.language.java.generics.QualifiedTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;resultList.add(0, (( org.emftext.language.java.generics.QualifiedTypeArgument)typeArgument).getTypeReference().getBoundTarget(parentReference)); &#xA;&#x9;&#x9;&#x9;} &#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;//class type parameter&#xA;&#x9;&#x9;int idx = method.getParameters().indexOf(typeReference.eContainer());&#xA;&#x9;&#x9;&#xA;&#x9;&#x9;//method type parameter&#xA;&#x9;&#x9;if (idx == -1) {&#xA;&#x9;&#x9;&#x9;for( org.emftext.language.java.parameters.Parameter parameter : method.getParameters()) {&#xA;&#x9;&#x9;&#x9;&#x9;for ( org.emftext.language.java.generics.TypeArgument typeArgument : parameter.getTypeArguments()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if(typeArgument instanceof org.emftext.language.java.generics.QualifiedTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if((( org.emftext.language.java.generics.QualifiedTypeArgument) typeArgument).getTypeReference().getTarget().equals(this)) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;idx = method.getParameters().indexOf(parameter);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.types.ClassifierReference paramTypeReference = parameter.getTypeReference().getPureClassifierReference();&#xA;&#x9;&#x9;&#x9;&#x9;if (paramTypeReference != null) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;for ( org.emftext.language.java.generics.TypeArgument typeArgument : paramTypeReference.getTypeArguments()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if(typeArgument instanceof org.emftext.language.java.generics.QualifiedTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if(this.equals((( org.emftext.language.java.generics.QualifiedTypeArgument) typeArgument).getTypeReference().getTarget())) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;idx = method.getParameters().indexOf(parameter);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;&#xA;&#x9;&#x9;if (idx &lt; methodCall.getArguments().size() &amp;&amp; idx >= 0) {&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.expressions.Expression argument = methodCall.getArguments().get(idx);&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.parameters.Parameter parameter = method.getParameters().get(idx);&#xA;&#x9;&#x9;&#x9;org.emftext.language.java.types.ClassifierReference parameterType = parameter.getTypeReference().getPureClassifierReference();&#xA;&#x9;&#x9;&#x9;if (argument instanceof org.emftext.language.java.instantiations.NewConstructorCall) {&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.types.ClassifierReference argumentType = (( org.emftext.language.java.instantiations.NewConstructorCall)argument).getTypeReference().getPureClassifierReference();&#xA;&#x9;&#x9;&#x9;&#x9;if (argumentType != null &amp;&amp; parameterType.getTypeArguments().size() == argumentType.getTypeArguments().size()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;for( org.emftext.language.java.generics.TypeArgument typeArgument : parameterType.getTypeArguments()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if(typeArgument instanceof org.emftext.language.java.generics.QualifiedTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if((( org.emftext.language.java.generics.QualifiedTypeArgument) typeArgument).getTypeReference().getTarget().equals(this)) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(0, (( org.emftext.language.java.generics.QualifiedTypeArgument)argumentType.getTypeArguments().get(parameterType.getTypeArguments().indexOf(typeArgument))).getTypeReference(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;).getTarget());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;if (argumentType != null &amp;&amp; parameterType.getTarget() instanceof org.emftext.language.java.generics.TypeParameter) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(0,argumentType.getTarget());&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;else if (parameterType != null &amp;&amp; argument instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.references.Reference argReference = ( org.emftext.language.java.references.Reference) argument;&#xA;&#x9;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;&#x9;while (argReference.getNext() instanceof org.emftext.language.java.references.Reference &amp;&amp;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;!(argReference.getNext() instanceof org.emftext.language.java.references.ReflectiveClassReference) ) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;argReference = argReference.getNext();&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#xA;&#x9;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;&#x9;if (argReference instanceof org.emftext.language.java.references.ElementReference) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.references.ElementReference elementReference = ( org.emftext.language.java.references.ElementReference) argReference;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;while (elementReference.getNext() instanceof org.emftext.language.java.references.ElementReference) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;elementReference = ( org.emftext.language.java.references.ElementReference) elementReference.getNext();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if (elementReference.getTarget() instanceof org.emftext.language.java.types.TypedElement) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.types.ClassifierReference argumentType = (( org.emftext.language.java.types.TypedElement)elementReference.getTarget()).getTypeReference().getPureClassifierReference();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (argumentType != null &amp;&amp; parameterType.getTypeArguments().size() == argumentType.getTypeArguments().size()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;for( org.emftext.language.java.generics.TypeArgument typeArgument : parameterType.getTypeArguments()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if(typeArgument instanceof org.emftext.language.java.generics.QualifiedTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if((( org.emftext.language.java.generics.QualifiedTypeArgument) typeArgument).getTypeReference().getTarget().equals(this)) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;int idx2 = parameterType.getTypeArguments().indexOf(typeArgument);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (argumentType.getTypeArguments().get(idx2) instanceof org.emftext.language.java.generics.QualifiedTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(0, (( org.emftext.language.java.generics.QualifiedTypeArgument)argumentType.getTypeArguments().get(idx2)).getTypeReference().getTarget());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;else if (argumentType.getTypeArguments().get(idx2) instanceof org.emftext.language.java.generics.ExtendsTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;for( org.emftext.language.java.types.TypeReference extendedType : (( org.emftext.language.java.generics.ExtendsTypeArgument) argumentType.getTypeArguments().get(idx2)).getExtendTypes()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(0, extendedType.getTarget());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (argumentType != null &amp;&amp; parameterType.getTarget() instanceof org.emftext.language.java.generics.TypeParameter) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(0,argumentType.getTarget());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if(elementReference.getNext() instanceof org.emftext.language.java.references.ReflectiveClassReference) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if (parameterType.getTypeArguments().size() == 1) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;for( org.emftext.language.java.generics.TypeArgument typeArgument : parameterType.getTypeArguments()) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if(typeArgument instanceof org.emftext.language.java.generics.QualifiedTypeArgument) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if((( org.emftext.language.java.generics.QualifiedTypeArgument) typeArgument).getTypeReference().getTarget().equals(this)) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(0, elementReference.getReferencedType());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if (parameterType.getTarget() instanceof org.emftext.language.java.generics.TypeParameter) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;while (argReference.getNext() instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;argReference = argReference.getNext();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;resultList.add(0, (( org.emftext.language.java.references.Reference) argReference).getReferencedType());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;&#xA;&#x9;&#x9;//return type&#xA;&#x9;&#x9;if(method.equals(typeReference.eContainer())) {&#xA;&#x9;&#x9;&#x9;//bound by the type of a method argument?&#xA;&#x9;&#x9;&#x9;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.Classifier> allSuperTypes = null;&#xA;&#x9;&#x9;&#x9;for( org.emftext.language.java.parameters.Parameter parameter : method.getParameters()) {&#xA;&#x9;&#x9;&#x9;&#x9;if(this.equals(parameter.getTypeReference().getTarget())) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;idx = method.getParameters().indexOf(parameter);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.classifiers.Classifier argumentType = ( org.emftext.language.java.classifiers.Classifier) methodCall.getArguments().get(idx).getType();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if(allSuperTypes == null) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;allSuperTypes = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.Classifier>();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;allSuperTypes.add(argumentType);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;allSuperTypes.addAll(argumentType.getAllSuperClassifiers());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;allSuperTypes.add(argumentType);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.Classifier> allOtherSuperTypes = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.Classifier>();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;allOtherSuperTypes.add(argumentType);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;allOtherSuperTypes.addAll(argumentType.getAllSuperClassifiers());&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.Classifier> temp = allSuperTypes;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;allSuperTypes = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.Classifier>();&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;for( org.emftext.language.java.classifiers.Classifier st : allOtherSuperTypes) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;if(temp.contains(st)) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;allSuperTypes.add(st);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9; &#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;//all types given by all bindings&#xA;&#x9;&#x9;&#x9;if (allSuperTypes != null) {&#xA;&#x9;&#x9;&#x9;&#x9;resultList.addAll(allSuperTypes);&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;//remove nulls&#xA;for( java.util.Iterator&lt;?> it = resultList.iterator(); it.hasNext(); ) {&#xA;&#x9;if (it.next() == null) {&#xA;&#x9;&#x9;it.remove();&#xA;&#x9;}&#xA;}&#xA;&#xA;if(resultList.isEmpty() || &#xA;&#x9;&#x9;(resultList.size() == 1 &amp;&amp; resultList.get(0).equals(this))) {&#xA;&#x9;return this;&#xA;}&#xA;else {&#xA;&#x9;org.emftext.language.java.util.TemporalCompositeClassifier temp = new org.emftext.language.java.util.TemporalCompositeClassifier(this);&#xA;&#x9;for( org.emftext.language.java.types.Type aResult : resultList) {&#xA;&#x9;&#x9;if(aResult instanceof org.emftext.language.java.types.PrimitiveType) {&#xA;&#x9;&#x9;&#x9;aResult = (( org.emftext.language.java.types.PrimitiveType) aResult).wrapPrimitiveType();&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;&#xA;&#x9;&#x9;if (aResult instanceof org.emftext.language.java.util.TemporalCompositeClassifier) {&#xA;&#x9;&#x9;&#x9;//flatten&#xA;&#x9;&#x9;&#x9;temp.getSuperTypes().addAll((( org.emftext.language.java.util.TemporalCompositeClassifier)aResult).getSuperTypes());&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;temp.getSuperTypes().add(( org.emftext.language.java.classifiers.Classifier) aResult);&#x9;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;temp.getSuperTypes().add(this);&#xA;&#x9;return temp;&#xA;}"/>
<details key="documentation" value="&#xA; Returns the type bound to the given parameter in the context&#xA; of the given reference.&#xA; &#xA; @param typeReference&#xA; @param reference&#xA; @return bound type or parameter if not bound&#xA;"/>
</eAnnotations>
<eParameters name="typeReference" eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg"/>
<eParameters name="reference" eType="#//references/Reference"/>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="extendTypes" upperBound="-1"
eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="UnknownTypeArgument" eSuperTypes="#//generics/TypeArgument"/>
</eSubpackages>
<eSubpackages name="imports" nsURI="http://www.emftext.org/java/imports" nsPrefix="imports">
<eClassifiers xsi:type="ecore:EClass" name="Import" abstract="true" eSuperTypes="#//commons/NamespaceAwareElement">
<eOperations name="getImportedClassifier" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.lang.String containerName = getNamespacesAsString();&#xA;if (containerName == null) {&#xA;&#x9;return null;&#xA;}&#xA;&#xA;java.lang.String fullQualifiedName = containerName + name;&#xA;return getConcreteClassifierProxy(fullQualifiedName);"/>
<details key="documentation" value="&#xA; Returns the classifier with the given name &#xA; located in the namespace defined by the import.&#xA; &#xA; @param name the name of the classifier&#xA; @return imported classifier (proxy)&#xA;"/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getImportedClassifiers" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.lang.String containerName = getNamespacesAsString();&#xA;if (containerName == null) {&#xA;&#x9;return org.eclipse.emf.common.util.ECollections.emptyEList();&#xA;}&#xA;&#xA;return getConcreteClassifierProxies(containerName, &quot;*&quot;);"/>
<details key="documentation" value="&#xA; Returns a list of imported classifiers assuming the import's namespace&#xA; identifies a package.&#xA; &#xA; @param _this &#xA; @return imported classifier (proxy)&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getImportedMembers" upperBound="-1" eType="#//commons/NamedElement">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.classifiers.ConcreteClassifier concreteClassifier = getClassifierAtNamespaces();&#xA;&#xA;if(concreteClassifier == null || concreteClassifier.eIsProxy()) {&#xA;&#x9;return org.eclipse.emf.common.util.ECollections.emptyEList();&#xA;}&#xA;&#xA;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.commons.NamedElement> result = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.commons.NamedElement>();&#xA;result.addAll(concreteClassifier.getAllMembers(this));&#xA;if (concreteClassifier instanceof org.emftext.language.java.classifiers.Enumeration) {&#xA;&#x9;result.addAll((( org.emftext.language.java.classifiers.Enumeration)concreteClassifier).getConstants());&#xA;}&#xA;&#xA;return result;"/>
<details key="documentation" value="&#xA; Returns all imported members assuming the import's namespace&#xA; identifies a classifier.&#xA; &#xA; @param _this &#xA; @return list of imported classifiers (proxies)&#xA;"/>
</eAnnotations>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ImportingElement" abstract="true"
eSuperTypes="#//commons/Commentable">
<eOperations name="getDefaultImports" upperBound="-1" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.classifiers.ConcreteClassifier> result = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.classifiers.ConcreteClassifier>();&#xA;for( org.eclipse.emf.ecore.EObject classifier : org.emftext.language.java.JavaClasspath.get(this).getDefaultImports()) {&#xA;&#x9;result.add(( org.emftext.language.java.classifiers.ConcreteClassifier)classifier);&#xA;}&#xA;return result;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="imports" upperBound="-1"
eType="#//imports/Import" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="StaticImport" abstract="true" eSuperTypes="#//imports/Import">
<eStructuralFeatures xsi:type="ecore:EReference" name="static" lowerBound="1"
eType="#_Wo2Yv9z1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ClassifierImport" eSuperTypes="#//imports/Import">
<eStructuralFeatures xsi:type="ecore:EReference" name="classifier" lowerBound="1"
eType="#//classifiers/ConcreteClassifier"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="PackageImport" eSuperTypes="#//imports/Import"/>
<eClassifiers xsi:type="ecore:EClass" name="StaticClassifierImport" eSuperTypes="#//imports/StaticImport"/>
<eClassifiers xsi:type="ecore:EClass" name="StaticMemberImport" eSuperTypes="#//imports/StaticImport">
<eStructuralFeatures xsi:type="ecore:EReference" name="staticMembers" lowerBound="1"
upperBound="-1" eType="#//references/ReferenceableElement"/>
</eClassifiers>
</eSubpackages>
<eSubpackages name="instantiations" nsURI="http://www.emftext.org/java/instantiations"
nsPrefix="instantiations">
<eClassifiers xsi:type="ecore:EClass" name="Initializable" abstract="true" eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="initialValue" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Instantiation" abstract="true" eSuperTypes="#//references/Reference #//references/Argumentable"/>
<eClassifiers xsi:type="ecore:EClass" name="NewConstructorCall" eSuperTypes="#_Wo2ZP9z1Ed2bJ_pQViWxFg #//instantiations/Instantiation #//generics/CallTypeArgumentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="anonymousClass" eType="#//classifiers/AnonymousClass"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ExplicitConstructorCall" eSuperTypes="#//instantiations/Instantiation">
<eStructuralFeatures xsi:type="ecore:EReference" name="callTarget" lowerBound="1"
eType="#//literals/Self" containment="true"/>
</eClassifiers>
</eSubpackages>
<eSubpackages xmi:id="_Wo2Yntz1Ed2bJ_pQViWxFg" name="literals" nsURI="http://www.emftext.org/java/literals"
nsPrefix="literals">
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YsNz1Ed2bJ_pQViWxFg" name="Literal"
abstract="true" eSuperTypes="#//expressions/PrimaryExpression">
<eOperations name="getOneType" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="//Overrides implementation in Expression&#xA;org.emftext.language.java.classifiers.Class javaClass = null;&#xA;&#xA;if (this instanceof org.emftext.language.java.literals.NullLiteral) {&#xA;&#x9;javaClass = getLibClass(&quot;Void&quot;);&#xA;}&#xA;else if (this instanceof org.emftext.language.java.literals.BooleanLiteral) {&#xA;&#x9;javaClass = getLibClass(&quot;Boolean&quot;);&#xA;}&#xA;else if (this instanceof org.emftext.language.java.literals.DoubleLiteral) {&#xA;&#x9;javaClass = getLibClass(&quot;Double&quot;);&#xA;}&#xA;else if (this instanceof org.emftext.language.java.literals.FloatLiteral) {&#xA;&#x9;javaClass = getLibClass(&quot;Float&quot;);&#xA;}&#xA;else if (this instanceof org.emftext.language.java.literals.IntegerLiteral) {&#xA;&#x9;javaClass = getLibClass(&quot;Integer&quot;);&#xA;}&#xA;else if (this instanceof org.emftext.language.java.literals.LongLiteral) {&#xA;&#x9;javaClass = getLibClass(&quot;Long&quot;);&#xA;}&#xA;else if (this instanceof org.emftext.language.java.literals.CharacterLiteral) {&#xA;&#x9;javaClass = getLibClass(&quot;Character&quot;);&#xA;}&#xA;&#xA;return javaClass;"/>
<details key="documentation" value="&#xA; @return type of the literal&#xA;"/>
</eAnnotations>
<eParameters name="alternative" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Self" abstract="true" eSuperTypes="#//commons/Commentable"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YrNz1Ed2bJ_pQViWxFg" name="BooleanLiteral"
eSuperTypes="#_Wo2YsNz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EAttribute" xmi:id="_Wo2Yrdz1Ed2bJ_pQViWxFg"
name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Ypdz1Ed2bJ_pQViWxFg" name="CharacterLiteral"
eSuperTypes="#_Wo2YsNz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EAttribute" xmi:id="_Wo2Yptz1Ed2bJ_pQViWxFg"
name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EChar"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="FloatLiteral" abstract="true" eSuperTypes="#_Wo2YsNz1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" name="DecimalFloatLiteral" eSuperTypes="#//literals/FloatLiteral">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="decimalValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloat"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="HexFloatLiteral" eSuperTypes="#//literals/FloatLiteral">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="hexValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloat"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yotz1Ed2bJ_pQViWxFg" name="DoubleLiteral"
abstract="true" eSuperTypes="#_Wo2YsNz1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" name="DecimalDoubleLiteral" eSuperTypes="#_Wo2Yotz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="decimalValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="HexDoubleLiteral" eSuperTypes="#_Wo2Yotz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="hexValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yn9z1Ed2bJ_pQViWxFg" name="IntegerLiteral"
abstract="true" eSuperTypes="#_Wo2YsNz1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" name="DecimalIntegerLiteral" eSuperTypes="#_Wo2Yn9z1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="decimalValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="HexIntegerLiteral" eSuperTypes="#_Wo2Yn9z1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="hexValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="OctalIntegerLiteral" eSuperTypes="#_Wo2Yn9z1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="octalValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="LongLiteral" abstract="true" eSuperTypes="#_Wo2YsNz1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" name="DecimalLongLiteral" eSuperTypes="#//literals/LongLiteral">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="decimalValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="HexLongLiteral" eSuperTypes="#//literals/LongLiteral">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="hexValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="OctalLongLiteral" eSuperTypes="#//literals/LongLiteral">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="octalValue" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yr9z1Ed2bJ_pQViWxFg" name="NullLiteral"
eSuperTypes="#_Wo2YsNz1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" name="Super" eSuperTypes="#//literals/Self"/>
<eClassifiers xsi:type="ecore:EClass" name="This" eSuperTypes="#//literals/Self"/>
</eSubpackages>
<eSubpackages name="members" nsURI="http://www.emftext.org/java/members" nsPrefix="members">
<eClassifiers xsi:type="ecore:EClass" name="ExceptionThrower" abstract="true"
eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="exceptions" upperBound="-1"
eType="#_Wo2ZQ9z1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Member" abstract="true" eSuperTypes="#//commons/NamedElement"/>
<eClassifiers xsi:type="ecore:EClass" name="MemberContainer" abstract="true" eSuperTypes="#//commons/Commentable">
<eOperations name="getContainedClassifier" eType="#//classifiers/ConcreteClassifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="for( org.emftext.language.java.members.Member member : getMembers()) {&#xA;&#x9;if (member instanceof org.emftext.language.java.classifiers.ConcreteClassifier &amp;&amp; name.equals(member.getName())) {&#xA;&#x9;&#x9;return ( org.emftext.language.java.classifiers.ConcreteClassifier) member;&#xA;&#x9;}&#xA; &#x9;&#x9;}&#xA;for( org.emftext.language.java.members.Member member : getDefaultMembers()) {&#xA;&#x9;if (member instanceof org.emftext.language.java.classifiers.ConcreteClassifier &amp;&amp; name.equals(member.getName())) {&#xA;&#x9;&#x9;return ( org.emftext.language.java.classifiers.ConcreteClassifier) member;&#xA;&#x9;}&#xA; &#x9;&#x9;}&#xA;return null;"/>
<details key="documentation" value="&#xA; @param name&#xA; @return classifier with the given name defined in this member container&#xA;"/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getContainedField" eType="#//members/Field">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="for( org.emftext.language.java.members.Member member : getMembers()) {&#xA;&#x9;if (member instanceof org.emftext.language.java.members.Field &amp;&amp; name.equals(member.getName())) {&#xA;&#x9;&#x9;return ( org.emftext.language.java.members.Field) member;&#xA;&#x9;}&#xA; &#x9;&#x9;}&#xA;for( org.emftext.language.java.members.Member member : getDefaultMembers()) {&#xA;&#x9;if (member instanceof org.emftext.language.java.members.Field &amp;&amp; name.equals(member.getName())) {&#xA;&#x9;&#x9;return ( org.emftext.language.java.members.Field) member;&#xA;&#x9;}&#xA; &#x9;&#x9;}&#xA;return null;"/>
<details key="documentation" value="&#xA; @param name&#xA; @return field with the given name defined in this member container&#xA;"/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getContainedMethod" eType="#//members/Method">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.members.Method found = null;&#xA;for( org.emftext.language.java.members.Member member : getMembers()) {&#xA;&#x9;if (member instanceof org.emftext.language.java.members.Method &amp;&amp; name.equals(member.getName())) {&#xA;&#x9;&#x9;if(found != null) {&#xA;&#x9;&#x9;&#x9;return null;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;found = ( org.emftext.language.java.members.Method) member;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA; &#x9;&#x9;}&#xA; &#x9;&#x9;for( org.emftext.language.java.members.Member member : getDefaultMembers()) {&#xA;&#x9;if (member instanceof org.emftext.language.java.members.Method &amp;&amp; name.equals(member.getName())) {&#xA;&#x9;&#x9;if(found != null) {&#xA;&#x9;&#x9;&#x9;return null;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;found = ( org.emftext.language.java.members.Method) member;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA; &#x9;&#x9;}&#xA;return found;"/>
<details key="documentation" value="&#xA; @param name&#xA; @return method with the given name defined in this member container;&#xA; null, if there is no such method &#xA; or if there are multiple methods with the same name&#xA;"/>
</eAnnotations>
<eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getMethods" upperBound="-1" eType="#//members/Method">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.members.Method> methodList = new org.eclipse.emf.common.util.BasicEList&lt; org.emftext.language.java.members.Method>();&#xA;&#xA;for ( org.emftext.language.java.members.Member member : getMembers()) {&#xA;&#x9;if (member instanceof org.emftext.language.java.members.Method) {&#xA;&#x9;&#x9;methodList.add(( org.emftext.language.java.members.Method) member);&#xA;&#x9;}&#xA;}&#x9;&#xA;return methodList;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="removeMethods">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.members.Method> methodsToRemove = new org.eclipse.emf.common.util.BasicEList&lt; org.emftext.language.java.members.Method>();&#xA;&#xA;for ( org.emftext.language.java.members.Member member : getMembers()) {&#xA;&#x9;if (member instanceof org.emftext.language.java.members.Method) {&#xA;&#x9;&#x9;if (name.equals(member.getName())) {&#xA;&#x9;&#x9;&#x9;methodsToRemove.add(( org.emftext.language.java.members.Method) member);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;getMembers().removeAll(methodsToRemove);"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getMembersByName" upperBound="-1" eType="#//members/Member">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.members.Member> matchingMembers = new org.eclipse.emf.common.util.BasicEList&lt; org.emftext.language.java.members.Member>();&#xA;&#xA;for ( org.emftext.language.java.members.Member member : getMembers()) {&#xA;&#x9;if (name.equals(member.getName())) {&#xA;&#x9;&#x9;matchingMembers.add(member);&#xA;&#x9;}&#xA;}&#x9;&#xA;return matchingMembers;"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="createField" eType="#//members/Field">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.members.Field field = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField();&#xA;field.setName(name);&#xA;org.emftext.language.java.types.ClassifierReference typeRef = org.emftext.language.java.types.TypesFactory.eINSTANCE.createClassifierReference();&#xA;typeRef.setTarget(getConcreteClassifier(qualifiedTypeName));&#xA;field.setTypeReference(typeRef);&#xA;getMembers().add(field);&#xA;return field;"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eParameters name="qualifiedTypeName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eOperations name="getFields" upperBound="-1" eType="#//members/Field">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.members.Field> fieldList = new org.eclipse.emf.common.util.BasicEList&lt; org.emftext.language.java.members.Field>();&#xA;&#xA;for ( org.emftext.language.java.members.Member member : getMembers()) {&#xA;&#x9;if (member instanceof org.emftext.language.java.members.Field) {&#xA;&#x9;&#x9;fieldList.add(( org.emftext.language.java.members.Field) member);&#xA;&#x9;}&#xA;}&#x9;&#xA;return fieldList;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="members" upperBound="-1"
eType="#//members/Member" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="defaultMembers" upperBound="-1"
eType="#//members/Member" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AdditionalField" eSuperTypes="#//references/ReferenceableElement #//arrays/ArrayTypeable #//instantiations/Initializable">
<eOperations name="getArrayDimension" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size();&#xA;return size;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Constructor" eSuperTypes="#//members/Member #//statements/StatementListContainer #//parameters/Parametrizable #//generics/TypeParametrizable #//members/ExceptionThrower #//modifiers/AnnotableAndModifiable"/>
<eClassifiers xsi:type="ecore:EClass" name="EmptyMember" eSuperTypes="#//members/Member"/>
<eClassifiers xsi:type="ecore:EClass" name="Field" eSuperTypes="#//members/Member #//instantiations/Initializable #//variables/Variable #//references/ReferenceableElement #//modifiers/AnnotableAndModifiable">
<eStructuralFeatures xsi:type="ecore:EReference" name="additionalFields" upperBound="-1"
eType="#//members/AdditionalField" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Method" abstract="true" eSuperTypes="#//members/Member #_Wo2ZP9z1Ed2bJ_pQViWxFg #//arrays/ArrayTypeable #//generics/TypeParametrizable #//parameters/Parametrizable #//references/ReferenceableElement #//members/ExceptionThrower #//modifiers/AnnotableAndModifiable">
<eOperations name="isMethodForCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.types.Type> argumentTypeList = methodCall.getArgumentTypes();&#xA;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.parameters.Parameter> parameterList = new org.eclipse.emf.common.util.BasicEList&lt; org.emftext.language.java.parameters.Parameter>(this.getParameters());&#xA;&#xA;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.types.Type> parameterTypeList = new org.eclipse.emf.common.util.BasicEList&lt; org.emftext.language.java.types.Type>();&#xA;for( org.emftext.language.java.parameters.Parameter parameter : parameterList) {&#xA;&#x9;//determine types before messing with the parameters&#xA;&#x9;parameterTypeList.add(&#xA;&#x9;&#x9;&#x9;parameter.getTypeReference().getBoundTarget(methodCall));&#xA;}&#xA;&#xA;if (!parameterList.isEmpty()) {&#xA;&#x9;org.emftext.language.java.parameters.Parameter lastParameter = parameterList.get(parameterList.size() - 1);&#xA;&#x9;org.emftext.language.java.types.Type lastParameterType = parameterTypeList.get(parameterTypeList.size() - 1);;&#xA;&#x9;if (lastParameter instanceof org.emftext.language.java.parameters.VariableLengthParameter) {&#xA;&#x9;&#x9;//in case of variable length add/remove some parameters&#xA;&#x9;&#x9;while(parameterList.size() &lt; argumentTypeList.size()) {&#xA;&#x9;&#x9;&#x9;if (needsPerfectMatch) return false;&#xA;&#x9;&#x9;&#x9;parameterList.add(lastParameter);&#xA;&#x9;&#x9;&#x9;parameterTypeList.add(lastParameterType);&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;if(parameterList.size() > argumentTypeList.size()) {&#xA;&#x9;&#x9;&#x9;if (needsPerfectMatch) return false;&#xA;&#x9;&#x9;&#x9;parameterList.remove(lastParameter);&#xA;&#x9;&#x9;&#x9;parameterTypeList.remove(parameterTypeList.size() - 1);&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;&#xA;&#x9;}&#xA;}&#xA;&#xA;if (parameterList.size() == argumentTypeList.size()) { &#xA;&#x9;boolean parametersMatch = true;&#xA;&#x9;for (int i = 0; i &lt; argumentTypeList.size(); i++) {&#xA;&#x9;&#x9;org.emftext.language.java.parameters.Parameter parameter = parameterList.get(i);&#xA;&#x9;&#x9;org.emftext.language.java.expressions.Expression argument = methodCall.getArguments().get(i);&#xA;&#xA;&#x9;&#x9;org.emftext.language.java.types.Type parameterType = parameterTypeList.get(i);&#xA;&#x9;&#x9;org.emftext.language.java.types.Type argumentType = argumentTypeList.get(i);&#xA;&#x9;&#x9;&#xA;&#x9;&#x9;if (argumentType == null || parameterType == null) {&#xA;&#x9;&#x9;&#x9;return false;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;&#xA;&#x9;&#x9;if (parameterType != null &amp;&amp; argumentType != null) {&#xA;&#x9;&#x9;&#x9;if (!parameterType.eIsProxy() || !argumentType.eIsProxy()) {&#xA;&#x9;&#x9;&#x9;&#x9;if (needsPerfectMatch) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;parametersMatch = parametersMatch&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&amp;&amp; argumentType.equalsType(argument.getArrayDimension(),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;parameterType, parameter.getArrayDimension());&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;parametersMatch = parametersMatch &#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&amp;&amp; argumentType.isSuperType(argument.getArrayDimension(),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;parameterType, parameter);&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;&#x9;return false;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;return false;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;return parametersMatch; &#xA;} &#xA;return false;"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="methodCall" eType="#//references/MethodCall"/>
<eParameters name="needsPerfectMatch" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
</eOperations>
<eOperations name="isSomeMethodForCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return isMethodForCall(methodCall, false);"/>
<details key="documentation" value="&#xA; Decides if the given method matches the given call. &#xA; &#xA; @param methodCall&#xA; @return&#xA;"/>
</eAnnotations>
<eParameters name="methodCall" eType="#//references/MethodCall"/>
</eOperations>
<eOperations name="isBetterMethodForCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (!isMethodForCall(methodCall, false)) {&#xA;&#x9;return false;&#xA;}&#xA;if (otherMethod.isMethodForCall(methodCall, true)) {&#xA;&#x9;if (isMethodForCall(methodCall, true)) {&#xA;&#x9;&#x9;//we both match perfectly; lets compare our return types&#xA;&#x9;&#x9;org.emftext.language.java.types.Type target = getTypeReference().getTarget();&#xA;&#x9;&#x9;if (target instanceof org.emftext.language.java.classifiers.ConcreteClassifier) {&#xA;&#x9;&#x9;&#x9;if ((( org.emftext.language.java.classifiers.ConcreteClassifier) target).getAllSuperClassifiers().contains(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;otherMethod.getTypeReference().getTarget())) {&#xA;&#x9;&#x9;&#x9;&#x9;// I am the more concrete type&#xA;&#x9;&#x9;&#x9;&#x9;return true;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;//the other already matches perfectly; I am not better&#xA;&#x9;return false;&#xA;}&#xA;if (!otherMethod.isMethodForCall(methodCall, false)) {&#xA;&#x9;//I match, but the other does not&#xA;&#x9;return true;&#xA;}&#xA;//we both match, I am only better if I match perfectly &lt;- &#xA;//TODO #763: this is not enough: we need to check for &quot;nearest subtype&quot; here&#xA;return isMethodForCall(methodCall, true);"/>
<details key="documentation" value="&#xA; Only returns true if the given Method is a better match for the given calls than the&#xA; otherMethod given.&#xA; &#xA; @param otherMethod&#xA; @param methodCall&#xA; @return&#xA;"/>
</eAnnotations>
<eParameters name="otherMethod" eType="#//members/Method"/>
<eParameters name="methodCall" eType="#//references/MethodCall"/>
</eOperations>
<eOperations name="getArrayDimension" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size();&#xA;if (this instanceof org.emftext.language.java.parameters.VariableLengthParameter) {&#xA;&#x9;size++;&#xA;}&#xA;return size;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="InterfaceMethod" eSuperTypes="#//members/Method"/>
<eClassifiers xsi:type="ecore:EClass" name="ClassMethod" eSuperTypes="#//members/Method #//statements/StatementListContainer"/>
<eClassifiers xsi:type="ecore:EClass" name="EnumConstant" eSuperTypes="#//references/ReferenceableElement #//references/Argumentable #//annotations/Annotable">
<eStructuralFeatures xsi:type="ecore:EReference" name="anonymousClass" eType="#//classifiers/AnonymousClass"
containment="true"/>
</eClassifiers>
</eSubpackages>
<eSubpackages xmi:id="_Wo2Ystz1Ed2bJ_pQViWxFg" name="modifiers" nsURI="http://www.emftext.org/java/modifiers"
nsPrefix="modifiers">
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Ys9z1Ed2bJ_pQViWxFg" name="Modifier"
abstract="true" eSuperTypes="#//modifiers/AnnotationInstanceOrModifier"/>
<eClassifiers xsi:type="ecore:EClass" name="AnnotationInstanceOrModifier" abstract="true"
eSuperTypes="#//commons/Commentable"/>
<eClassifiers xsi:type="ecore:EClass" name="AnnotableAndModifiable" abstract="true"
eSuperTypes="#//commons/Commentable">
<eOperations name="isHidden" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (this.eIsProxy()) {&#xA;&#x9;return false;&#xA;}&#xA;//all members of an interface are public by default&#xA;if (this.eContainer() instanceof org.emftext.language.java.classifiers.Interface) {&#xA;&#x9;return false;&#xA;}&#xA;&#xA;if(context.eIsProxy()) {&#xA;&#x9;context = ( org.emftext.language.java.commons.Commentable) org.eclipse.emf.ecore.util.EcoreUtil.resolve(context, this);&#xA;}&#xA;&#xA;org.emftext.language.java.classifiers.ConcreteClassifier contextClassifier = context.getContainingConcreteClassifier(); &#xA;if (!(eContainer() instanceof org.emftext.language.java.commons.Commentable)) {&#xA;&#x9;return true;&#xA;}&#xA;org.emftext.language.java.classifiers.ConcreteClassifier myClassifier = (( org.emftext.language.java.commons.Commentable) eContainer()).getParentConcreteClassifier();&#xA;//special case: self reference to outer instance&#xA;if(context instanceof org.emftext.language.java.references.Reference) {&#xA;&#x9;if ((( org.emftext.language.java.references.Reference)context).getPrevious() instanceof org.emftext.language.java.references.SelfReference) {&#xA;&#x9;&#x9;org.emftext.language.java.references.SelfReference selfReference = ( org.emftext.language.java.references.SelfReference) (( org.emftext.language.java.references.Reference)context).getPrevious();&#xA;&#x9;&#x9;if (selfReference.getSelf() instanceof org.emftext.language.java.literals.Self) {&#xA;&#x9;&#x9;&#x9;if(selfReference.getPrevious() != null) {&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.types.Type type = selfReference.getPrevious().getReferencedType();&#xA;&#x9;&#x9;&#x9;&#x9;if (type instanceof org.emftext.language.java.classifiers.ConcreteClassifier) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;contextClassifier = ( org.emftext.language.java.classifiers.ConcreteClassifier) type;&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;for( org.emftext.language.java.modifiers.AnnotationInstanceOrModifier modifier : this.getAnnotationsAndModifiers()) {&#xA;&#x9;if(modifier instanceof org.emftext.language.java.modifiers.Private) {&#xA;&#x9;&#x9;if (myClassifier.equalsType(0, contextClassifier,0)) {&#xA;&#x9;&#x9;&#x9;return false;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;&#x9;if(modifier instanceof org.emftext.language.java.modifiers.Public) {&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;&#x9;if(modifier instanceof org.emftext.language.java.modifiers.Protected) {&#xA;&#x9;&#x9;//package visibility&#xA;&#x9;&#x9;if (getContainingPackageName() != null &amp;&amp; &#xA;&#x9;&#x9;&#x9;&#x9;getContainingPackageName().equals(context.getContainingPackageName())) {&#xA;&#x9;&#x9;&#x9;return false;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;//try outer classifiers as well &#xA;&#x9;&#x9;while(contextClassifier instanceof org.emftext.language.java.classifiers.Classifier) {&#xA;&#x9;&#x9;&#x9;if (contextClassifier.isSuperType(0, myClassifier, null)) {&#xA;&#x9;&#x9;&#x9;&#x9;return false;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;org.eclipse.emf.ecore.EObject container = contextClassifier.eContainer();&#xA;&#x9;&#x9;&#x9;if (container instanceof org.emftext.language.java.commons.Commentable) {&#xA;&#x9;&#x9;&#x9;&#x9;contextClassifier = (( org.emftext.language.java.commons.Commentable) container).getParentConcreteClassifier();&#xA;&#x9;&#x9;&#x9;} else {&#xA;&#x9;&#x9;&#x9;&#x9;contextClassifier = null;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;if (contextClassifier != null &amp;&amp; !contextClassifier.eIsProxy() &amp;&amp; &#xA;&#x9;&#x9;&#x9;&#x9;&#x9;contextClassifier.isSuperType(0, myClassifier, null)) {&#xA;&#x9;&#x9;&#x9;&#x9;return false;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;//visibility through anonymous subclass&#xA;&#x9;&#x9;org.emftext.language.java.classifiers.AnonymousClass anonymousClass = context.getContainingAnonymousClass();&#xA;&#x9;&#x9;while (anonymousClass != null) {&#xA;&#x9;&#x9;&#x9;contextClassifier = anonymousClass.getSuperClassifier();&#xA;&#x9;&#x9;&#x9;if (contextClassifier == null) {&#xA;&#x9;&#x9;&#x9;&#x9;return true;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;if (contextClassifier.isSuperType(0, myClassifier, null)) {&#xA;&#x9;&#x9;&#x9;&#x9;return false;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;org.eclipse.emf.ecore.EObject container = anonymousClass.eContainer();&#xA;&#x9;&#x9;&#x9;if (container instanceof org.emftext.language.java.commons.Commentable) {&#xA;&#x9;&#x9;&#x9;&#x9;anonymousClass = (( org.emftext.language.java.commons.Commentable) container).getContainingAnonymousClass();&#xA;&#x9;&#x9;&#x9;} else {&#xA;&#x9;&#x9;&#x9;&#x9;anonymousClass = null;&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;}&#xA;//package visibility?&#xA;if (getContainingPackageName() != null &amp;&amp; &#xA;&#x9;&#x9;getContainingPackageName().equals(context.getContainingPackageName())) {&#xA;&#x9;return false;&#xA;}&#xA;&#xA;return true;"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="context" eType="#//commons/Commentable"/>
</eOperations>
<eOperations name="isStatic" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="//all members of an interface are static by default&#xA;if (this.eContainer() instanceof org.emftext.language.java.classifiers.Interface) {&#xA;&#x9;return true;&#xA;}&#xA;&#xA;for( org.emftext.language.java.modifiers.AnnotationInstanceOrModifier modifier : this.getAnnotationsAndModifiers()) {&#xA;&#x9;if(modifier instanceof org.emftext.language.java.modifiers.Static) {&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;}&#xA;return false;"/>
<details key="documentation" value="&#xA; Returns true if this element is static (either by an explicit modifier &lt;code>static&lt;/code>&#xA; or because this element is part of an interface).&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="removeModifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.util.List&lt; org.emftext.language.java.modifiers.AnnotationInstanceOrModifier> modifiers = getAnnotationsAndModifiers();&#xA;java.util.List&lt; org.emftext.language.java.modifiers.AnnotationInstanceOrModifier> modifiersToRemove = new java.util.ArrayList&lt; org.emftext.language.java.modifiers.AnnotationInstanceOrModifier>();&#xA;for ( org.emftext.language.java.modifiers.AnnotationInstanceOrModifier modifier : modifiers) {&#xA;&#x9;if (modifierType.isInstance(modifier)) {&#xA;&#x9;&#x9;modifiersToRemove.add(modifier);&#xA;&#x9;}&#xA;}&#xA;modifiers.removeAll(modifiersToRemove);"/>
<details key="documentation" value="&#xA; Removes the given type of modifier from this element.&#xA;"/>
</eAnnotations>
<eParameters name="modifierType">
<eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass">
<eTypeArguments/>
</eGenericType>
</eParameters>
</eOperations>
<eOperations name="makePublic">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (isPublic()) {&#xA;&#x9;return;&#xA;}&#xA;removeModifier( org.emftext.language.java.modifiers.Private.class);&#xA;removeModifier( org.emftext.language.java.modifiers.Protected.class);&#xA;getAnnotationsAndModifiers().add( org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createPublic());"/>
<details key="documentation" value="&#xA; Sets the visibility of this element to &lt;code>public&lt;/code>.&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="makePrivate">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (isPrivate()) {&#xA;&#x9;return;&#xA;}&#xA;removeModifier( org.emftext.language.java.modifiers.Public.class);&#xA;removeModifier( org.emftext.language.java.modifiers.Protected.class);&#xA;getAnnotationsAndModifiers().add( org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createPrivate());"/>
<details key="documentation" value="&#xA; Sets the visibility of this element to &lt;code>private&lt;/code>.&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="makeProtected">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (isProtected()) {&#xA;&#x9;return;&#xA;}&#xA;removeModifier( org.emftext.language.java.modifiers.Private.class);&#xA;removeModifier( org.emftext.language.java.modifiers.Public.class);&#xA;getAnnotationsAndModifiers().add( org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createProtected());"/>
<details key="documentation" value="&#xA; Sets the visibility of this element to &lt;code>protected&lt;/code>.&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getModifiers" upperBound="-1" eType="#_Wo2Ys9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.modifiers.AnnotationInstanceOrModifier> elements = getAnnotationsAndModifiers();&#xA;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.modifiers.Modifier> modifiers = new org.eclipse.emf.common.util.BasicEList&lt; org.emftext.language.java.modifiers.Modifier>(); &#xA;for ( org.emftext.language.java.modifiers.AnnotationInstanceOrModifier next : elements) {&#xA;&#x9;if (next instanceof org.emftext.language.java.modifiers.Modifier) {&#xA;&#x9;&#x9;modifiers.add(( org.emftext.language.java.modifiers.Modifier) next);&#xA;&#x9;}&#xA;}&#xA;return org.eclipse.emf.common.util.ECollections.unmodifiableEList(modifiers);"/>
<details key="documentation" value="&#xA; Returns an unmodifiable list of the modifiers that apply to this element.&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="removeAllModifiers">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.util.List&lt; org.emftext.language.java.modifiers.Modifier> modifiers = getModifiers();&#xA;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.modifiers.AnnotationInstanceOrModifier> elements = getAnnotationsAndModifiers();&#xA;elements.removeAll(modifiers);"/>
<details key="documentation" value="&#xA; Removes all modifiers from this element.&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="hasModifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="java.util.List&lt; org.emftext.language.java.modifiers.AnnotationInstanceOrModifier> modifiers = getAnnotationsAndModifiers();&#xA;for ( org.emftext.language.java.modifiers.AnnotationInstanceOrModifier modifier : modifiers) {&#xA;&#x9;if (type.isInstance(modifier)) {&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;}&#xA;return false;"/>
<details key="documentation" value="&#xA; Checks whether this element has an modifier of the given type.&#xA;"/>
</eAnnotations>
<eParameters name="type">
<eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass">
<eTypeArguments/>
</eGenericType>
</eParameters>
</eOperations>
<eOperations name="isPublic" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return hasModifier( org.emftext.language.java.modifiers.Public.class);"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="isPrivate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return hasModifier( org.emftext.language.java.modifiers.Private.class);"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="isProtected" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return hasModifier( org.emftext.language.java.modifiers.Protected.class);"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="addModifier">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="getAnnotationsAndModifiers().add(newModifier);"/>
<details key="documentation" value="&#xA; Adds the given type of modifier to this element. This method does not&#xA; check for duplicate modifiers!&#xA;"/>
</eAnnotations>
<eParameters name="newModifier" lowerBound="1" eType="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="annotationsAndModifiers"
upperBound="-1" eType="#//modifiers/AnnotationInstanceOrModifier" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Modifiable" abstract="true" eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="modifiers" upperBound="-1"
eType="#_Wo2Ys9z1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yt9z1Ed2bJ_pQViWxFg" name="Abstract"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yvdz1Ed2bJ_pQViWxFg" name="Final"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Ywdz1Ed2bJ_pQViWxFg" name="Native"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yudz1Ed2bJ_pQViWxFg" name="Protected"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Ytdz1Ed2bJ_pQViWxFg" name="Public"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yu9z1Ed2bJ_pQViWxFg" name="Private"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yv9z1Ed2bJ_pQViWxFg" name="Static"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yydz1Ed2bJ_pQViWxFg" name="Strictfp"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yw9z1Ed2bJ_pQViWxFg" name="Synchronized"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yxdz1Ed2bJ_pQViWxFg" name="Transient"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yx9z1Ed2bJ_pQViWxFg" name="Volatile"
eSuperTypes="#_Wo2Ys9z1Ed2bJ_pQViWxFg"/>
</eSubpackages>
<eSubpackages name="operators" nsURI="http://www.emftext.org/java/operators" nsPrefix="operators">
<eClassifiers xsi:type="ecore:EClass" name="Operator" abstract="true" eSuperTypes="#//commons/Commentable"/>
<eClassifiers xsi:type="ecore:EClass" name="AdditiveOperator" abstract="true"
eSuperTypes="#//operators/Operator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentOperator" abstract="true"
eSuperTypes="#//operators/Operator"/>
<eClassifiers xsi:type="ecore:EClass" name="EqualityOperator" abstract="true"
eSuperTypes="#//operators/Operator"/>
<eClassifiers xsi:type="ecore:EClass" name="MultiplicativeOperator" abstract="true"
eSuperTypes="#//operators/Operator"/>
<eClassifiers xsi:type="ecore:EClass" name="RelationOperator" abstract="true"
eSuperTypes="#//operators/Operator"/>
<eClassifiers xsi:type="ecore:EClass" name="ShiftOperator" abstract="true" eSuperTypes="#//operators/Operator"/>
<eClassifiers xsi:type="ecore:EClass" name="UnaryOperator" abstract="true" eSuperTypes="#//operators/Operator"/>
<eClassifiers xsi:type="ecore:EClass" name="UnaryModificationOperator" abstract="true"
eSuperTypes="#//operators/Operator"/>
<eClassifiers xsi:type="ecore:EClass" name="Assignment" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentAnd" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentDivision" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentExclusiveOr" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentMinus" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentModulo" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentMultiplication" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentLeftShift" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentOr" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentPlus" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentRightShift" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="AssignmentUnsignedRightShift" eSuperTypes="#//operators/AssignmentOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="Equal" eSuperTypes="#//operators/EqualityOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="NotEqual" eSuperTypes="#//operators/EqualityOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="GreaterThan" eSuperTypes="#//operators/RelationOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="GreaterThanOrEqual" eSuperTypes="#//operators/RelationOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="LessThan" eSuperTypes="#//operators/RelationOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="LessThanOrEqual" eSuperTypes="#//operators/RelationOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="Addition" eSuperTypes="#//operators/AdditiveOperator #//operators/UnaryOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="Subtraction" eSuperTypes="#//operators/AdditiveOperator #//operators/UnaryOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="Division" eSuperTypes="#//operators/MultiplicativeOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="Multiplication" eSuperTypes="#//operators/MultiplicativeOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="Remainder" eSuperTypes="#//operators/MultiplicativeOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="Complement" eSuperTypes="#//operators/UnaryOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="MinusMinus" eSuperTypes="#//operators/UnaryModificationOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="Negate" eSuperTypes="#//operators/UnaryOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="PlusPlus" eSuperTypes="#//operators/UnaryModificationOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="LeftShift" eSuperTypes="#//operators/ShiftOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="RightShift" eSuperTypes="#//operators/ShiftOperator"/>
<eClassifiers xsi:type="ecore:EClass" name="UnsignedRightShift" eSuperTypes="#//operators/ShiftOperator"/>
</eSubpackages>
<eSubpackages name="parameters" nsURI="http://www.emftext.org/java/parameters" nsPrefix="parameters">
<eClassifiers xsi:type="ecore:EClass" name="Parameter" abstract="true" eSuperTypes="#//variables/Variable #//modifiers/AnnotableAndModifiable"/>
<eClassifiers xsi:type="ecore:EClass" name="Parametrizable" abstract="true" eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
eType="#//parameters/Parameter" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="OrdinaryParameter" eSuperTypes="#//parameters/Parameter"/>
<eClassifiers xsi:type="ecore:EClass" name="VariableLengthParameter" eSuperTypes="#//parameters/Parameter"/>
</eSubpackages>
<eSubpackages name="references" nsURI="http://www.emftext.org/java/references" nsPrefix="references">
<eClassifiers xsi:type="ecore:EClass" name="Reference" abstract="true" eSuperTypes="#//expressions/PrimaryExpression #//generics/TypeArgumentable">
<eOperations name="getReferencedType" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (this instanceof org.emftext.language.java.literals.Literal) {&#xA;&#x9;return (( org.emftext.language.java.literals.Literal) this).getType();&#xA;}&#xA;&#xA;org.emftext.language.java.types.Type type = null;&#xA;&#xA;//referenced element point to a type&#xA;if (this instanceof org.emftext.language.java.types.TypedElement) {&#xA;&#x9;org.emftext.language.java.types.TypeReference typeRef = (( org.emftext.language.java.types.TypedElement) this).getTypeReference();&#xA;&#x9;type = typeRef.getBoundTarget(this);&#xA;}&#xA;//element points to this or super&#xA;else if (this instanceof org.emftext.language.java.references.SelfReference) {&#xA;&#x9;org.emftext.language.java.types.Type thisClass = null;&#xA;&#x9;if (this.getPrevious() != null) {&#xA;&#x9;&#x9;thisClass = this.getPrevious().getReferencedType();&#xA;&#x9;}&#xA;&#x9;else {&#xA;&#x9;&#x9;org.emftext.language.java.classifiers.AnonymousClass anonymousContainer = getContainingAnonymousClass();&#xA;&#x9;&#x9;if (anonymousContainer != null) {&#xA;&#x9;&#x9;&#x9;thisClass = anonymousContainer;&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;else {&#xA;&#x9;&#x9;&#x9;thisClass = getContainingConcreteClassifier();&#x9;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;&#xA;&#x9;//find super class if &quot;self&quot; is &quot;super&quot;&#xA;&#x9;if ((( org.emftext.language.java.references.SelfReference) this).getSelf() instanceof org.emftext.language.java.literals.Super) {&#xA;&#x9;&#x9;if (thisClass instanceof org.emftext.language.java.classifiers.Class) {&#xA;&#x9;&#x9;&#x9;return (( org.emftext.language.java.classifiers.Class)thisClass).getSuperClass();&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;if (thisClass instanceof org.emftext.language.java.classifiers.AnonymousClass) {&#xA;&#x9;&#x9;&#x9;return (( org.emftext.language.java.classifiers.AnonymousClass)thisClass).getSuperClassifier();&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;&#xA;&#x9;return thisClass;&#xA;}&#xA;//element points to the object's class object&#xA;else if(this instanceof org.emftext.language.java.references.ReflectiveClassReference) {&#xA;&#x9;return getClassClass();&#xA;}&#xA;//referenced element points to an element with a type&#xA;else if (this instanceof org.emftext.language.java.references.ElementReference) {&#xA;&#x9;org.emftext.language.java.references.ReferenceableElement target = &#xA;&#x9;&#x9;( org.emftext.language.java.references.ReferenceableElement) (( org.emftext.language.java.references.ElementReference) this).getTarget();&#xA;&#x9;if (target.eIsProxy()) {&#xA;&#x9;&#x9;type = null;&#xA;&#x9;}&#xA;&#x9;&#xA;&#x9;//Navigate through AdditionalLocalVariable or Field&#xA;&#x9;if(target instanceof org.emftext.language.java.variables.AdditionalLocalVariable) {&#xA;&#x9;&#x9;target = ( org.emftext.language.java.references.ReferenceableElement) target.eContainer();&#xA;&#x9;}&#xA;&#x9;if(target instanceof org.emftext.language.java.members.AdditionalField) {&#xA;&#x9;&#x9;target = ( org.emftext.language.java.references.ReferenceableElement) target.eContainer();&#xA;&#x9;}&#xA;&#x9;if (target instanceof org.emftext.language.java.types.TypedElement) {&#xA;&#x9;&#x9;org.emftext.language.java.types.TypeReference typeRef = (( org.emftext.language.java.types.TypedElement) target).getTypeReference();&#xA;&#x9;&#x9;if (typeRef != null) {&#xA;&#x9;&#x9;&#x9;type = typeRef.getBoundTarget(this);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;else if (target instanceof org.emftext.language.java.types.Type /*e.g. Annotation*/ ) {&#xA;&#x9;&#x9;return ( org.emftext.language.java.types.Type) target;&#xA;&#x9;}&#xA;&#x9;else if(target instanceof org.emftext.language.java.members.EnumConstant) {&#xA;&#x9;&#x9;type = ( org.emftext.language.java.classifiers.Enumeration)target.eContainer();&#xA;&#x9;}&#x9;&#xA;}&#xA;//Strings may also appear as reference&#xA;else if (this instanceof org.emftext.language.java.references.StringReference) {&#xA;&#x9;return getStringClass();&#xA;}&#xA;else if (this instanceof org.emftext.language.java.expressions.NestedExpression) {&#xA;&#x9;type = (( org.emftext.language.java.expressions.NestedExpression) this).getExpression().getType();&#xA;}&#xA;else if (this instanceof org.emftext.language.java.references.PrimitiveTypeReference) {&#xA;&#x9;type = (( org.emftext.language.java.references.PrimitiveTypeReference)this).getPrimitiveType();&#xA;}&#xA;else {&#xA;&#x9;assert(false);&#xA;}&#xA;return type;"/>
<details key="documentation" value="&#xA; Determines the &lt;code>Type&lt;/code> of the reference. That is,&#xA; either the type to which the reference points directly, or the&#xA; type of the element to which the reference points.&#xA; &#xA; @return the determined type&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getPrevious" eType="#//references/Reference">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if (eContainer() instanceof org.emftext.language.java.references.Reference) { &#xA;&#x9; org.emftext.language.java.references.Reference container = ( org.emftext.language.java.references.Reference) eContainer( ) ; &#xA;&#x9; if (this.equals(container.getNext())) {&#xA;&#x9;&#x9; return container;&#xA;&#x9; }&#xA;}&#xA;return null;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="next" eType="#//references/Reference"
containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="arraySelectors" upperBound="-1"
eType="#//arrays/ArraySelector" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Argumentable" abstract="true" eSuperTypes="#//commons/Commentable">
<eOperations name="getArgumentTypes" upperBound="-1" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.types.Type> resultList = new org.eclipse.emf.common.util.BasicEList&lt; org.emftext.language.java.types.Type>();&#xA;&#xA;for( org.emftext.language.java.expressions.Expression exp : getArguments()) {&#xA;&#x9;org.emftext.language.java.types.Type type = exp.getType();&#xA;&#x9;resultList.add(type);&#xA;}&#xA;return resultList;"/>
<details key="documentation" value="&#xA; @return list of types of my arguments&#xA;"/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="arguments" upperBound="-1"
eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ReferenceableElement" abstract="true"
eSuperTypes="#//commons/NamedElement"/>
<eClassifiers xsi:type="ecore:EClass" name="ElementReference" abstract="true"
eSuperTypes="#//references/Reference">
<eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
eType="#//references/ReferenceableElement"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="IdentifierReference" eSuperTypes="#//references/ElementReference"/>
<eClassifiers xsi:type="ecore:EClass" name="MethodCall" eSuperTypes="#//references/ElementReference #//references/Argumentable #//generics/CallTypeArgumentable"/>
<eClassifiers xsi:type="ecore:EClass" name="ReflectiveClassReference" eSuperTypes="#//references/Reference"/>
<eClassifiers xsi:type="ecore:EClass" name="PrimitiveTypeReference" eSuperTypes="#//references/Reference">
<eStructuralFeatures xsi:type="ecore:EReference" name="primitiveType" lowerBound="1"
eType="#_Wo2ZR9z1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="StringReference" eSuperTypes="#//references/Reference">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="SelfReference" eSuperTypes="#//references/Reference">
<eStructuralFeatures xsi:type="ecore:EReference" name="self" lowerBound="1"
eType="#//literals/Self" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="PackageReference" eSuperTypes="#//references/ReferenceableElement">
<eStructuralFeatures xsi:type="ecore:EReference" name="subpackages" upperBound="-1"
eType="#//references/PackageReference" containment="true"/>
</eClassifiers>
</eSubpackages>
<eSubpackages xmi:id="_Wo2Yy9z1Ed2bJ_pQViWxFg" name="statements" nsURI="http://www.emftext.org/java/statements"
nsPrefix="statements">
<eClassifiers xsi:type="ecore:EClass" name="StatementContainer" abstract="true"
eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="statement" lowerBound="1"
eType="#_Wo2YzNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="StatementListContainer" abstract="true"
eSuperTypes="#//commons/Commentable">
<eOperations name="getLocalVariable" lowerBound="1" eType="#//variables/LocalVariable">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.variables.LocalVariable> localVariables = getChildrenByType( org.emftext.language.java.variables.LocalVariable.class);&#xA;for ( org.emftext.language.java.variables.LocalVariable localVariable : localVariables) {&#xA;&#x9;if (localVariable.getName().equals(name)) {&#xA;&#x9;&#x9;return localVariable;&#xA;&#x9;}&#xA;}&#xA;return null;"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="statements" upperBound="-1"
eType="#_Wo2YzNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Conditional" abstract="true" eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Y9tz1Ed2bJ_pQViWxFg" name="ForLoopInitializer"
abstract="true" eSuperTypes="#//commons/Commentable"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2YzNz1Ed2bJ_pQViWxFg" name="Statement"
abstract="true" eSuperTypes="#//commons/Commentable"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Y4tz1Ed2bJ_pQViWxFg" name="SwitchCase"
abstract="true" eSuperTypes="#//statements/StatementListContainer"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Yztz1Ed2bJ_pQViWxFg" name="Assert"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg #//statements/Conditional">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2Y0tz1Ed2bJ_pQViWxFg"
name="errorMessage" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZI9z1Ed2bJ_pQViWxFg" name="Break"
eSuperTypes="#//statements/Jump"/>
<eClassifiers xsi:type="ecore:EClass" name="Block" eSuperTypes="#//members/Member #_Wo2YzNz1Ed2bJ_pQViWxFg #//statements/StatementListContainer #//modifiers/Modifiable"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZD9z1Ed2bJ_pQViWxFg" name="CatchBlock"
eSuperTypes="#//statements/StatementListContainer">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZEdz1Ed2bJ_pQViWxFg"
name="parameter" lowerBound="1" eType="#//parameters/OrdinaryParameter"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Y1Nz1Ed2bJ_pQViWxFg" name="Condition"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg #//statements/StatementContainer #//statements/Conditional">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2Y2tz1Ed2bJ_pQViWxFg"
name="elseStatement" eType="#_Wo2YzNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZJ9z1Ed2bJ_pQViWxFg" name="Continue"
eSuperTypes="#//statements/Jump"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Y69z1Ed2bJ_pQViWxFg" name="DefaultSwitchCase"
eSuperTypes="#_Wo2Y4tz1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZBtz1Ed2bJ_pQViWxFg" name="DoWhileLoop"
eSuperTypes="#_Wo2ZANz1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZK9z1Ed2bJ_pQViWxFg" name="EmptyStatement"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZMtz1Ed2bJ_pQViWxFg" name="ExpressionStatement"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZNNz1Ed2bJ_pQViWxFg"
name="expression" lowerBound="1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Y7dz1Ed2bJ_pQViWxFg" name="ForLoop"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg #//statements/StatementContainer #//statements/Conditional">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2Y79z1Ed2bJ_pQViWxFg"
name="init" eType="#_Wo2Y9tz1Ed2bJ_pQViWxFg" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2Y8tz1Ed2bJ_pQViWxFg"
name="updates" upperBound="-1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Y-Nz1Ed2bJ_pQViWxFg" name="ForEachLoop"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg #//statements/StatementContainer">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2Y-tz1Ed2bJ_pQViWxFg"
name="next" lowerBound="1" eType="#//parameters/OrdinaryParameter" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2Y_Nz1Ed2bJ_pQViWxFg"
name="collection" lowerBound="1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Jump" abstract="true" eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#_Wo2ZLdz1Ed2bJ_pQViWxFg"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZLdz1Ed2bJ_pQViWxFg" name="JumpLabel"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg #//statements/StatementContainer #//commons/NamedElement"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZNtz1Ed2bJ_pQViWxFg" name="LocalVariableStatement"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZONz1Ed2bJ_pQViWxFg"
name="variable" lowerBound="1" eType="#//variables/LocalVariable" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Y6dz1Ed2bJ_pQViWxFg" name="NormalSwitchCase"
eSuperTypes="#_Wo2Y4tz1Ed2bJ_pQViWxFg #//statements/Conditional"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZG9z1Ed2bJ_pQViWxFg" name="Return"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZHdz1Ed2bJ_pQViWxFg"
name="returnValue" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2Y3Nz1Ed2bJ_pQViWxFg" name="Switch"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2Y3tz1Ed2bJ_pQViWxFg"
name="cases" upperBound="-1" eType="#_Wo2Y4tz1Ed2bJ_pQViWxFg" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2Y4Nz1Ed2bJ_pQViWxFg"
name="variable" lowerBound="1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZFdz1Ed2bJ_pQViWxFg" name="SynchronizedBlock"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg #//statements/StatementListContainer">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZF9z1Ed2bJ_pQViWxFg"
name="lockProvider" lowerBound="1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZH9z1Ed2bJ_pQViWxFg" name="Throw"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZIdz1Ed2bJ_pQViWxFg"
name="throwable" lowerBound="1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZCNz1Ed2bJ_pQViWxFg" name="TryBlock"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg #//statements/StatementListContainer">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZDtz1Ed2bJ_pQViWxFg"
name="catcheBlocks" upperBound="-1" eType="#_Wo2ZD9z1Ed2bJ_pQViWxFg" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZDNz1Ed2bJ_pQViWxFg"
name="finallyBlock" eType="#//statements/Block" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZANz1Ed2bJ_pQViWxFg" name="WhileLoop"
eSuperTypes="#_Wo2YzNz1Ed2bJ_pQViWxFg #//statements/StatementContainer">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZAtz1Ed2bJ_pQViWxFg"
name="condition" lowerBound="1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
</eSubpackages>
<eSubpackages xmi:id="_Wo2ZOtz1Ed2bJ_pQViWxFg" name="types" nsURI="http://www.emftext.org/java/types"
nsPrefix="types">
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZO9z1Ed2bJ_pQViWxFg" name="Type"
abstract="true" eSuperTypes="#//commons/Commentable">
<eOperations name="equalsType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.types.Type _this = this;&#xA;//comparison for type parameters&#xA;if (_this instanceof org.emftext.language.java.generics.TypeParameter) {&#xA;&#x9;org.emftext.language.java.generics.TypeParameter typeParameter = ( org.emftext.language.java.generics.TypeParameter) _this;&#xA;&#x9;for ( org.emftext.language.java.types.TypeReference referencedType : typeParameter.getExtendTypes()) {&#xA;&#x9;&#x9;if (referencedType.getTarget() != null &amp;&amp; !referencedType.getTarget().eIsProxy() &amp;&amp; referencedType.getTarget().equalsType(arrayDimension, otherType, otherArrayDimension)) {&#xA;&#x9;&#x9;&#x9;return true;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;if (typeParameter.getExtendTypes().isEmpty()) {&#xA;&#x9;&#x9;if (getObjectClass().equalsType(arrayDimension, otherType, otherArrayDimension)) {&#xA;&#x9;&#x9;&#x9;return true;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;} &#xA;if (otherType instanceof org.emftext.language.java.generics.TypeParameter) {&#xA;&#x9;org.emftext.language.java.generics.TypeParameter typeParameter = ( org.emftext.language.java.generics.TypeParameter) otherType;&#xA;&#x9;for ( org.emftext.language.java.types.TypeReference referencedType : typeParameter.getExtendTypes()) {&#xA;&#x9;&#x9;if (referencedType.getTarget() != null &amp;&amp; !referencedType.getTarget().eIsProxy() &amp;&amp; equalsType(arrayDimension, referencedType.getTarget(), otherArrayDimension)) {&#xA;&#x9;&#x9;&#x9;return true;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;if (typeParameter.getExtendTypes().isEmpty()) {&#xA;&#x9;&#x9;if (equalsType(arrayDimension, getObjectClass(), otherArrayDimension)) {&#xA;&#x9;&#x9;&#x9;return true;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;//do comparison on the classifier level&#xA;if (_this instanceof org.emftext.language.java.types.PrimitiveType) {&#xA;&#x9;_this = (( org.emftext.language.java.types.PrimitiveType)_this).wrapPrimitiveType();&#xA;}&#xA;if (otherType instanceof org.emftext.language.java.types.PrimitiveType) {&#xA;&#x9;otherType = (( org.emftext.language.java.types.PrimitiveType) otherType).wrapPrimitiveType();&#xA;}&#xA;&#xA;if (arrayDimension == otherArrayDimension &amp;&amp;&#xA;&#x9;&#x9;otherType instanceof org.emftext.language.java.classifiers.Classifier &amp;&amp; _this instanceof org.emftext.language.java.classifiers.Classifier &amp;&amp;&#xA;&#x9;&#x9;(otherType.equals(_this))) {&#x9;&#xA;&#x9;return true;&#xA;}&#xA;&#xA;return false;"/>
<details key="documentation" value="&#xA; @param arrayDimension&#xA; @param otherType&#xA; @param otherArrayDimension&#xA; @return if both type are equal&#xA;"/>
</eAnnotations>
<eParameters name="arrayDimension" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
<eParameters name="otherType" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg"/>
<eParameters name="otherArrayDimension" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
</eOperations>
<eOperations name="isSuperType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="if(otherType == null) {&#xA;&#x9;return false;&#xA;}&#xA;&#xA;org.emftext.language.java.types.Type _this = this;&#xA;&#xA;if (_this instanceof org.emftext.language.java.util.TemporalCompositeClassifier || otherType instanceof org.emftext.language.java.util.TemporalCompositeClassifier) {&#xA;&#x9;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.types.Type> _thisTypeList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.types.Type>();&#xA;&#x9;org.eclipse.emf.common.util.EList&lt; org.emftext.language.java.types.Type> otherTypeList = new org.emftext.language.java.util.UniqueEList&lt; org.emftext.language.java.types.Type>();&#xA;&#x9;if (_this instanceof org.emftext.language.java.util.TemporalCompositeClassifier) {&#xA;&#x9;&#x9;for( org.eclipse.emf.ecore.EObject aType : (( org.emftext.language.java.util.TemporalCompositeClassifier)_this).getSuperTypes()) {&#xA;&#x9;&#x9;&#x9;_thisTypeList.add(( org.emftext.language.java.types.Type)aType);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;else {&#xA;&#x9;&#x9;_thisTypeList.add(_this);&#xA;&#x9;}&#xA;&#x9;if (otherType instanceof org.emftext.language.java.util.TemporalCompositeClassifier) {&#xA;&#x9;&#x9;for( org.eclipse.emf.ecore.EObject aType : (( org.emftext.language.java.util.TemporalCompositeClassifier)otherType).getSuperTypes()) {&#xA;&#x9;&#x9;&#x9;otherTypeList.add(( org.emftext.language.java.types.Type)aType);&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;else {&#xA;&#x9;&#x9;otherTypeList.add(_this);&#xA;&#x9;}&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;for( org.emftext.language.java.types.Type one_thisType : _thisTypeList) {&#xA;&#x9;&#x9;for( org.emftext.language.java.types.Type oneOtherType : otherTypeList) {&#xA;&#x9;&#x9;&#x9;boolean result = one_thisType.isSuperType(arrayDimension, oneOtherType, otherArrayType);&#xA;&#x9;&#x9;&#x9;if (result) {&#xA;&#x9;&#x9;&#x9;&#x9;return true;&#xA;&#x9;&#x9;&#x9;}&#x9;&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;return false;&#xA;}&#xA;&#xA;//if I am a void, I am of every type&#xA;if (_this.equals(getLibClass(&quot;Void&quot;))) {&#xA;&#x9;return true;&#xA;}&#xA;&#xA;//if the other is Object I am a subtype in any case (also array dimensions do not matter)&#xA;if (otherType.equals(getObjectClass())) {&#xA;&#x9;return true;&#xA;}&#xA;&#xA;//String, primitives, and arrays are serializable&#xA;org.emftext.language.java.classifiers.ConcreteClassifier serializableClass = ( org.emftext.language.java.classifiers.ConcreteClassifier) org.eclipse.emf.ecore.util.EcoreUtil.resolve(&#xA;&#x9;&#x9;getConcreteClassifierProxy(&quot;java.io.Serializable&quot;), _this);&#xA;if (otherType.equals(serializableClass)) {&#xA;&#x9;if (_this.equals(serializableClass)) {&#xA;&#x9; &#x9;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;&#x9;else if (_this.equals(getStringClass())) {&#xA;&#x9; &#x9;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;&#x9;else if (_this instanceof org.emftext.language.java.types.PrimitiveType) {&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;&#x9;else if (arrayDimension > 0) {&#xA;&#x9;&#x9;//all arrays are serializable&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;}&#xA;&#xA;//if one of us is a parameter to the best of my knowledge, we might match&#xA;if(_this instanceof org.emftext.language.java.generics.TypeParameter) {&#xA;&#x9;return true;&#xA;}&#xA;if(otherType instanceof org.emftext.language.java.generics.TypeParameter ) {&#xA;&#x9;return true;&#xA;}&#xA;&#xA;//if array dimensions do not match, I am no subtype&#xA;boolean isTypeParameter = false;&#x9;&#x9;&#xA;if (otherArrayType instanceof org.emftext.language.java.types.TypedElement) {&#xA;&#x9;org.emftext.language.java.types.Type type = (( org.emftext.language.java.types.TypedElement)otherArrayType).getTypeReference().getTarget();&#xA;&#x9;isTypeParameter = type instanceof org.emftext.language.java.generics.TypeParameter;&#xA;}&#xA;boolean isVariableLengthParameter = otherArrayType instanceof org.emftext.language.java.parameters.VariableLengthParameter;&#xA;&#xA;long otherArrayDim = 0;&#xA;if(otherArrayType != null) {&#xA;&#x9;otherArrayDim = otherArrayType.getArrayDimension();&#xA;}&#xA;&#xA;if (isTypeParameter &amp;&amp; isVariableLengthParameter) {&#xA;&#x9;if(arrayDimension != otherArrayDim &amp;&amp; &#xA;&#x9;&#x9;arrayDimension != otherArrayDim- 1 &amp;&amp; &#xA;&#x9;&#x9;arrayDimension &lt; otherArrayDim) {&#xA;&#x9;&#x9;&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;}&#xA;else if (isTypeParameter) {&#xA;&#x9;if(arrayDimension &lt; otherArrayDim) {&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;}&#xA;else if (isVariableLengthParameter) {&#xA;&#x9;if(arrayDimension != otherArrayDim &amp;&amp; arrayDimension != otherArrayDim- 1) {&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;}&#xA;else {&#xA;&#x9;if(arrayDimension != otherArrayDim) {&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;}&#xA;&#xA;//annotations&#xA;if(_this instanceof org.emftext.language.java.classifiers.Annotation &amp;&amp; &#xA;&#x9;&#x9;(otherType.equals(getAnnotationInterface()) ||&#xA;&#x9;&#x9;&#x9;&#x9;(( org.emftext.language.java.classifiers.ConcreteClassifier)_this).getAllSuperClassifiers(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;).contains(getAnnotationInterface()))) {&#xA;&#x9;return true;&#xA;}&#xA;&#xA;//do comparison on the classifier level&#xA;if (_this instanceof org.emftext.language.java.types.PrimitiveType) {&#xA;&#x9;_this = (( org.emftext.language.java.types.PrimitiveType) _this).wrapPrimitiveType();&#xA;}&#xA;if (otherType instanceof org.emftext.language.java.types.PrimitiveType) {&#xA;&#x9;otherType = (( org.emftext.language.java.types.PrimitiveType) otherType).wrapPrimitiveType();&#xA;}&#xA;&#xA;//compare in type hierarchy&#xA;if (otherType instanceof org.emftext.language.java.classifiers.ConcreteClassifier &amp;&amp; _this instanceof org.emftext.language.java.classifiers.ConcreteClassifier &amp;&amp;&#xA;&#x9;&#x9;(otherType.equals(_this) || &#xA;&#x9;&#x9;&#x9;&#x9;(( org.emftext.language.java.classifiers.ConcreteClassifier)_this).getAllSuperClassifiers(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;).contains(otherType))) {&#xA;&#x9;return true;&#xA;}&#xA;&#xA;if (otherType instanceof org.emftext.language.java.classifiers.ConcreteClassifier &amp;&amp; _this instanceof org.emftext.language.java.classifiers.AnonymousClass &amp;&amp;&#xA;&#x9;&#x9;(( org.emftext.language.java.classifiers.AnonymousClass)_this).getAllSuperClassifiers(&#xA;&#x9;&#x9;&#x9;&#x9;).contains(otherType)) {&#xA;&#x9;&#xA;&#x9;return true;&#xA;}&#xA;&#xA;//everything can be implicitly casted to CharSequence, so I match when the other type is a CharSequence&#xA;org.emftext.language.java.classifiers.Interface charSequenceClass = getLibInterface(&quot;CharSequence&quot;);&#xA;&#xA;if (otherType instanceof org.emftext.language.java.classifiers.ConcreteClassifier) {&#xA;&#x9;if(otherType.equals(charSequenceClass) ||&#xA;&#x9;&#x9;&#x9;(( org.emftext.language.java.classifiers.ConcreteClassifier)otherType).getAllSuperClassifiers(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;).contains(charSequenceClass)) {&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;}&#xA;&#xA;//there are some specifics for primitive types not reflected in the type hierarchy&#xA;if (otherType instanceof org.emftext.language.java.classifiers.Class) {&#xA;&#x9;org.emftext.language.java.types.PrimitiveType primitiveType = (( org.emftext.language.java.classifiers.Class) otherType).unWrapPrimitiveType();&#xA;&#x9;if(primitiveType == null) {&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;&#x9;otherType = primitiveType;&#xA;}&#xA;&#xA;if (_this instanceof org.emftext.language.java.classifiers.Class) {&#xA;&#x9;org.emftext.language.java.types.PrimitiveType primitiveType = (( org.emftext.language.java.classifiers.Class) _this).unWrapPrimitiveType();&#xA;&#x9;if(primitiveType == null) {&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;&#x9;_this = primitiveType;&#xA;}&#xA;&#xA;if (_this instanceof org.emftext.language.java.types.Boolean) {&#xA;&#x9;if (otherType instanceof org.emftext.language.java.types.Boolean) {&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;&#x9;else {&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;}&#xA;if (_this instanceof org.emftext.language.java.types.Byte ||&#xA;&#x9;&#x9;_this instanceof org.emftext.language.java.types.Int ||&#xA;&#x9;&#x9;_this instanceof org.emftext.language.java.types.Short ||&#xA;&#x9;&#x9;_this instanceof org.emftext.language.java.types.Long ||&#xA;&#x9;&#x9;_this instanceof org.emftext.language.java.types.Char) {&#xA;&#x9;if (otherType instanceof org.emftext.language.java.types.Byte ||&#xA;&#x9;&#x9;&#x9;otherType instanceof org.emftext.language.java.types.Int ||&#xA;&#x9;&#x9;&#x9;otherType instanceof org.emftext.language.java.types.Short ||&#xA;&#x9;&#x9;&#x9;otherType instanceof org.emftext.language.java.types.Long ||&#xA;&#x9;&#x9;&#x9;otherType instanceof org.emftext.language.java.types.Char ||&#xA;&#x9;&#x9;&#x9;otherType instanceof org.emftext.language.java.types.Float ||&#xA;&#x9;&#x9;&#x9;otherType instanceof org.emftext.language.java.types.Double) {&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;&#x9;else {&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;}&#xA;if (_this instanceof org.emftext.language.java.types.Float ||&#xA;&#x9;&#x9;_this instanceof org.emftext.language.java.types.Double) {&#xA;&#x9;if (otherType instanceof org.emftext.language.java.types.Float ||&#xA;&#x9;&#x9;&#x9;otherType instanceof org.emftext.language.java.types.Double) {&#xA;&#x9;&#x9;return true;&#xA;&#x9;}&#xA;&#x9;else {&#xA;&#x9;&#x9;return false;&#xA;&#x9;}&#xA;}&#xA;&#xA;return false;"/>
<details key="documentation" value="&#xA; @param arrayDimension&#xA; @param otherType&#xA; @param otherArrayType&#xA; @return if the other type is equal to me or a super type of me&#xA;"/>
</eAnnotations>
<eParameters name="arrayDimension" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
<eParameters name="otherType" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg"/>
<eParameters name="otherArrayType" eType="#//arrays/ArrayTypeable"/>
</eOperations>
<eOperations name="getAllMembers" upperBound="-1" eType="#//members/Member">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="//method has to be specified in subclasses&#xA;throw new java.lang.UnsupportedOperationException();"/>
<details key="documentation" value=""/>
</eAnnotations>
<eParameters name="context" eType="#//commons/Commentable"/>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZP9z1Ed2bJ_pQViWxFg" name="TypedElement"
abstract="true" eSuperTypes="#//commons/Commentable">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZQdz1Ed2bJ_pQViWxFg"
name="typeReference" lowerBound="1" eType="#_Wo2ZPdz1Ed2bJ_pQViWxFg" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZPdz1Ed2bJ_pQViWxFg" name="TypeReference"
abstract="true" eSuperTypes="#//commons/Commentable">
<eOperations name="getTarget" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="return getBoundTarget(null);"/>
<details key="documentation" value="&#xA; Returns the type referenced by this &lt;code>TypeReference&lt;/code>&#xA; considering all concrete subclasses of &lt;code>TypeReference&lt;/code> used&#xA; by the Java metamodel. &#xA; &#xA; @param _this &#xA; @return the type&#xA;"/>
</eAnnotations>
</eOperations>
<eOperations name="getBoundTarget" eType="#_Wo2ZO9z1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.types.Type type = null;&#xA;if (this instanceof org.emftext.language.java.types.ClassifierReference || &#xA;&#x9;&#x9;this instanceof org.emftext.language.java.types.NamespaceClassifierReference) {&#xA;&#x9;org.emftext.language.java.types.ClassifierReference classifierRef = getPureClassifierReference();&#xA;&#x9;if (classifierRef != null) {&#xA;&#x9;&#x9;type = classifierRef.getTarget();&#xA;&#x9;}&#xA;&#x9;&#xA;&#x9;if (reference instanceof org.emftext.language.java.references.MethodCall) {&#xA;&#x9;&#x9;org.emftext.language.java.references.MethodCall potentialCloneCall = ( org.emftext.language.java.references.MethodCall) reference;&#xA;&#x9;&#x9;//clone returns the type of the cloned in the case of arrays&#xA;&#x9;&#x9;org.emftext.language.java.references.ReferenceableElement potentialCloneCallTarget = potentialCloneCall.getTarget();&#xA;&#x9;&#x9;if (potentialCloneCallTarget != null &amp;&amp; &#xA;&#x9;&#x9;&#x9;&#x9;!potentialCloneCallTarget.eIsProxy() &amp;&amp; &#xA;&#x9;&#x9;&#x9;&#x9;&quot;clone&quot;.equals(potentialCloneCallTarget.getName())) {&#xA;&#x9;&#x9;&#x9;if (potentialCloneCall.getPrevious() instanceof org.emftext.language.java.references.ElementReference) {&#xA;&#x9;&#x9;&#x9;&#x9;org.emftext.language.java.references.ElementReference prevRef = ( org.emftext.language.java.references.ElementReference) potentialCloneCall.getPrevious();&#xA;&#x9;&#x9;&#x9;&#x9;if (prevRef.getTarget() instanceof org.emftext.language.java.arrays.ArrayTypeable &amp;&amp; &#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;(( org.emftext.language.java.arrays.ArrayTypeable)prevRef.getTarget()).getArrayDimension() > 0) {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;type = prevRef.getReferencedType();&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;else if(this instanceof org.emftext.language.java.types.PrimitiveType) {&#xA;&#x9;return ( org.emftext.language.java.types.PrimitiveType) this;&#xA;}&#xA;&#xA;//resolve parameter to real type&#xA;if (type instanceof org.emftext.language.java.generics.TypeParameter) {&#xA;&#x9;type = (( org.emftext.language.java.generics.TypeParameter) type).getBoundType(this, reference);&#xA;}&#xA;&#xA;if (type != null &amp;&amp; type.eIsProxy()) {&#xA;&#x9;//this may happen, when e.g. a super type is resolved. It is ok.&#xA;&#x9;return null;&#xA;}&#xA;&#xA;return type;"/>
<details key="documentation" value="&#xA; Returns the type referenced by this &lt;code>TypeReference&lt;/code>&#xA; considering all concrete subclasses of &lt;code>TypeReference&lt;/code> used&#xA; by the Java metamodel. If type parameters are bound in the given reference,&#xA; the bound type will be returned instead of the parameter.&#xA; &#xA; @return the type&#xA;"/>
</eAnnotations>
<eParameters name="reference" eType="#//references/Reference"/>
</eOperations>
<eOperations name="getPureClassifierReference" eType="#//types/ClassifierReference">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.types.ClassifierReference classifierReference = null;&#xA;if (this instanceof org.emftext.language.java.types.ClassifierReference) {&#xA;&#x9;classifierReference = ( org.emftext.language.java.types.ClassifierReference) this;&#xA;}&#xA;if (this instanceof org.emftext.language.java.types.NamespaceClassifierReference) {&#xA;&#x9;org.emftext.language.java.types.NamespaceClassifierReference nsClassifierReference = ( org.emftext.language.java.types.NamespaceClassifierReference) this;&#xA;&#x9;if (!nsClassifierReference.getClassifierReferences().isEmpty()) {&#xA;&#x9;&#x9;int lastIndex = nsClassifierReference.getClassifierReferences().size() - 1;&#xA;&#x9;&#x9;classifierReference = nsClassifierReference.getClassifierReferences().get(lastIndex);&#xA;&#x9;}&#xA;}&#xA;return classifierReference;"/>
<details key="documentation" value="&#xA; Extracts the (possibly nested) classifier reference (if any) &#xA; from this type references.&#xA; &#xA; @return&#xA;"/>
</eAnnotations>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ClassifierReference" eSuperTypes="#_Wo2ZPdz1Ed2bJ_pQViWxFg #//generics/TypeArgumentable">
<eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
eType="#//classifiers/Classifier"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZQ9z1Ed2bJ_pQViWxFg" name="NamespaceClassifierReference"
eSuperTypes="#_Wo2ZPdz1Ed2bJ_pQViWxFg #//commons/NamespaceAwareElement">
<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_Wo2ZRdz1Ed2bJ_pQViWxFg"
name="classifierReferences" lowerBound="1" upperBound="-1" eType="#//types/ClassifierReference"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZR9z1Ed2bJ_pQViWxFg" name="PrimitiveType"
abstract="true" eSuperTypes="#_Wo2ZO9z1Ed2bJ_pQViWxFg #_Wo2ZPdz1Ed2bJ_pQViWxFg">
<eOperations name="getAllMembers" upperBound="-1" eType="#//members/Member">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.classifiers.Class javaClass = wrapPrimitiveType();&#x9;&#xA;return javaClass.getAllMembers(context);"/>
<details key="documentation" value="&#xA; @param context to check protected visibility&#xA; @return all members (including super type members)&#xA;"/>
</eAnnotations>
<eParameters name="context" eType="#//commons/Commentable"/>
</eOperations>
<eOperations name="wrapPrimitiveType" eType="#//classifiers/Class">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.classifiers.Class javaClass = null;&#xA;&#xA;if (this instanceof org.emftext.language.java.types.Boolean) {&#xA;&#x9;javaClass = getLibClass(&quot;Boolean&quot;);&#xA;}&#xA;if (this instanceof org.emftext.language.java.types.Byte) {&#xA;&#x9;javaClass = getLibClass(&quot;Byte&quot;);&#xA;}&#xA;if (this instanceof org.emftext.language.java.types.Char) {&#xA;&#x9;javaClass = getLibClass(&quot;Character&quot;);&#xA;}&#xA;if (this instanceof org.emftext.language.java.types.Double) {&#xA;&#x9;javaClass = getLibClass(&quot;Double&quot;);&#xA;}&#xA;if (this instanceof org.emftext.language.java.types.Float) {&#xA;&#x9;javaClass = getLibClass(&quot;Float&quot;);&#xA;}&#xA;if (this instanceof org.emftext.language.java.types.Int) {&#xA;&#x9;javaClass = getLibClass(&quot;Integer&quot;);&#xA;}&#xA;if (this instanceof org.emftext.language.java.types.Long) {&#xA;&#x9;javaClass = getLibClass(&quot;Long&quot;);&#xA;}&#xA;if (this instanceof org.emftext.language.java.types.Short) {&#xA;&#x9;javaClass = getLibClass(&quot;Short&quot;);&#xA;}&#xA;if (this instanceof org.emftext.language.java.types.Void) {&#xA;&#x9;javaClass = getLibClass(&quot;Void&quot;);&#xA;}&#xA;return javaClass;"/>
<details key="documentation" value="&#xA; @return primitive type as a class representation&#xA;"/>
</eAnnotations>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZS9z1Ed2bJ_pQViWxFg" name="Boolean"
eSuperTypes="#_Wo2ZR9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZT9z1Ed2bJ_pQViWxFg" name="Byte"
eSuperTypes="#_Wo2ZR9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZTdz1Ed2bJ_pQViWxFg" name="Char"
eSuperTypes="#_Wo2ZR9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZWdz1Ed2bJ_pQViWxFg" name="Double"
eSuperTypes="#_Wo2ZR9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZV9z1Ed2bJ_pQViWxFg" name="Float"
eSuperTypes="#_Wo2ZR9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZU9z1Ed2bJ_pQViWxFg" name="Int"
eSuperTypes="#_Wo2ZR9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZVdz1Ed2bJ_pQViWxFg" name="Long"
eSuperTypes="#_Wo2ZR9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" xmi:id="_Wo2ZUdz1Ed2bJ_pQViWxFg" name="Short"
eSuperTypes="#_Wo2ZR9z1Ed2bJ_pQViWxFg"/>
<eClassifiers xsi:type="ecore:EClass" name="Void" eSuperTypes="#_Wo2ZR9z1Ed2bJ_pQViWxFg"/>
</eSubpackages>
<eSubpackages name="variables" nsURI="http://www.emftext.org/java/variables" nsPrefix="variables">
<eClassifiers xsi:type="ecore:EClass" name="Variable" abstract="true" eSuperTypes="#//commons/NamedElement #_Wo2ZP9z1Ed2bJ_pQViWxFg #//arrays/ArrayTypeable #//references/ReferenceableElement #//generics/TypeArgumentable">
<eOperations name="getArrayDimension" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size();&#xA;if (this instanceof org.emftext.language.java.parameters.VariableLengthParameter) {&#xA;&#x9;size++;&#xA;}&#xA;return size;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
<eOperations name="createMethodCallStatement" eType="#_Wo2YzNz1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.statements.ExpressionStatement callStatement = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createExpressionStatement();&#xA;callStatement.setExpression(createMethodCall(methodName, arguments));&#xA;return callStatement;"/>
<details key="documentation" value="&#xA; Creates a statement that calls the method with the given name on this&#xA; variable. If the variable's type does not offer such a method, null is&#xA; returned.&#xA;"/>
</eAnnotations>
<eParameters name="methodName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eParameters name="arguments" upperBound="-1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg"/>
</eOperations>
<eOperations name="createMethodCall" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="org.emftext.language.java.references.IdentifierReference thisRef = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference();&#xA;thisRef.setTarget(this);&#xA;org.emftext.language.java.references.MethodCall methodCall = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall();&#xA;org.emftext.language.java.types.Type thisType = getTypeReference().getTarget();&#xA;if (thisType instanceof org.emftext.language.java.members.MemberContainer) {&#xA;&#x9;org.emftext.language.java.members.MemberContainer castedType = ( org.emftext.language.java.members.MemberContainer) thisType;&#xA;&#x9;org.emftext.language.java.members.Method method = castedType.getContainedMethod(methodName);&#xA;&#x9;if (method == null) {&#xA;&#x9;&#x9;return null;&#xA;&#x9;}&#xA;&#x9;methodCall.setTarget(method);&#xA;&#x9;// add arguments&#xA;&#x9;methodCall.getArguments().addAll(arguments);&#xA;&#x9;thisRef.setNext(methodCall);&#xA;&#x9;return thisRef;&#xA;} else {&#xA;&#x9;return null;&#xA;}"/>
<details key="documentation" value="&#xA; Creates an expression that calls the method with the given name on this&#xA; variable. If the variable's type does not offer such a method, null is&#xA; returned.&#xA;"/>
</eAnnotations>
<eParameters name="methodName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eParameters name="arguments" upperBound="-1" eType="#_Wo2YDNz1Ed2bJ_pQViWxFg"/>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="LocalVariable" eSuperTypes="#//variables/Variable #//instantiations/Initializable #_Wo2Y9tz1Ed2bJ_pQViWxFg #//modifiers/AnnotableAndModifiable">
<eStructuralFeatures xsi:type="ecore:EReference" name="additionalLocalVariables"
upperBound="-1" eType="#//variables/AdditionalLocalVariable" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AdditionalLocalVariable" eSuperTypes="#//references/ReferenceableElement #//arrays/ArrayTypeable #//instantiations/Initializable">
<eOperations name="getArrayDimension" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
<details key="body" value="long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size();&#xA;return size;"/>
<details key="documentation" value=""/>
</eAnnotations>
</eOperations>
</eClassifiers>
</eSubpackages>
</ecore:EPackage>
Jump to Line
Something went wrong with that request. Please try again.