blob: b763798c4bc77bd1aa4cc777778d2235ea06ff7f [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2002-2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*
* </copyright>
*
* $Id: EClassImpl.java,v 1.41.2.1 2007/12/14 23:03:42 emerks Exp $
*/
package org.eclipse.emf.ecore.impl;
import java.lang.reflect.Array;
import java.util.AbstractSequentialList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.notify.impl.NotificationImpl;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.UniqueEList;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EGenericType;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.ETypeParameter;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.util.DelegatingEcoreEList;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
import org.eclipse.emf.ecore.util.EcoreEList;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
import org.eclipse.emf.ecore.util.FeatureMapUtil;
import org.eclipse.emf.ecore.util.InternalEList;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>EClass</b></em>'.
* @extends ESuperAdapter.Holder
* @ignore
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#isAbstract <em>Abstract</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#isInterface <em>Interface</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getESuperTypes <em>ESuper Types</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEOperations <em>EOperations</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEAllAttributes <em>EAll Attributes</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEAllReferences <em>EAll References</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEReferences <em>EReferences</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEAttributes <em>EAttributes</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEAllContainments <em>EAll Containments</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEAllOperations <em>EAll Operations</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEAllStructuralFeatures <em>EAll Structural Features</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEAllSuperTypes <em>EAll Super Types</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEIDAttribute <em>EID Attribute</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEStructuralFeatures <em>EStructural Features</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEGenericSuperTypes <em>EGeneric Super Types</em>}</li>
* <li>{@link org.eclipse.emf.ecore.impl.EClassImpl#getEAllGenericSuperTypes <em>EAll Generic Super Types</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class EClassImpl extends EClassifierImpl implements EClass, ESuperAdapter.Holder
{
public interface FeatureSubsetSupplier
{
EStructuralFeature [] containments();
EStructuralFeature [] crossReferences();
EStructuralFeature [] features();
}
protected EAttribute eIDAttribute;
protected BasicEList<EAttribute> eAllAttributes;
protected BasicEList<EReference> eAllReferences;
protected BasicEList<EStructuralFeature> eAllStructuralFeatures;
protected EStructuralFeature[] eAllStructuralFeaturesData;
protected BasicEList<EReference> eAllContainments;
protected BasicEList<EOperation> eAllOperations;
protected BasicEList<EClass> eAllSuperTypes;
protected BasicEList<EGenericType> eAllGenericSuperTypes;
protected Map<String, EStructuralFeature> eNameToFeatureMap;
protected ESuperAdapter eSuperAdapter;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected EClassImpl()
{
super();
}
@Override
protected void freeze()
{
getEAllAttributes();
getEAllReferences();
getEAllContainments();
getEAllOperations();
getEAllStructuralFeatures();
getEAllSuperTypes();
getEAllGenericSuperTypes();
getESuperAdapter().getSubclasses().clear();
if (eStructuralFeatures != null)
{
for (int i = 0, size = eStructuralFeatures.size(); i < size; ++i)
{
freeze(eStructuralFeatures.get(i));
}
}
if (eOperations != null)
{
for (int i = 0, size = eOperations.size(); i < size; ++i)
{
freeze(eOperations.get(i));
}
}
super.freeze();
}
@Override
public boolean isFrozen()
{
return super.isFrozen();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass()
{
return EcorePackage.Literals.ECLASS;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public EAttribute getEIDAttribute()
{
getEAllAttributes();
return eIDAttribute;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<EStructuralFeature> getEStructuralFeatures()
{
if (eStructuralFeatures == null)
{
eStructuralFeatures = new EObjectContainmentWithInverseEList<EStructuralFeature>(EStructuralFeature.class, this, EcorePackage.ECLASS__ESTRUCTURAL_FEATURES, EcorePackage.ESTRUCTURAL_FEATURE__ECONTAINING_CLASS);
}
return eStructuralFeatures;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public EList<EGenericType> getEGenericSuperTypes()
{
if (eGenericSuperTypes == null)
{
getESuperAdapter();
eGenericSuperTypes =
new EObjectContainmentEList.Unsettable<EGenericType>(EGenericType.class, this, EcorePackage.ECLASS__EGENERIC_SUPER_TYPES)
{
private static final long serialVersionUID = 1L;
@Override
public boolean isSet()
{
for (EGenericType eGenericType : this)
{
if (eGenericType.getETypeParameter() != null || !eGenericType.getETypeArguments().isEmpty())
{
return true;
}
}
return false;
}
protected EClass unwrap(EGenericType eGenericType)
{
EClassifier result = eGenericType.getERawType();
if (result instanceof EClass)
{
return (EClass)result;
}
else
{
return EcorePackage.Literals.EOBJECT;
}
}
@Override
protected boolean hasShadow()
{
return true;
}
@Override
protected NotificationChain shadowAdd(EGenericType eGenericType, NotificationChain notifications)
{
ENotificationImpl notification =
new ENotificationImpl
(owner, Notification.ADD, EcorePackage.ECLASS__ESUPER_TYPES, null, unwrap(eGenericType), indexOf(eGenericType), false);
if (notifications == null)
{
notifications = notification;
}
else
{
notifications.add(notification);
}
return notifications;
}
@Override
protected NotificationChain shadowRemove(EGenericType eGenericType, NotificationChain notifications)
{
ENotificationImpl notification =
new ENotificationImpl
(owner, Notification.REMOVE, EcorePackage.ECLASS__ESUPER_TYPES, unwrap(eGenericType), null, indexOf(eGenericType), false);
if (notifications == null)
{
notifications = notification;
}
else
{
notifications.add(notification);
}
return notifications;
}
@Override
protected NotificationChain shadowSet(EGenericType oldEGenericType, EGenericType newEGenericType, NotificationChain notifications)
{
ENotificationImpl notification =
new ENotificationImpl
(owner,
Notification.SET,
EcorePackage.ECLASS__ESUPER_TYPES,
unwrap(oldEGenericType),
unwrap(newEGenericType),
indexOf(oldEGenericType),
false);
if (notifications == null)
{
notifications = notification;
}
else
{
notifications.add(notification);
}
return notifications;
}
@Override
public EGenericType move(int targetIndex, int sourceIndex)
{
EGenericType result = super.move(targetIndex, sourceIndex);
if (isNotificationRequired())
{
dispatchNotification
(new ENotificationImpl
(EClassImpl.this,
Notification.MOVE,
EcorePackage.Literals.ECLASS__ESUPER_TYPES,
new Integer(sourceIndex),
unwrap(result),
targetIndex));
}
return result;
}
@Override
public void unset()
{
// Don't really unset it.
clear();
}
@Override
protected NotificationImpl createNotification(int eventType, Object oldObject, Object newObject, int index, boolean wasSet)
{
switch (eventType)
{
case Notification.ADD:
{
return super.createNotification(eventType, oldObject, newObject, index, size > 1);
}
case Notification.ADD_MANY:
{
return super.createNotification(eventType, oldObject, newObject, index, size - ((List<?>)newObject).size() > 0);
}
default:
{
return super.createNotification(eventType, oldObject, newObject, index, true);
}
}
}
};
getESuperTypes();
}
return eGenericSuperTypes;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void unsetEGenericSuperTypes()
{
if (eGenericSuperTypes != null) ((InternalEList.Unsettable<?>)eGenericSuperTypes).unset();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isSetEGenericSuperTypes()
{
return eGenericSuperTypes != null && ((InternalEList.Unsettable<?>)eGenericSuperTypes).isSet();
}
private static final ThreadLocal<Set<EClass>> COMPUTATION_IN_PROGRESS =
new ThreadLocal<Set<EClass>>()
{
@Override
protected java.util.Set<EClass> initialValue()
{
return new HashSet<EClass>();
}
};
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public EList<EGenericType> getEAllGenericSuperTypes()
{
if (eAllGenericSuperTypes == null)
{
class EGenericSuperTypeEList extends UniqueEList<EGenericType>
{
private static final long serialVersionUID = 1L;
@Override
protected Object [] newData(int capacity)
{
return new EGenericType [capacity];
}
@Override
protected boolean useEquals()
{
return false;
}
public void eliminateEquivalentDuplicates()
{
EGenericType [] eGenericTypes = (EGenericType[])data;
for (int i = size - 1; i >= 0; --i)
{
EGenericType eGenericType = eGenericTypes[i];
for (int j = 0; j < i; ++j)
{
EGenericType otherEGenericType = eGenericTypes[j];
if (equivalent(eGenericType, otherEGenericType))
{
remove(i);
break;
}
}
}
}
public boolean equivalent(EGenericType eGenericType, EGenericType otherEGenericType)
{
if (eGenericType == otherEGenericType)
{
return true;
}
else
{
eGenericType = resolve(eGenericType);
otherEGenericType = resolve(otherEGenericType);
EClassifier eClassifier = eGenericType.getEClassifier();
if (eClassifier != null)
{
EClassifier otherEClassifier = otherEGenericType.getEClassifier();
if (otherEClassifier != eClassifier)
{
String instanceTypeName = eClassifier.getInstanceTypeName();
String otherInstanceTypeName = otherEClassifier.getInstanceTypeName();
return instanceTypeName == otherInstanceTypeName && instanceTypeName != null;
}
else
{
EList<EGenericType> eTypeArguments = eGenericType.getETypeArguments();
int eTypeArgumentSize = eTypeArguments.size();
EList<EGenericType> otherETypeArguments = otherEGenericType.getETypeArguments();
if (eTypeArgumentSize == otherETypeArguments.size())
{
for (int j = 0; j < eTypeArgumentSize; ++j)
{
EGenericType eTypeArgument = eTypeArguments.get(j);
EGenericType otherETypeArgument = otherETypeArguments.get(j);
if (!equivalent(eTypeArgument, otherETypeArgument))
{
return false;
}
}
}
return true;
}
}
else
{
ETypeParameter eTypeParameter = eGenericType.getETypeParameter();
ETypeParameter otherETypeParameter = otherEGenericType.getETypeParameter();
return eTypeParameter == otherETypeParameter;
}
}
}
public EGenericType resolve(EGenericType eGenericType)
{
ETypeParameter eTypeParameter = eGenericType.getETypeParameter();
if (eTypeParameter != null)
{
EObject eContainer = eTypeParameter.eContainer();
EGenericType [] eGenericTypes = (EGenericType[])data;
for (int i = 0; i < size; ++i)
{
EGenericType otherEGenericType = eGenericTypes[i];
if (otherEGenericType.getEClassifier() == eContainer)
{
EList<EGenericType> eTypeArguments = otherEGenericType.getETypeArguments();
int index = ((List<?>)eContainer.eGet(eTypeParameter.eContainmentFeature())).indexOf(eTypeParameter);
if (index < eTypeArguments.size())
{
return resolve(eTypeArguments.get(index));
}
}
}
}
return eGenericType;
}
}
EGenericSuperTypeEList result = new EGenericSuperTypeEList();
Set<EClass> computationInProgress = COMPUTATION_IN_PROGRESS.get();
if (computationInProgress.add(this))
{
for (EGenericType eGenericSuperType : getEGenericSuperTypes())
{
EClassifier eSuperType = eGenericSuperType.getERawType();
if (eSuperType instanceof EClass)
{
result.addAll(((EClass)eSuperType).getEAllGenericSuperTypes());
}
result.add(eGenericSuperType);
}
computationInProgress.remove(this);
}
result.eliminateEquivalentDuplicates();
result.shrink();
eAllGenericSuperTypes =
new EcoreEList.UnmodifiableEList.FastCompare<EGenericType>
(this, EcorePackage.eINSTANCE.getEClass_EAllGenericSuperTypes(), result.size(), result.data());
getESuperAdapter().setAllSuperCollectionModified(false);
}
return eAllGenericSuperTypes;
}
public EList<EAttribute> getEAllAttributes()
{
if (eAllAttributes == null)
{
eIDAttribute = null;
BasicEList<EAttribute> result =
new UniqueEList<EAttribute>()
{
private static final long serialVersionUID = 1L;
@Override
protected Object [] newData(int capacity)
{
return new EAttribute [capacity];
}
@Override
protected boolean useEquals()
{
return false;
}
@Override
protected void didAdd(int index, EAttribute eAttribute)
{
if (eAttribute.isID() && eIDAttribute == null)
{
eIDAttribute = eAttribute;
}
}
};
BasicEList<EAttribute> attributes =
new UniqueEList<EAttribute>()
{
private static final long serialVersionUID = 1L;
@Override
protected Object [] newData(int capacity)
{
return new EAttribute [capacity];
}
@Override
protected boolean useEquals()
{
return false;
}
};
Set<EClass> computationInProgress = COMPUTATION_IN_PROGRESS.get();
if (computationInProgress.add(this))
{
for (EClass eSuperType : getESuperTypes())
{
result.addAll(eSuperType.getEAllAttributes());
}
computationInProgress.remove(this);
}
for (EStructuralFeature eStructuralFeature : getEStructuralFeatures())
{
if (eStructuralFeature instanceof EAttribute)
{
attributes.add((EAttribute)eStructuralFeature);
}
}
attributes.shrink();
eAttributes =
new EcoreEList.UnmodifiableEList.FastCompare<EAttribute>
(this, EcorePackage.eINSTANCE.getEClass_EAttributes(), attributes.size(), attributes.data())
{
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
@Override
public void addUnique(EAttribute object)
{
((InternalEList<EAttribute>)(InternalEList<?>)getEStructuralFeatures()).addUnique(object);
}
@Override
public boolean add(EAttribute object)
{
System.err.println("Please fix your code to add using EClass.getEStructuralFeatures() instead of EClass.getEAttributes()");
return getEStructuralFeatures().add(object);
}
};
result.addAll(eAttributes);
result.shrink();
eAllAttributes =
new EcoreEList.UnmodifiableEList.FastCompare<EAttribute>
(this, EcorePackage.eINSTANCE.getEClass_EAllAttributes(), result.size(), result.data());
getESuperAdapter().setAllAttributesCollectionModified(false);
}
return eAllAttributes;
}
public EList<EReference> getEAllReferences()
{
if (eAllReferences == null)
{
class ReferenceList extends UniqueEList<EReference>
{
private static final long serialVersionUID = 1L;
public ReferenceList()
{
super();
}
@Override
protected Object [] newData(int capacity)
{
return new EReference [capacity];
}
@Override
protected boolean useEquals()
{
return false;
}
}
BasicEList<EReference> result = new ReferenceList();
BasicEList<EReference> references = new ReferenceList();
Set<EClass> computationInProgress = COMPUTATION_IN_PROGRESS.get();
if (computationInProgress.add(this))
{
for (EClass eSuperType : getESuperTypes())
{
result.addAll(eSuperType.getEAllReferences());
}
computationInProgress.remove(this);
}
for (EStructuralFeature eStructuralFeature : getEStructuralFeatures())
{
if (eStructuralFeature instanceof EReference)
{
references.add((EReference)eStructuralFeature);
}
}
references.shrink();
eReferences =
new EcoreEList.UnmodifiableEList.FastCompare<EReference>
(this, EcorePackage.eINSTANCE.getEClass_EReferences(), references.size(), references.data())
{
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
@Override
public void addUnique(EReference object)
{
((InternalEList<EReference>)(InternalEList<?>)getEStructuralFeatures()).addUnique(object);
}
@Override
public boolean add(EReference object)
{
System.err.println("Please fix your code to add using EClass.getEStructuralFeatures() instead of EClass.getEReferences()");
return getEStructuralFeatures().add(object);
}
};
result.addAll(eReferences);
result.shrink();
eAllReferences =
new EcoreEList.UnmodifiableEList.FastCompare<EReference>
(this, EcorePackage.eINSTANCE.getEClass_EAllReferences(), result.size(), result.data());
getESuperAdapter().setAllReferencesCollectionModified(false);
}
return eAllReferences;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public EList<EReference> getEReferences()
{
getEAllReferences();
return eReferences;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public EList<EAttribute> getEAttributes()
{
getEAllAttributes();
return eAttributes;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated modifiable
*/
public EList<EStructuralFeature> getEAllStructuralFeatures()
{
// The algorithm for the order of the features in this list should never change.
// Also, the fact that a new list is created whenever the contents change
// is something else that should never change.
// There are clients who rely on both these behaviors,
// and they will need to agree to any change,
// so that they can adjust their own code.
//
if (eAllStructuralFeatures == null)
{
class EStructuralFeatureUniqueEList extends UniqueEList<EStructuralFeature>
{
private static final long serialVersionUID = 1L;
@Override
protected Object [] newData(int capacity)
{
return new EStructuralFeature [capacity];
}
@Override
protected boolean useEquals()
{
return false;
}
}
BasicEList<EStructuralFeature> result = new EStructuralFeatureUniqueEList();
Set<EClass> computationInProgress = COMPUTATION_IN_PROGRESS.get();
if (computationInProgress.add(this))
{
for (EClass eSuperType : getESuperTypes())
{
result.addAll(eSuperType.getEAllStructuralFeatures());
}
computationInProgress.remove(this);
}
int featureID = result.size();
for (Iterator<EStructuralFeature> i = getEStructuralFeatures().iterator(); i.hasNext(); ++featureID)
{
((EStructuralFeatureImpl)i.next()).setFeatureID(featureID);
}
result.addAll(getEStructuralFeatures());
class EAllStructuralFeaturesList extends EcoreEList.UnmodifiableEList.FastCompare<EStructuralFeature> implements FeatureSubsetSupplier
{
private static final long serialVersionUID = 1L;
protected EStructuralFeature [] containments;
protected EStructuralFeature [] crossReferences;
public EAllStructuralFeaturesList(BasicEList<EStructuralFeature> eAllStructuralFeatures)
{
super
(EClassImpl.this,
EcorePackage.eINSTANCE.getEClass_EAllStructuralFeatures(),
eAllStructuralFeatures.size(),
eAllStructuralFeatures.data()) ;
BasicEList<EStructuralFeature> containmentsList = new EStructuralFeatureUniqueEList();
BasicEList<EStructuralFeature> crossReferencesList = new EStructuralFeatureUniqueEList();
boolean isMixed = "mixed".equals(EcoreUtil.getAnnotation(EClassImpl.this, ExtendedMetaData.ANNOTATION_URI, "kind"));
for (int i = 0; i < size; ++i)
{
// Skip derived features.
//
EStructuralFeature eStructuralFeature = (EStructuralFeature)data[i];
if (eStructuralFeature instanceof EReference)
{
EReference eReference = (EReference)eStructuralFeature;
if (eReference.isContainment())
{
if (!eReference.isDerived())
{
containmentsList.add(eReference);
}
}
else if (!eReference.isContainer())
{
// Include derived relations only if they won't also come from mixed or a group.
//
if (!eReference.isDerived() ||
!isMixed && EcoreUtil.getAnnotation(eReference, ExtendedMetaData.ANNOTATION_URI, "group") == null)
{
crossReferencesList.add(eReference);
}
}
}
else if (FeatureMapUtil.isFeatureMap(eStructuralFeature))
{
if (!eStructuralFeature.isDerived())
{
containmentsList.add(eStructuralFeature);
crossReferencesList.add(eStructuralFeature);
}
}
}
containmentsList.shrink();
crossReferencesList.shrink();
containments = (EStructuralFeature [])containmentsList.data();
crossReferences = (EStructuralFeature [])crossReferencesList.data();
}
public EStructuralFeature [] containments()
{
return containments;
}
public EStructuralFeature [] crossReferences()
{
return crossReferences;
}
public EStructuralFeature [] features()
{
return (EStructuralFeature [])data;
}
@Override
public int indexOf(Object object)
{
if (object instanceof EStructuralFeature)
{
EStructuralFeature eStructuralFeature = (EStructuralFeature)object;
int index = eStructuralFeature.getFeatureID();
if (index != -1)
{
for (int last = this.size; index < last; ++index)
{
if (data[index] == object)
{
return index;
}
}
}
}
return -1;
}
}
result.shrink();
eAllStructuralFeatures = new EAllStructuralFeaturesList(result);
eAllStructuralFeaturesData = (EStructuralFeature[])result.data();
if (eAllStructuralFeaturesData == null)
{
eAllStructuralFeaturesData = NO_EALL_STRUCTURE_FEATURES_DATA;
}
eNameToFeatureMap = null;
getESuperAdapter().setAllStructuralFeaturesCollectionModified(false);
}
return eAllStructuralFeatures;
}
private static final EStructuralFeature[] NO_EALL_STRUCTURE_FEATURES_DATA = {};
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated modifiable
*/
public EList<EOperation> getEAllOperations()
{
if (eAllOperations == null)
{
BasicEList<EOperation> result =
new UniqueEList<EOperation>()
{
private static final long serialVersionUID = 1L;
@Override
protected Object [] newData(int capacity)
{
return new EOperation [capacity];
}
@Override
protected boolean useEquals()
{
return false;
}
};
Set<EClass> computationInProgress = COMPUTATION_IN_PROGRESS.get();
if (computationInProgress.add(this))
{
for (EClass eSuperType : getESuperTypes())
{
result.addAll(eSuperType.getEAllOperations());
}
computationInProgress.remove(this);
}
result.addAll(getEOperations());
result.shrink();
eAllOperations =
new EcoreEList.UnmodifiableEList.FastCompare<EOperation>
(this, EcorePackage.eINSTANCE.getEClass_EAllOperations(), result.size(), result.data());
getESuperAdapter().setAllOperationsCollectionModified(false);
}
return eAllOperations;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType)
{
switch (featureID)
{
case EcorePackage.ECLASS__EANNOTATIONS:
return getEAnnotations();
case EcorePackage.ECLASS__NAME:
return getName();
case EcorePackage.ECLASS__INSTANCE_CLASS_NAME:
return getInstanceClassName();
case EcorePackage.ECLASS__INSTANCE_CLASS:
return getInstanceClass();
case EcorePackage.ECLASS__DEFAULT_VALUE:
return getDefaultValue();
case EcorePackage.ECLASS__INSTANCE_TYPE_NAME:
return getInstanceTypeName();
case EcorePackage.ECLASS__EPACKAGE:
if (resolve) return getEPackage();
return basicGetEPackage();
case EcorePackage.ECLASS__ETYPE_PARAMETERS:
return getETypeParameters();
case EcorePackage.ECLASS__ABSTRACT:
return isAbstract() ? Boolean.TRUE : Boolean.FALSE;
case EcorePackage.ECLASS__INTERFACE:
return isInterface() ? Boolean.TRUE : Boolean.FALSE;
case EcorePackage.ECLASS__ESUPER_TYPES:
return getESuperTypes();
case EcorePackage.ECLASS__EOPERATIONS:
return getEOperations();
case EcorePackage.ECLASS__EALL_ATTRIBUTES:
return getEAllAttributes();
case EcorePackage.ECLASS__EALL_REFERENCES:
return getEAllReferences();
case EcorePackage.ECLASS__EREFERENCES:
return getEReferences();
case EcorePackage.ECLASS__EATTRIBUTES:
return getEAttributes();
case EcorePackage.ECLASS__EALL_CONTAINMENTS:
return getEAllContainments();
case EcorePackage.ECLASS__EALL_OPERATIONS:
return getEAllOperations();
case EcorePackage.ECLASS__EALL_STRUCTURAL_FEATURES:
return getEAllStructuralFeatures();
case EcorePackage.ECLASS__EALL_SUPER_TYPES:
return getEAllSuperTypes();
case EcorePackage.ECLASS__EID_ATTRIBUTE:
return getEIDAttribute();
case EcorePackage.ECLASS__ESTRUCTURAL_FEATURES:
return getEStructuralFeatures();
case EcorePackage.ECLASS__EGENERIC_SUPER_TYPES:
return getEGenericSuperTypes();
case EcorePackage.ECLASS__EALL_GENERIC_SUPER_TYPES:
return getEAllGenericSuperTypes();
}
return eDynamicGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public void eSet(int featureID, Object newValue)
{
switch (featureID)
{
case EcorePackage.ECLASS__EANNOTATIONS:
getEAnnotations().clear();
getEAnnotations().addAll((Collection<? extends EAnnotation>)newValue);
return;
case EcorePackage.ECLASS__NAME:
setName((String)newValue);
return;
case EcorePackage.ECLASS__INSTANCE_CLASS_NAME:
setInstanceClassName((String)newValue);
return;
case EcorePackage.ECLASS__INSTANCE_TYPE_NAME:
setInstanceTypeName((String)newValue);
return;
case EcorePackage.ECLASS__ETYPE_PARAMETERS:
getETypeParameters().clear();
getETypeParameters().addAll((Collection<? extends ETypeParameter>)newValue);
return;
case EcorePackage.ECLASS__ABSTRACT:
setAbstract(((Boolean)newValue).booleanValue());
return;
case EcorePackage.ECLASS__INTERFACE:
setInterface(((Boolean)newValue).booleanValue());
return;
case EcorePackage.ECLASS__ESUPER_TYPES:
getESuperTypes().clear();
getESuperTypes().addAll((Collection<? extends EClass>)newValue);
return;
case EcorePackage.ECLASS__EOPERATIONS:
getEOperations().clear();
getEOperations().addAll((Collection<? extends EOperation>)newValue);
return;
case EcorePackage.ECLASS__ESTRUCTURAL_FEATURES:
getEStructuralFeatures().clear();
getEStructuralFeatures().addAll((Collection<? extends EStructuralFeature>)newValue);
return;
case EcorePackage.ECLASS__EGENERIC_SUPER_TYPES:
getEGenericSuperTypes().clear();
getEGenericSuperTypes().addAll((Collection<? extends EGenericType>)newValue);
return;
}
eDynamicSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID)
{
switch (featureID)
{
case EcorePackage.ECLASS__EANNOTATIONS:
getEAnnotations().clear();
return;
case EcorePackage.ECLASS__NAME:
setName(NAME_EDEFAULT);
return;
case EcorePackage.ECLASS__INSTANCE_CLASS_NAME:
unsetInstanceClassName();
return;
case EcorePackage.ECLASS__INSTANCE_TYPE_NAME:
unsetInstanceTypeName();
return;
case EcorePackage.ECLASS__ETYPE_PARAMETERS:
getETypeParameters().clear();
return;
case EcorePackage.ECLASS__ABSTRACT:
setAbstract(ABSTRACT_EDEFAULT);
return;
case EcorePackage.ECLASS__INTERFACE:
setInterface(INTERFACE_EDEFAULT);
return;
case EcorePackage.ECLASS__ESUPER_TYPES:
unsetESuperTypes();
return;
case EcorePackage.ECLASS__EOPERATIONS:
getEOperations().clear();
return;
case EcorePackage.ECLASS__ESTRUCTURAL_FEATURES:
getEStructuralFeatures().clear();
return;
case EcorePackage.ECLASS__EGENERIC_SUPER_TYPES:
unsetEGenericSuperTypes();
return;
}
eDynamicUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID)
{
switch (featureID)
{
case EcorePackage.ECLASS__EANNOTATIONS:
return eAnnotations != null && !eAnnotations.isEmpty();
case EcorePackage.ECLASS__NAME:
return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
case EcorePackage.ECLASS__INSTANCE_CLASS_NAME:
return isSetInstanceClassName();
case EcorePackage.ECLASS__INSTANCE_CLASS:
return getInstanceClass() != null;
case EcorePackage.ECLASS__DEFAULT_VALUE:
return DEFAULT_VALUE_EDEFAULT == null ? getDefaultValue() != null : !DEFAULT_VALUE_EDEFAULT.equals(getDefaultValue());
case EcorePackage.ECLASS__INSTANCE_TYPE_NAME:
return isSetInstanceTypeName();
case EcorePackage.ECLASS__EPACKAGE:
return basicGetEPackage() != null;
case EcorePackage.ECLASS__ETYPE_PARAMETERS:
return eTypeParameters != null && !eTypeParameters.isEmpty();
case EcorePackage.ECLASS__ABSTRACT:
return ((eFlags & ABSTRACT_EFLAG) != 0) != ABSTRACT_EDEFAULT;
case EcorePackage.ECLASS__INTERFACE:
return ((eFlags & INTERFACE_EFLAG) != 0) != INTERFACE_EDEFAULT;
case EcorePackage.ECLASS__ESUPER_TYPES:
return isSetESuperTypes();
case EcorePackage.ECLASS__EOPERATIONS:
return eOperations != null && !eOperations.isEmpty();
case EcorePackage.ECLASS__EALL_ATTRIBUTES:
return !getEAllAttributes().isEmpty();
case EcorePackage.ECLASS__EALL_REFERENCES:
return !getEAllReferences().isEmpty();
case EcorePackage.ECLASS__EREFERENCES:
return !getEReferences().isEmpty();
case EcorePackage.ECLASS__EATTRIBUTES:
return !getEAttributes().isEmpty();
case EcorePackage.ECLASS__EALL_CONTAINMENTS:
return !getEAllContainments().isEmpty();
case EcorePackage.ECLASS__EALL_OPERATIONS:
return !getEAllOperations().isEmpty();
case EcorePackage.ECLASS__EALL_STRUCTURAL_FEATURES:
return !getEAllStructuralFeatures().isEmpty();
case EcorePackage.ECLASS__EALL_SUPER_TYPES:
return !getEAllSuperTypes().isEmpty();
case EcorePackage.ECLASS__EID_ATTRIBUTE:
return getEIDAttribute() != null;
case EcorePackage.ECLASS__ESTRUCTURAL_FEATURES:
return eStructuralFeatures != null && !eStructuralFeatures.isEmpty();
case EcorePackage.ECLASS__EGENERIC_SUPER_TYPES:
return isSetEGenericSuperTypes();
case EcorePackage.ECLASS__EALL_GENERIC_SUPER_TYPES:
return !getEAllGenericSuperTypes().isEmpty();
}
return eDynamicIsSet(featureID);
}
public EList<EReference> getEAllContainments()
{
if (eAllContainments == null)
{
BasicEList<EReference> result =
new UniqueEList<EReference>()
{
private static final long serialVersionUID = 1L;
@Override
protected Object [] newData(int capacity)
{
return new EReference [capacity];
}
@Override
protected boolean useEquals()
{
return false;
}
};
for (EReference eReference : getEAllReferences())
{
if (eReference.isContainment())
{
result.add(eReference);
}
}
result.shrink();
eAllContainments =
new EcoreEList.UnmodifiableEList.FastCompare<EReference>
(this, EcorePackage.eINSTANCE.getEClass_EAllContainments(), result.size(), result.data());
getESuperAdapter().setAllContainmentsCollectionModified(false);
}
return eAllContainments;
}
public EStructuralFeature getEStructuralFeature(String name)
{
getFeatureCount();
if (eNameToFeatureMap == null)
{
Map<String, EStructuralFeature> result = new HashMap<String, EStructuralFeature>(3 * eAllStructuralFeatures.size() / 2 + 1);
for (EStructuralFeature eStructuralFeature : eAllStructuralFeatures)
{
result.put(eStructuralFeature.getName(), eStructuralFeature);
}
eNameToFeatureMap = result;
}
return eNameToFeatureMap.get(name);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
{
switch (featureID)
{
case EcorePackage.ECLASS__EANNOTATIONS:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getEAnnotations()).basicAdd(otherEnd, msgs);
case EcorePackage.ECLASS__EPACKAGE:
if (eInternalContainer() != null)
msgs = eBasicRemoveFromContainer(msgs);
return eBasicSetContainer(otherEnd, EcorePackage.ECLASS__EPACKAGE, msgs);
case EcorePackage.ECLASS__EOPERATIONS:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getEOperations()).basicAdd(otherEnd, msgs);
case EcorePackage.ECLASS__ESTRUCTURAL_FEATURES:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getEStructuralFeatures()).basicAdd(otherEnd, msgs);
}
return eDynamicInverseAdd(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
{
switch (featureID)
{
case EcorePackage.ECLASS__EANNOTATIONS:
return ((InternalEList<?>)getEAnnotations()).basicRemove(otherEnd, msgs);
case EcorePackage.ECLASS__EPACKAGE:
return eBasicSetContainer(null, EcorePackage.ECLASS__EPACKAGE, msgs);
case EcorePackage.ECLASS__ETYPE_PARAMETERS:
return ((InternalEList<?>)getETypeParameters()).basicRemove(otherEnd, msgs);
case EcorePackage.ECLASS__EOPERATIONS:
return ((InternalEList<?>)getEOperations()).basicRemove(otherEnd, msgs);
case EcorePackage.ECLASS__ESTRUCTURAL_FEATURES:
return ((InternalEList<?>)getEStructuralFeatures()).basicRemove(otherEnd, msgs);
case EcorePackage.ECLASS__EGENERIC_SUPER_TYPES:
return ((InternalEList<?>)getEGenericSuperTypes()).basicRemove(otherEnd, msgs);
}
return eDynamicInverseRemove(otherEnd, featureID, msgs);
}
protected EStructuralFeature[] getEAllStructuralFeaturesData()
{
if (eAllStructuralFeaturesData == null)
{
getEAllStructuralFeatures();
}
return eAllStructuralFeaturesData;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public int getFeatureCount()
{
return getEAllStructuralFeaturesData().length;
}
public EStructuralFeature getEStructuralFeature(int featureID)
{
EStructuralFeature [] eAllStructuralFeaturesData = getEAllStructuralFeaturesData();
return
featureID >= 0 && featureID < eAllStructuralFeaturesData.length ?
eAllStructuralFeaturesData[featureID] :
null;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public int getFeatureID(EStructuralFeature feature)
{
EStructuralFeature [] eAllStructuralFeaturesData = getEAllStructuralFeaturesData();
int index = feature.getFeatureID();
if (index != -1)
{
for (int last = eAllStructuralFeaturesData.length; index < last; ++index)
{
if (eAllStructuralFeaturesData[index] == feature)
{
return index;
}
}
}
return -1;
}
/**
* The default value of the '{@link #isAbstract() <em>Abstract</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isAbstract()
* @generated
* @ordered
*/
protected static final boolean ABSTRACT_EDEFAULT = false;
/**
* The flag representing the value of the '{@link #isAbstract() <em>Abstract</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isAbstract()
* @generated
* @ordered
*/
protected static final int ABSTRACT_EFLAG = 1 << 8;
/**
* The default value of the '{@link #isInterface() <em>Interface</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isInterface()
* @generated
* @ordered
*/
protected static final boolean INTERFACE_EDEFAULT = false;
/**
* The flag representing the value of the '{@link #isInterface() <em>Interface</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isInterface()
* @generated
* @ordered
*/
protected static final int INTERFACE_EFLAG = 1 << 9;
/**
* The cached value of the '{@link #getESuperTypes() <em>ESuper Types</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getESuperTypes()
* @generated
* @ordered
*/
protected EList<EClass> eSuperTypes;
/**
* The cached value of the '{@link #getEOperations() <em>EOperations</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getEOperations()
* @generated
* @ordered
*/
protected EList<EOperation> eOperations;
/**
* The cached value of the '{@link #getEReferences() <em>EReferences</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getEReferences()
* @generated NOT
* @ordered
*/
protected BasicEList<EReference> eReferences = null;
/**
* The cached value of the '{@link #getEAttributes() <em>EAttributes</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getEAttributes()
* @generated NOT
* @ordered
*/
protected BasicEList<EAttribute> eAttributes = null;
/**
* The cached value of the '{@link #getEStructuralFeatures() <em>EStructural Features</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getEStructuralFeatures()
* @generated
* @ordered
*/
protected EList<EStructuralFeature> eStructuralFeatures;
/**
* The cached value of the '{@link #getEGenericSuperTypes() <em>EGeneric Super Types</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getEGenericSuperTypes()
* @generated
* @ordered
*/
protected EList<EGenericType> eGenericSuperTypes;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isAbstract()
{
return (eFlags & ABSTRACT_EFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setAbstract(boolean newAbstract)
{
boolean oldAbstract = (eFlags & ABSTRACT_EFLAG) != 0;
if (newAbstract) eFlags |= ABSTRACT_EFLAG; else eFlags &= ~ABSTRACT_EFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, EcorePackage.ECLASS__ABSTRACT, oldAbstract, newAbstract));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isInterface()
{
return (eFlags & INTERFACE_EFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setInterface(boolean newInterface)
{
boolean oldInterface = (eFlags & INTERFACE_EFLAG) != 0;
if (newInterface) eFlags |= INTERFACE_EFLAG; else eFlags &= ~INTERFACE_EFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, EcorePackage.ECLASS__INTERFACE, oldInterface, newInterface));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String toString()
{
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (abstract: ");
result.append((eFlags & ABSTRACT_EFLAG) != 0);
result.append(", interface: ");
result.append((eFlags & INTERFACE_EFLAG) != 0);
result.append(')');
return result.toString();
}
public EList<EClass> getESuperTypes()
{
if (eSuperTypes == null)
{
getESuperAdapter();
eSuperTypes =
new DelegatingEcoreEList<EClass>(this)
{
private static final long serialVersionUID = 1L;
@Override
protected List<EClass> delegateList()
{
return null;
}
@Override
protected List<EClass> delegateBasicList()
{
return
new AbstractSequentialList<EClass>()
{
@Override
public ListIterator<EClass> listIterator(int index)
{
return basicListIterator();
}
@Override
public int size()
{
return delegateSize();
}
};
}
@Override
protected Iterator<EClass> delegateIterator()
{
return iterator();
}
@Override
protected ListIterator<EClass> delegateListIterator()
{
return listIterator();
}
protected EGenericType wrap(EClass eClass)
{
EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
eGenericType.setEClassifier(eClass);
return eGenericType;
}
protected EClass unwrap(EGenericType eGenericType)
{
EClassifier result = ((EGenericTypeImpl)eGenericType).basicGetERawType();
if (result instanceof EClass)
{
return (EClass)result;
}
else
{
return EcorePackage.Literals.EOBJECT;
}
}
@Override
protected void delegateAdd(int index, EClass eClass)
{
getEGenericSuperTypes().add(index, wrap(eClass));
}
@Override
protected void delegateClear()
{
getEGenericSuperTypes().clear();
}
@Override
protected void delegateAdd(EClass eClass)
{
getEGenericSuperTypes().add(wrap(eClass));
}
@Override
protected boolean delegateContains(Object object)
{
for (EClass eClass : this)
{
if (object == eClass)
{
return true;
}
}
return false;
}
@Override
protected boolean delegateContainsAll(Collection<?> collection)
{
for (Object object : collection)
{
if (!delegateContains(object))
{
return false;
}
}
return true;
}
@Override
protected boolean delegateEquals(Object object)
{
if (object instanceof List)
{
List<?> list = (List<?>)object;
if (list.size() == delegateSize())
{
for (Iterator<?> i = list.iterator(), j = iterator(); i.hasNext(); )
{
if (i.next() != j.next())
{
return false;
}
}
return true;
}
}
return false;
}
@Override
protected EClass delegateGet(int index)
{
EGenericType eGenericType = getEGenericSuperTypes().get(index);
return unwrap(eGenericType);
}
@Override
protected int delegateHashCode()
{
int hashCode = 1;
for (EGenericType eGenericType : getEGenericSuperTypes())
{
Object object = unwrap(eGenericType);
hashCode = 31 * hashCode + (object == null ? 0 : object.hashCode());
}
return hashCode;
}
@Override
protected int delegateIndexOf(Object object)
{
int index = 0;
for (EGenericType eGenericType : getEGenericSuperTypes())
{
if (object == unwrap(eGenericType))
{
return index;
}
++index;
}
return -1;
}
@Override
protected boolean delegateIsEmpty()
{
return getEGenericSuperTypes().isEmpty();
}
@Override
protected int delegateLastIndexOf(Object object)
{
EList<EGenericType> eGenericSuperTypes = getEGenericSuperTypes();
for (int i = eGenericSuperTypes.size() - 1; i >= 0; --i)
{
if (unwrap(eGenericSuperTypes.get(i)) == object)
{
return i;
}
}
return -1;
}
@Override
protected EClass delegateRemove(int index)
{
EGenericType eGenericType = getEGenericSuperTypes().remove(index);
return unwrap(eGenericType);
}
@Override
protected EClass delegateSet(int index, EClass eClass)
{
EGenericType eGenericType = getEGenericSuperTypes().get(index);
EClass result = unwrap(eGenericType);
// If this is just a proxy being resolved...
//
if (resolveProxy(result) == eClass)
{
// Force the raw type to be resolved so we don't resolve this endlessly.
//
eGenericType.getERawType();
}
else
{
// Update the classifier and hence the raw type as normal.
//
eGenericType.setEClassifier(eClass);
}
return result;
}
@Override
protected int delegateSize()
{
return getEGenericSuperTypes().size();
}
@Override
protected Object[] delegateToArray()
{
int size = delegateSize();
Object[] result = new Object[size];
int index = 0;
for (EGenericType eGenericType : getEGenericSuperTypes())
{
result[index++] = unwrap(eGenericType);
}
return result;
}
@Override
protected <T> T[] delegateToArray(T[] array)
{
int size = delegateSize();
if (array.length < size)
{
@SuppressWarnings("unchecked") T[] newArray = (T[])Array.newInstance(array.getClass().getComponentType(), size);
array = newArray;
}
if (array.length > size)
{
array[size] = null;
}
int index = 0;
for (EGenericType eGenericType : getEGenericSuperTypes())
{
@SuppressWarnings("unchecked") T rawType = (T)unwrap(eGenericType);
array[index++] = rawType;
}
return array;
}
@Override
protected String delegateToString()
{
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("[");
EList<EGenericType> eGenericSuperTypes = getEGenericSuperTypes();
for (int i = 0, size = delegateSize(); i < size; )
{
stringBuffer.append(String.valueOf(unwrap(eGenericSuperTypes.get(i))));
if (++i < size)
{
stringBuffer.append(", ");
}
}
stringBuffer.append("]");
return stringBuffer.toString();
}
@Override
protected boolean isInstance(Object object)
{
return object instanceof EClass;
}
@Override
public int getFeatureID()
{
return EcorePackage.ECLASS__ESUPER_TYPES;
}
@Override
protected boolean useEquals()
{
return true;
}
@Override
protected boolean canContainNull()
{
return false;
}
@Override
protected boolean isUnique()
{
return true;
}
@Override
protected boolean hasInverse()
{
return false;
}
@Override
protected boolean hasManyInverse()
{
return false;
}
@Override
protected boolean hasNavigableInverse()
{
return false;
}
@Override
protected boolean isEObject()
{
return true;
}
@Override
protected boolean isContainment()
{
return false;
}
@Override
protected boolean hasProxies()
{
return true;
}
@Override
protected boolean hasInstanceClass()
{
return true;
}
@Override
public boolean isSet()
{
return isSetESuperTypes();
}
@Override
protected NotificationImpl createNotification(int eventType, Object oldObject, Object newObject, int index, boolean wasSet)
{
// The notification for this list is being thrown by the
// delegating list
//
return null;
}
@Override
protected void dispatchNotification(Notification notification)
{
// Do nothing
}
};
}
return eSuperTypes;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void unsetESuperTypes()
{
if (eSuperTypes != null) ((InternalEList.Unsettable<?>)eSuperTypes).unset();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean isSetESuperTypes()
{
return eSuperTypes != null && !eSuperTypes.isEmpty() && !isSetEGenericSuperTypes();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<EOperation> getEOperations()
{
if (eOperations == null)
{
eOperations = new EObjectContainmentWithInverseEList<EOperation>(EOperation.class, this, EcorePackage.ECLASS__EOPERATIONS, EcorePackage.EOPERATION__ECONTAINING_CLASS);
}
return eOperations;
}
/**
* Determines if the class or interface represented by this Class object is either
* the same as, or is a super class or super interface of, the class or interface
* represented by the specified someClass parameter. Semantics are the same as
* java.lang.Class#isAssignableFrom
*/
public boolean isSuperTypeOf(EClass someClass)
{
return someClass == this || someClass.getEAllSuperTypes().contains(this);
}
/**
* Returns all the supe rtypes in the hierarchy.
*/
public EList<EClass> getEAllSuperTypes()
{
if (eAllSuperTypes == null)
{
BasicEList<EClass> result =
new UniqueEList<EClass>()
{
private static final long serialVersionUID = 1L;
@Override
protected Object [] newData(int capacity)
{
return new EClassifier [capacity];
}
@Override
protected boolean useEquals()
{
return false;
}
};
Set<EClass> computationInProgress = COMPUTATION_IN_PROGRESS.get();
if (computationInProgress.add(this))
{
for (EClass eSuperType : getESuperTypes())
{
EList<EClass> higherSupers = eSuperType.getEAllSuperTypes();
result.addAll(higherSupers);
result.add(eSuperType);
}
computationInProgress.remove(this);
}
result.shrink();
eAllSuperTypes =
new EcoreEList.UnmodifiableEList.FastCompare<EClass>
(this, EcorePackage.eINSTANCE.getEClass_EAllSuperTypes(), result.size(), result.data());
getESuperAdapter().setAllSuperCollectionModified(false);
}
return eAllSuperTypes;
}
@Override
protected boolean dynamicIsInstance(EObject eObject)
{
return isSuperTypeOf(eObject.eClass());
}
public ESuperAdapter getESuperAdapter()
{
if (eSuperAdapter == null)
{
eSuperAdapter =
new ESuperAdapter()
{
@Override
void setFlags(int featureId)
{
super.setFlags(featureId);
if (isAllAttributesCollectionModified())
{
eAllAttributes = null;
}
if (isAllReferencesCollectionModified())
{
eAllReferences = null;
}
if (isAllStructuralFeaturesCollectionModified())
{
eAllStructuralFeatures = null;
eAllStructuralFeaturesData = null;
}
if (isAllOperationsCollectionModified())
{
eAllOperations = null;
}
if (isAllContainmentsCollectionModified())
{
eAllContainments = null;
}
if (isAllSuperCollectionModified())
{
eAllSuperTypes = null;
eAllGenericSuperTypes = null;
}
}
};
eAdapters().add(0, eSuperAdapter);
}
return eSuperAdapter;
}
@Override
public void eSetDeliver(boolean deliver)
{
super.eSetDeliver(deliver);
if (deliver)
{
for (EClass eSuperType : getESuperTypes())
{
ESuperAdapter eSuperAdapter = ((ESuperAdapter.Holder)eSuperType).getESuperAdapter();
eSuperAdapter.getSubclasses().add(this);
}
}
}
@Override
public EObject eObjectForURIFragmentSegment(String uriFragmentSegment)
{
EObject result = eAllStructuralFeaturesData == null || eOperations != null && !eOperations.isEmpty() ? null : getEStructuralFeature(uriFragmentSegment);
return result != null ? result : super.eObjectForURIFragmentSegment(uriFragmentSegment);
}
}