[87260] Taking advantage of InternalEObject, EStructuralFeature.Internal APIs.
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedEObjectEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedEObjectEList.java
index 36d5585..e5fe2c5 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedEObjectEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedEObjectEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: DerivedEObjectEList.java,v 1.5 2006/01/30 13:23:16 khussey Exp $
+ * $Id: DerivedEObjectEList.java,v 1.6 2006/02/15 16:36:16 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -27,7 +27,6 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.BasicEObjectImpl;
 import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.util.FeatureMapUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
@@ -127,11 +126,10 @@
 				while (featureIndex < sourceFeatureIDs.length) {
 					int sourceFeatureID = sourceFeatureIDs[featureIndex++];
 
-					// TODO remove casts to BasicEObjectImpl
-					if (((BasicEObjectImpl) owner).eIsSet(sourceFeatureID)) {
+					if (owner.eIsSet(sourceFeatureID)) {
 						EStructuralFeature sourceFeature = getEStructuralFeature(sourceFeatureID);
-						Object value = ((BasicEObjectImpl) owner).eGet(
-							sourceFeatureID, resolve(), true);
+						Object value = owner.eGet(sourceFeatureID, resolve(),
+							true);
 
 						if (sourceFeature.isMany()
 							|| FeatureMapUtil.isFeatureMap(sourceFeature)) {
@@ -266,11 +264,10 @@
 				while (featureIndex > 0) {
 					int sourceFeatureID = sourceFeatureIDs[--featureIndex];
 
-					// TODO remove casts to BasicEObjectImpl
-					if (((BasicEObjectImpl) owner).eIsSet(sourceFeatureID)) {
+					if (owner.eIsSet(sourceFeatureID)) {
 						EStructuralFeature sourceFeature = getEStructuralFeature(sourceFeatureID);
-						Object value = ((BasicEObjectImpl) owner).eGet(
-							sourceFeatureID, resolve(), true);
+						Object value = owner.eGet(sourceFeatureID, resolve(),
+							true);
 
 						if (sourceFeature.isMany()
 							|| FeatureMapUtil.isFeatureMap(sourceFeature)) {
@@ -449,11 +446,9 @@
 			for (int i = 0; i < sourceFeatureIDs.length; i++) {
 				int sourceFeatureID = sourceFeatureIDs[i];
 
-				// TODO remove casts to BasicEObjectImpl
-				if (((BasicEObjectImpl) owner).eIsSet(sourceFeatureID)) {
+				if (owner.eIsSet(sourceFeatureID)) {
 					EStructuralFeature sourceFeature = getEStructuralFeature(sourceFeatureID);
-					Object value = ((BasicEObjectImpl) owner).eGet(
-						sourceFeatureID, false, true);
+					Object value = owner.eGet(sourceFeatureID, false, true);
 
 					if (FeatureMapUtil.isFeatureMap(sourceFeature)) {
 						FeatureMap featureMap = (FeatureMap) value;
@@ -535,11 +530,9 @@
 			for (int i = 0; i < sourceFeatureIDs.length; i++) {
 				int sourceFeatureID = sourceFeatureIDs[i];
 
-				// TODO remove casts to BasicEObjectImpl
-				if (((BasicEObjectImpl) owner).eIsSet(sourceFeatureID)) {
+				if (owner.eIsSet(sourceFeatureID)) {
 					EStructuralFeature sourceFeature = getEStructuralFeature(sourceFeatureID);
-					Object value = ((BasicEObjectImpl) owner).eGet(
-						sourceFeatureID, false, true);
+					Object value = owner.eGet(sourceFeatureID, false, true);
 
 					if (FeatureMapUtil.isFeatureMap(sourceFeature)) {
 						FeatureMap featureMap = (FeatureMap) value;
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedSubsetEObjectEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedSubsetEObjectEList.java
index 1c47097..29efa7f 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedSubsetEObjectEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedSubsetEObjectEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: DerivedSubsetEObjectEList.java,v 1.4 2006/01/30 13:23:12 khussey Exp $
+ * $Id: DerivedSubsetEObjectEList.java,v 1.5 2006/02/15 16:36:16 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -19,7 +19,6 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.BasicEObjectImpl;
 import org.eclipse.emf.ecore.util.FeatureMapUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
@@ -91,11 +90,10 @@
 			checkModCount();
 
 			if (values == null) {
-				// TODO remove casts to BasicEObjectImpl
 				List valuesList = resolve()
-					? (List) ((BasicEObjectImpl) owner).eGet(
-						sourceFeatureIDs[featureIndex], resolve(), true)
-					: ((InternalEList) ((BasicEObjectImpl) owner).eGet(
+					? (List) owner.eGet(sourceFeatureIDs[featureIndex],
+						resolve(), true)
+					: ((InternalEList) owner.eGet(
 						sourceFeatureIDs[featureIndex], resolve(), true))
 						.basicList();
 
diff --git a/plugins/org.eclipse.uml2.uml.edit/src/org/eclipse/uml2/uml/edit/providers/UMLItemProviderAdapterFactory.java b/plugins/org.eclipse.uml2.uml.edit/src/org/eclipse/uml2/uml/edit/providers/UMLItemProviderAdapterFactory.java
index 3e69759..944417e 100644
--- a/plugins/org.eclipse.uml2.uml.edit/src/org/eclipse/uml2/uml/edit/providers/UMLItemProviderAdapterFactory.java
+++ b/plugins/org.eclipse.uml2.uml.edit/src/org/eclipse/uml2/uml/edit/providers/UMLItemProviderAdapterFactory.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: UMLItemProviderAdapterFactory.java,v 1.14 2006/01/19 23:06:52 khussey Exp $
+ * $Id: UMLItemProviderAdapterFactory.java,v 1.15 2006/02/15 16:36:29 khussey Exp $
  */
 package org.eclipse.uml2.uml.edit.providers;
 
@@ -23,7 +23,6 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.edit.provider.ChangeNotifier;
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
@@ -107,13 +106,12 @@
 					.eClass().getEAllStructuralFeatures().iterator(); eAllStructuralFeatures
 					.hasNext();) {
 
-					EStructuralFeature eStructuralFeature = (EStructuralFeature) eAllStructuralFeatures
+					EStructuralFeature.Internal eStructuralFeature = (EStructuralFeature.Internal) eAllStructuralFeatures
 						.next();
 					boolean isBaseReference = eStructuralFeature.getName()
 						.startsWith(Extension.METACLASS_ROLE_PREFIX);
 					String[] filterFlags = isBaseReference
-						|| (eStructuralFeature instanceof EReference && ((EReference) eStructuralFeature)
-							.isContainment())
+						|| eStructuralFeature.isContainment()
 						? new String[]{"org.eclipse.ui.views.properties.expert"} //$NON-NLS-1$
 						: null;
 
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
index 3c524ac..a27756c 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: UMLUtil.java,v 1.14 2006/02/08 17:09:15 khussey Exp $
+ * $Id: UMLUtil.java,v 1.15 2006/02/15 16:35:44 khussey Exp $
  */
 package org.eclipse.uml2.uml.util;
 
@@ -3311,11 +3311,10 @@
 					.next();
 
 				if (eModelElement instanceof EStructuralFeature) {
-					EStructuralFeature eStructuralFeature = (EStructuralFeature) eModelElement;
+					EStructuralFeature.Internal eStructuralFeature = (EStructuralFeature.Internal) eModelElement;
 
 					if (eStructuralFeature.isDerived()
-						&& ((eStructuralFeature instanceof EReference && ((EReference) eStructuralFeature)
-							.isContainment())
+						&& (eStructuralFeature.isContainment()
 							|| !eStructuralFeature.isTransient() || !eStructuralFeature
 							.isVolatile())) {
 
@@ -3756,7 +3755,7 @@
 						.getEStructuralFeatures().iterator(); eStructuralFeatures
 						.hasNext();) {
 
-						EStructuralFeature eStructuralFeature = (EStructuralFeature) eStructuralFeatures
+						EStructuralFeature.Internal eStructuralFeature = (EStructuralFeature.Internal) eStructuralFeatures
 							.next();
 
 						for (Iterator eAllStructuralFeatures = eClass
@@ -3849,13 +3848,11 @@
 													eAllStructuralFeature}));
 									}
 
-									if (eStructuralFeature instanceof EReference) {
-										EReference eOpposite = ((EReference) eStructuralFeature)
-											.getEOpposite();
+									EReference eOpposite = eStructuralFeature
+										.getEOpposite();
 
-										if (eOpposite != null) {
-											featuresToRemove.add(eOpposite);
-										}
+									if (eOpposite != null) {
+										featuresToRemove.add(eOpposite);
 									}
 
 									eStructuralFeatures.remove();
@@ -3888,29 +3885,26 @@
 			for (Iterator eStructuralFeatures = featuresToDuplicate.iterator(); eStructuralFeatures
 				.hasNext();) {
 
-				EStructuralFeature eStructuralFeature = (EStructuralFeature) eStructuralFeatures
+				EStructuralFeature.Internal eStructuralFeature = (EStructuralFeature.Internal) eStructuralFeatures
 					.next();
 
 				getEAnnotation(eStructuralFeature.getEContainingClass(),
 					ANNOTATION__DUPLICATES, true).getContents().add(
 					eStructuralFeature);
 
-				if (eStructuralFeature instanceof EReference) {
-					EReference eOpposite = ((EReference) eStructuralFeature)
-						.getEOpposite();
+				EReference eOpposite = eStructuralFeature.getEOpposite();
 
-					if (eOpposite != null
-						&& !featuresToDuplicate.contains(eOpposite)) {
+				if (eOpposite != null
+					&& !featuresToDuplicate.contains(eOpposite)) {
 
-						eOpposite.setEOpposite(null);
+					eOpposite.setEOpposite(null);
 
-						if (((EReference) eStructuralFeature).isContainment()) {
-							eOpposite.setChangeable(false);
-							eOpposite.setTransient(true);
-						}
-
-						eOpposite.setVolatile(true);
+					if (eStructuralFeature.isContainment()) {
+						eOpposite.setChangeable(false);
+						eOpposite.setTransient(true);
 					}
+
+					eOpposite.setVolatile(true);
 				}
 			}