[160679] Adding support for generics to lists, utilities.
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/CacheAdapter.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/CacheAdapter.java
index dd17635..2c324aa 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/CacheAdapter.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/CacheAdapter.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: CacheAdapter.java,v 1.14 2006/11/08 20:25:42 khussey Exp $
+ * $Id: CacheAdapter.java,v 1.15 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -21,6 +21,7 @@
 import java.util.Set;
 import java.util.WeakHashMap;
 
+import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.util.BasicEList;
@@ -28,6 +29,7 @@
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -41,6 +43,8 @@
 	protected class InverseCrossReferencer
 			extends ECrossReferenceAdapter.InverseCrossReferencer {
 
+		private static final long serialVersionUID = 1L;
+
 		private URI normalizeURI(URI uri, Resource resourceContext) {
 			String fragment = uri.fragment();
 
@@ -73,10 +77,12 @@
 			return uri;
 		}
 
+		@Override
 		protected URI normalizeURI(URI uri, EObject objectContext) {
 			return normalizeURI(uri, objectContext.eResource());
 		}
 
+		@Override
 		protected void addProxy(EObject proxy, EObject context) {
 
 			if (proxy.eIsProxy()) {
@@ -93,10 +99,11 @@
 
 				URI uri = normalizeURI(((InternalEObject) proxy).eProxyURI(),
 					resource);
-				List proxies = (List) proxyMap.get(uri);
+				List<EObject> proxies = proxyMap.get(uri);
 
 				if (proxies == null) {
-					proxyMap.put(uri, proxies = new BasicEList.FastCompare());
+					proxyMap.put(uri,
+						proxies = new BasicEList.FastCompare<EObject>());
 				}
 
 				proxies.add(proxy);
@@ -122,14 +129,16 @@
 		return new CacheAdapter();
 	}
 
-	private final Map values = Collections.synchronizedMap(createHashMap());
+	private final Map<Resource, Map<EObject, Map<Object, Object>>> values = Collections
+		.synchronizedMap(this
+			.<Resource, Map<EObject, Map<Object, Object>>> createHashMap());
 
 	protected boolean adapting = false;
 
 	private URIConverter uriConverter = null;
 
 	public static CacheAdapter getCacheAdapter(Notifier notifier) {
-		List eAdapters = notifier.eAdapters();
+		List<Adapter> eAdapters = notifier.eAdapters();
 
 		for (int i = 0, size = eAdapters.size(); i < size; i++) {
 			Object adapter = eAdapters.get(i);
@@ -145,11 +154,11 @@
 	public CacheAdapter() {
 		super();
 
-		unloadedResources = new Set() {
+		unloadedResources = new Set<Resource>() {
 
-			Map map = new WeakHashMap();
+			Map<Resource, Object> map = new WeakHashMap<Resource, Object>();
 
-			public boolean add(Object o) {
+			public boolean add(Resource o) {
 
 				if (map.containsKey(o)) {
 					return false;
@@ -159,12 +168,12 @@
 				return true;
 			}
 
-			public boolean addAll(Collection c) {
+			public boolean addAll(Collection<? extends Resource> c) {
 				boolean result = false;
 
-				for (Iterator i = c.iterator(); i.hasNext();) {
+				for (Resource resource : c) {
 
-					if (add(i.next())) {
+					if (add(resource)) {
 						result = true;
 					}
 				}
@@ -180,7 +189,7 @@
 				return map.keySet().contains(o);
 			}
 
-			public boolean containsAll(Collection c) {
+			public boolean containsAll(Collection<?> c) {
 				return map.keySet().containsAll(c);
 			}
 
@@ -188,7 +197,7 @@
 				return map.keySet().isEmpty();
 			}
 
-			public Iterator iterator() {
+			public Iterator<Resource> iterator() {
 				return map.keySet().iterator();
 			}
 
@@ -196,11 +205,11 @@
 				return map.keySet().remove(o);
 			}
 
-			public boolean removeAll(Collection c) {
+			public boolean removeAll(Collection<?> c) {
 				return map.keySet().removeAll(c);
 			}
 
-			public boolean retainAll(Collection c) {
+			public boolean retainAll(Collection<?> c) {
 				return map.keySet().retainAll(c);
 			}
 
@@ -212,21 +221,22 @@
 				return map.keySet().toArray();
 			}
 
-			public Object[] toArray(Object[] a) {
+			public <T> T[] toArray(T[] a) {
 				return map.keySet().toArray(a);
 			}
 		};
 	}
 
-	protected Map createHashMap() {
-		return new HashMap();
+	protected <K, V> Map<K, V> createHashMap() {
+		return new HashMap<K, V>();
 	}
 
+	@Override
 	protected ECrossReferenceAdapter.InverseCrossReferencer createInverseCrossReferencer() {
 		return new InverseCrossReferencer();
 	}
 
-	protected boolean addAdapter(EList adapters) {
+	protected boolean addAdapter(EList<Adapter> adapters) {
 		return adapters.contains(this)
 			? false
 			: adapters.add(this);
@@ -244,6 +254,7 @@
 		return result;
 	}
 
+	@Override
 	protected void addAdapter(Notifier notifier) {
 		addAdapter(notifier.eAdapters());
 	}
@@ -267,13 +278,17 @@
 		}
 	}
 
-	public Collection getNonNavigableInverseReferences(EObject eObject) {
+	@Override
+	public Collection<EStructuralFeature.Setting> getNonNavigableInverseReferences(
+			EObject eObject) {
 		addAdapter(eObject);
 
 		return super.getNonNavigableInverseReferences(eObject);
 	}
 
-	public Collection getInverseReferences(EObject eObject) {
+	@Override
+	public Collection<EStructuralFeature.Setting> getInverseReferences(
+			EObject eObject) {
 		addAdapter(eObject);
 
 		return super.getInverseReferences(eObject);
@@ -283,6 +298,7 @@
 		inverseCrossReferencer.add(eObject);
 	}
 
+	@Override
 	public void setTarget(Notifier target) {
 
 		if (!adapting) {
@@ -290,6 +306,7 @@
 		}
 	}
 
+	@Override
 	protected void unsetTarget(EObject target) {
 		super.unsetTarget(target);
 
@@ -299,12 +316,14 @@
 		}
 	}
 
+	@Override
 	protected void unsetTarget(Resource target) {
 		super.unsetTarget(target);
 
 		clear(target);
 	}
 
+	@Override
 	public void notifyChanged(Notification msg) {
 		super.notifyChanged(msg);
 
@@ -365,10 +384,10 @@
 	}
 
 	public boolean containsKey(Resource resource, EObject eObject, Object key) {
-		Map resourceMap = (Map) values.get(resource);
+		Map<EObject, Map<Object, Object>> resourceMap = values.get(resource);
 
 		if (resourceMap != null) {
-			Map eObjectMap = (Map) resourceMap.get(eObject);
+			Map<Object, Object> eObjectMap = resourceMap.get(eObject);
 
 			if (eObjectMap != null) {
 				return eObjectMap.containsKey(key);
@@ -383,10 +402,10 @@
 	}
 
 	public Object get(Resource resource, EObject eObject, Object key) {
-		Map resourceMap = (Map) values.get(resource);
+		Map<EObject, Map<Object, Object>> resourceMap = values.get(resource);
 
 		if (resourceMap != null) {
-			Map eObjectMap = (Map) resourceMap.get(eObject);
+			Map<Object, Object> eObjectMap = resourceMap.get(eObject);
 
 			if (eObjectMap != null) {
 				return eObjectMap.get(key);
@@ -411,7 +430,7 @@
 			addAdapter(resource);
 		}
 
-		Map resourceMap = (Map) values.get(resource);
+		Map<EObject, Map<Object, Object>> resourceMap = values.get(resource);
 
 		if (resourceMap == null) {
 			resourceMap = createHashMap();
@@ -419,7 +438,7 @@
 			values.put(resource, resourceMap);
 		}
 
-		Map eObjectMap = (Map) resourceMap.get(eObject);
+		Map<Object, Object> eObjectMap = resourceMap.get(eObject);
 
 		if (eObjectMap == null) {
 			eObjectMap = createHashMap();
@@ -430,10 +449,12 @@
 		return eObjectMap.put(key, value);
 	}
 
+	@Override
 	protected boolean resolve() {
 		return false;
 	}
 
+	@Override
 	protected boolean isIncluded(EReference eReference) {
 		return super.isIncluded(eReference) && eReference.isChangeable();
 	}
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 b13a516..2c3e1e2 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.10 2006/10/18 18:46:45 khussey Exp $
+ * $Id: DerivedEObjectEList.java,v 1.11 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -36,27 +36,27 @@
 /**
  * @since 1.2
  */
-public class DerivedEObjectEList
-		extends AbstractSequentialList
-		implements EStructuralFeature.Setting, InternalEList.Unsettable {
+public class DerivedEObjectEList<E>
+		extends AbstractSequentialList<E>
+		implements EStructuralFeature.Setting, InternalEList.Unsettable<E> {
 
 	protected class DerivedListIterator
-			implements ListIterator {
+			implements ListIterator<E> {
 
 		protected int index = 0;
 
 		protected int featureIndex = 0;
 
-		protected ListIterator valuesIterator = null;
+		protected ListIterator<Object> valuesIterator = null;
 
 		protected EStructuralFeature preparedFeature = null;
 
-		protected EList preparedValues = new UniqueEList.FastCompare();
+		protected EList<Object> preparedValues = new UniqueEList.FastCompare<Object>();
 
 		protected int prepared = 0;
 
 		protected boolean scanNext(EStructuralFeature nextFeature,
-				ListIterator nextValuesIterator) {
+				ListIterator<Object> nextValuesIterator) {
 			boolean isFeatureMap = FeatureMapUtil.isFeatureMap(nextFeature);
 
 			while (nextValuesIterator.hasNext()) {
@@ -99,7 +99,8 @@
 						if (sourceFeature.isMany()
 							|| FeatureMapUtil.isFeatureMap(sourceFeature)) {
 
-							InternalEList valuesList = (InternalEList) value;
+							@SuppressWarnings("unchecked")
+							InternalEList<Object> valuesList = (InternalEList<Object>) value;
 
 							if (scanNext(sourceFeature, resolve()
 								? valuesList.listIterator()
@@ -145,7 +146,7 @@
 			}
 		}
 
-		public Object next() {
+		public E next() {
 
 			if (hasNext()) {
 				prepared = 0;
@@ -159,7 +160,7 @@
 
 		protected boolean scanPrevious(EStructuralFeature previousFeature,
 
-		ListIterator previousValuesIterator) {
+		ListIterator<Object> previousValuesIterator) {
 			boolean isFeatureMap = FeatureMapUtil.isFeatureMap(previousFeature);
 
 			while (previousValuesIterator.hasPrevious()) {
@@ -197,7 +198,8 @@
 						if (sourceFeature.isMany()
 							|| FeatureMapUtil.isFeatureMap(sourceFeature)) {
 
-							InternalEList valuesList = (InternalEList) value;
+							@SuppressWarnings("unchecked")
+							InternalEList<Object> valuesList = (InternalEList<Object>) value;
 							int valuesListSize = valuesList.size();
 
 							if (scanPrevious(sourceFeature, resolve()
@@ -241,7 +243,7 @@
 			}
 		}
 
-		public Object previous() {
+		public E previous() {
 
 			if (prepared < -1 || hasPrevious()) {
 				prepared = 0;
@@ -282,10 +284,12 @@
 	protected class EmptyDerivedListIterator
 			extends DerivedListIterator {
 
+		@Override
 		public boolean hasNext() {
 			return false;
 		}
 
+		@Override
 		public boolean hasPrevious() {
 			return false;
 		}
@@ -294,13 +298,14 @@
 	protected class ResolvingDerivedListIterator
 			extends DerivedListIterator {
 
+		@Override
 		protected boolean resolve() {
 			return true;
 		}
 
 	}
 
-	protected final Class dataClass;
+	protected final Class<?> dataClass;
 
 	protected final InternalEObject owner;
 
@@ -308,7 +313,7 @@
 
 	protected final int[] sourceFeatureIDs;
 
-	public DerivedEObjectEList(Class dataClass, InternalEObject owner,
+	public DerivedEObjectEList(Class<?> dataClass, InternalEObject owner,
 			int featureID, int[] sourceFeatureIDs) {
 		super();
 
@@ -338,23 +343,26 @@
 		return !isEmpty();
 	}
 
+	@SuppressWarnings("unchecked")
 	public void set(Object newValue) {
 		clear();
-		addAll((List) newValue);
+		addAll((List<? extends E>) newValue);
 	}
 
 	public void unset() {
 		clear();
 	}
 
-	public ListIterator listIterator(int index) {
+	@Override
+	public ListIterator<E> listIterator(int index) {
 		return listIterator(index, true);
 	}
 
+	@Override
 	public int size() {
 
 		if (sourceFeatureIDs != null) {
-			EList values = new UniqueEList.FastCompare();
+			EList<Object> values = new UniqueEList.FastCompare<Object>();
 
 			for (int i = 0; i < sourceFeatureIDs.length; i++) {
 				int sourceFeatureID = sourceFeatureIDs[i];
@@ -379,7 +387,7 @@
 					} else if (isIncluded(sourceFeature)) {
 
 						if (sourceFeature.isMany()) {
-							InternalEList valuesList = (InternalEList) value;
+							InternalEList<?> valuesList = (InternalEList<?>) value;
 
 							if (valuesList instanceof RandomAccess) {
 
@@ -388,7 +396,7 @@
 								}
 							} else {
 
-								for (Iterator v = valuesList.basicIterator(); v
+								for (Iterator<?> v = valuesList.basicIterator(); v
 									.hasNext();) {
 
 									values.add(v.next());
@@ -400,7 +408,7 @@
 					} else {
 
 						if (sourceFeature.isMany()) {
-							InternalEList valuesList = (InternalEList) value;
+							InternalEList<?> valuesList = (InternalEList<?>) value;
 
 							if (valuesList instanceof RandomAccess) {
 
@@ -413,7 +421,7 @@
 								}
 							} else {
 
-								for (Iterator v = valuesList.basicIterator(); v
+								for (Iterator<?> v = valuesList.basicIterator(); v
 									.hasNext();) {
 
 									value = v.next();
@@ -436,6 +444,7 @@
 		return 0;
 	}
 
+	@Override
 	public boolean isEmpty() {
 
 		if (sourceFeatureIDs != null) {
@@ -462,7 +471,7 @@
 					} else if (isIncluded(sourceFeature)) {
 
 						if (sourceFeature.isMany()
-							? ((List) value).size() > 0
+							? ((List<?>) value).size() > 0
 							: value != null) {
 
 							return false;
@@ -470,7 +479,7 @@
 					} else {
 
 						if (sourceFeature.isMany()) {
-							InternalEList valuesList = (InternalEList) value;
+							InternalEList<?> valuesList = (InternalEList<?>) value;
 
 							if (valuesList instanceof RandomAccess) {
 
@@ -482,7 +491,7 @@
 								}
 							} else {
 
-								for (Iterator v = valuesList.basicIterator(); v
+								for (Iterator<?> v = valuesList.basicIterator(); v
 									.hasNext();) {
 
 									if (isIncluded(v.next())) {
@@ -501,6 +510,7 @@
 		return true;
 	}
 
+	@Override
 	public boolean contains(Object object) {
 
 		if (sourceFeatureIDs != null) {
@@ -528,7 +538,7 @@
 					} else if (isIncluded(sourceFeature)) {
 
 						if (sourceFeature.isMany()
-							? ((List) value).contains(object)
+							? ((List<?>) value).contains(object)
 							: value == object) {
 
 							return true;
@@ -536,7 +546,7 @@
 					} else {
 
 						if (sourceFeature.isMany()) {
-							InternalEList valuesList = (InternalEList) value;
+							InternalEList<?> valuesList = (InternalEList<?>) value;
 
 							if (valuesList instanceof RandomAccess) {
 
@@ -551,7 +561,7 @@
 								}
 							} else {
 
-								for (Iterator v = valuesList.basicIterator(); v
+								for (Iterator<?> v = valuesList.basicIterator(); v
 									.hasNext();) {
 
 									value = v.next();
@@ -574,29 +584,30 @@
 		return false;
 	}
 
-	public Object basicGet(int index) {
+	public E basicGet(int index) {
 		return basicList().get(index);
 	}
 
-	public List basicList() {
-		return new DerivedEObjectEList(dataClass, owner, featureID,
+	public List<E> basicList() {
+		return new DerivedEObjectEList<E>(dataClass, owner, featureID,
 			sourceFeatureIDs) {
 
-			public ListIterator listIterator(int index) {
+			@Override
+			public ListIterator<E> listIterator(int index) {
 				return basicListIterator(index);
 			}
 		};
 	}
 
-	public Iterator basicIterator() {
+	public Iterator<E> basicIterator() {
 		return basicListIterator();
 	}
 
-	public ListIterator basicListIterator() {
+	public ListIterator<E> basicListIterator() {
 		return basicListIterator(0);
 	}
 
-	public ListIterator basicListIterator(int index) {
+	public ListIterator<E> basicListIterator(int index) {
 		return listIterator(index, false);
 	}
 
@@ -620,21 +631,21 @@
 		owner.eNotify(notification);
 	}
 
-	public NotificationChain basicAdd(Object object,
-			NotificationChain notifications) {
+	public NotificationChain basicAdd(E object, NotificationChain notifications) {
 		addUnique(object);
 		return notifications;
 	}
 
-	public void add(int index, Object object) {
+	@Override
+	public void add(int index, E object) {
 		addUnique(index, object);
 	}
 
-	public void addUnique(Object object) {
+	public void addUnique(E object) {
 		addUnique(size(), object);
 	}
 
-	public void addUnique(int index, Object object) {
+	public void addUnique(int index, E object) {
 
 		if (isNotificationRequired()) {
 			boolean oldIsSet = isSet();
@@ -647,11 +658,12 @@
 		}
 	}
 
-	public boolean addAll(int index, Collection objects) {
+	@Override
+	public boolean addAll(int index, Collection<? extends E> objects) {
 		return addAllUnique(index, objects);
 	}
 
-	public boolean addAllUnique(int index, Collection objects) {
+	public boolean addAllUnique(int index, Collection<? extends E> objects) {
 		int size = objects.size();
 
 		if (size > 0) {
@@ -676,11 +688,11 @@
 		return false;
 	}
 
-	protected boolean doAddAllUnique(int index, Collection objects) {
+	protected boolean doAddAllUnique(int index, Collection<? extends E> objects) {
 		boolean modified = false;
-		ListIterator listIterator = listIterator(index);
+		ListIterator<E> listIterator = listIterator(index);
 
-		for (Iterator o = objects.iterator(); o.hasNext();) {
+		for (Iterator<? extends E> o = objects.iterator(); o.hasNext();) {
 			listIterator.add(validate(index, o.next()));
 			modified = true;
 		}
@@ -688,24 +700,28 @@
 		return modified;
 	}
 
-	public Object remove(int index) {
+	@Override
+	public E remove(int index) {
 
 		if (isNotificationRequired()) {
 			boolean oldIsSet = isSet();
 			NotificationImpl notification = createNotification(
 				Notification.REMOVE, super.remove(index), null, index, oldIsSet);
 			dispatchNotification(notification);
-			return notification.getOldValue();
+			@SuppressWarnings("unchecked")
+			E oldValue = (E) notification.getOldValue();
+			return oldValue;
 		} else {
 			return super.remove(index);
 		}
 	}
 
-	public Object set(int index, Object object) {
+	@Override
+	public E set(int index, E object) {
 		return setUnique(index, object);
 	}
 
-	public Object setUnique(int index, Object object) {
+	public E setUnique(int index, E object) {
 
 		if (isNotificationRequired()) {
 			boolean oldIsSet = isSet();
@@ -713,7 +729,9 @@
 				super.set(index, validate(index, object)), object, index,
 				oldIsSet);
 			dispatchNotification(notification);
-			return notification.getOldValue();
+			@SuppressWarnings("unchecked")
+			E oldValue = (E) notification.getOldValue();
+			return oldValue;
 		} else {
 			return super.set(index, validate(index, object));
 		}
@@ -723,7 +741,7 @@
 		throw new UnsupportedOperationException();
 	}
 
-	public Object move(int newPosition, int oldPosition) {
+	public E move(int newPosition, int oldPosition) {
 		throw new UnsupportedOperationException();
 	}
 
@@ -736,11 +754,12 @@
 		return dataClass.isInstance(derive(object));
 	}
 
-	protected Object derive(Object object) {
-		return object;
+	@SuppressWarnings("unchecked")
+	protected E derive(Object object) {
+		return (E) object;
 	}
 
-	protected Object validate(int index, Object object) {
+	protected E validate(int index, E object) {
 
 		if (!dataClass.isInstance(object)) {
 			throw new IllegalArgumentException(String.valueOf(object));
@@ -749,19 +768,19 @@
 		return object;
 	}
 
-	protected ListIterator newListIterator() {
+	protected ListIterator<E> newListIterator() {
 		return new DerivedListIterator();
 	}
 
-	protected ListIterator newResolvingListIterator() {
+	protected ListIterator<E> newResolvingListIterator() {
 		return new ResolvingDerivedListIterator();
 	}
 
-	protected ListIterator newEmptyListIterator() {
+	protected ListIterator<E> newEmptyListIterator() {
 		return new EmptyDerivedListIterator();
 	}
 
-	protected ListIterator listIterator(int index, boolean resolve) {
+	protected ListIterator<E> listIterator(int index, boolean resolve) {
 
 		if (sourceFeatureIDs == null || sourceFeatureIDs.length == 0) {
 
@@ -773,7 +792,7 @@
 			return newEmptyListIterator();
 		}
 
-		ListIterator listIterator = resolve
+		ListIterator<E> listIterator = resolve
 			? newResolvingListIterator()
 			: newListIterator();
 
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 2d1e107..de0fbaa 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.7 2006/10/18 18:46:45 khussey Exp $
+ * $Id: DerivedSubsetEObjectEList.java,v 1.8 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -24,14 +24,15 @@
 /**
  * @since 1.2
  */
-public class DerivedSubsetEObjectEList
-		extends DerivedEObjectEList {
+public class DerivedSubsetEObjectEList<E>
+		extends DerivedEObjectEList<E> {
 
 	protected class DerivedSubsetListIterator
 			extends DerivedListIterator {
 
 		protected int expectedModCount = modCount;
 
+		@Override
 		public void remove() {
 			checkModCount();
 
@@ -56,6 +57,7 @@
 			expectedModCount++;
 		}
 
+		@Override
 		public void set(Object element) {
 			checkModCount();
 
@@ -80,14 +82,16 @@
 			expectedModCount++;
 		}
 
+		@Override
 		public void add(Object element) {
 			checkModCount();
 
 			if (valuesIterator == null) {
-				List valuesList = resolve()
-					? (List) owner.eGet(sourceFeatureIDs[featureIndex],
+				@SuppressWarnings("unchecked")
+				List<Object> valuesList = resolve()
+					? (List<Object>) owner.eGet(sourceFeatureIDs[featureIndex],
 						resolve(), true)
-					: ((InternalEList) owner.eGet(
+					: ((InternalEList<Object>) owner.eGet(
 						sourceFeatureIDs[featureIndex], resolve(), true))
 						.basicList();
 
@@ -125,6 +129,7 @@
 	protected class ResolvingDerivedSubsetListIterator
 			extends DerivedSubsetListIterator {
 
+		@Override
 		protected boolean resolve() {
 			return true;
 		}
@@ -134,21 +139,24 @@
 	protected class EmptyDerivedSubsetListIterator
 			extends EmptyDerivedListIterator {
 
+		@Override
 		public void remove() {
 			throw new IllegalStateException();
 		}
 
+		@Override
 		public void set(Object element) {
 			throw new IllegalStateException();
 		}
 
+		@Override
 		public void add(Object element) {
 			throw new IllegalStateException();
 		}
 
 	}
 
-	public DerivedSubsetEObjectEList(Class dataClass, InternalEObject owner,
+	public DerivedSubsetEObjectEList(Class<?> dataClass, InternalEObject owner,
 			int featureID, int[] sourceFeatureIDs) {
 		super(dataClass, owner, featureID, sourceFeatureIDs);
 
@@ -163,29 +171,35 @@
 
 	}
 
-	public List basicList() {
+	@Override
+	public List<E> basicList() {
 
-		return new DerivedSubsetEObjectEList(dataClass, owner, featureID,
+		return new DerivedSubsetEObjectEList<E>(dataClass, owner, featureID,
 			sourceFeatureIDs) {
 
-			public ListIterator listIterator(int index) {
+			@Override
+			public ListIterator<E> listIterator(int index) {
 				return basicListIterator(index);
 			}
 		};
 	}
 
-	protected ListIterator newListIterator() {
+	@Override
+	protected ListIterator<E> newListIterator() {
 		return new DerivedSubsetListIterator();
 	}
 
-	protected ListIterator newResolvingListIterator() {
+	@Override
+	protected ListIterator<E> newResolvingListIterator() {
 		return new ResolvingDerivedSubsetListIterator();
 	}
 
-	protected ListIterator newEmptyListIterator() {
+	@Override
+	protected ListIterator<E> newEmptyListIterator() {
 		return new EmptyDerivedSubsetListIterator();
 	}
 
+	@Override
 	protected boolean isNotificationRequired() {
 		return owner.eNotificationRequired();
 	}
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedUnionEObjectEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedUnionEObjectEList.java
index 517a1db..6a7d040 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedUnionEObjectEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/DerivedUnionEObjectEList.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: DerivedUnionEObjectEList.java,v 1.4 2006/10/18 18:46:45 khussey Exp $
+ * $Id: DerivedUnionEObjectEList.java,v 1.5 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -21,24 +21,27 @@
 /**
  * @since 1.2
  */
-public class DerivedUnionEObjectEList
-		extends DerivedEObjectEList {
+public class DerivedUnionEObjectEList<E>
+		extends DerivedEObjectEList<E> {
 
-	public DerivedUnionEObjectEList(Class dataClass, InternalEObject owner,
+	public DerivedUnionEObjectEList(Class<?> dataClass, InternalEObject owner,
 			int featureID, int[] sourceFeatureIDs) {
 		super(dataClass, owner, featureID, sourceFeatureIDs);
 	}
 
-	public List basicList() {
-		return new DerivedUnionEObjectEList(dataClass, owner, featureID,
+	@Override
+	public List<E> basicList() {
+		return new DerivedUnionEObjectEList<E>(dataClass, owner, featureID,
 			sourceFeatureIDs) {
 
-			public ListIterator listIterator(int index) {
+			@Override
+			public ListIterator<E> listIterator(int index) {
 				return basicListIterator(index);
 			}
 		};
 	}
 
+	@Override
 	protected boolean isIncluded(EStructuralFeature feature) {
 		return true;
 	}
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectContainmentEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectContainmentEList.java
index 492c89e..451667c 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectContainmentEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectContainmentEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetEObjectContainmentEList.java,v 1.3 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SubsetEObjectContainmentEList.java,v 1.4 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -19,72 +19,67 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectContainmentEList
- */
-public class SubsetEObjectContainmentEList
-		extends SubsetEObjectEList {
+@Deprecated
+public class SubsetEObjectContainmentEList<E>
+		extends SubsetEObjectEList<E> {
 
-	public static class Unsettable
-			extends SubsetEObjectContainmentEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class Resolving
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SubsetEObjectContainmentEList<E> {
 
-			public Resolving(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class Resolving<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] supersetFeatureIDs) {
 				super(dataClass, owner, featureID, supersetFeatureIDs);
 			}
 
-			public Resolving(Class dataClass, InternalEObject owner,
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int supersetFeatureID) {
 				this(dataClass, owner, featureID, new int[]{supersetFeatureID});
 			}
 
+			@Override
 			protected boolean hasProxies() {
 				return true;
 			}
 
-			protected Object resolve(int index, Object object) {
-				return resolve(index, (EObject) object);
+			@SuppressWarnings("unchecked")
+			@Override
+			protected E resolve(int index, E object) {
+				return (E) resolve(index, (EObject) object);
 			}
 		}
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs) {
 			super(dataClass, owner, featureID, supersetFeatureIDs);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int supersetFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID});
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -100,81 +95,66 @@
 		}
 	}
 
-	public static class Resolving
-			extends SubsetEObjectContainmentEList {
+	public static class Resolving<E>
+			extends SubsetEObjectContainmentEList<E> {
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int[] supersetFeatureIDs) {
+		private static final long serialVersionUID = 1L;
+
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int[] supersetFeatureIDs) {
 			super(dataClass, owner, featureID, supersetFeatureIDs);
 		}
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int supersetFeatureID) {
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int supersetFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID});
 		}
 
+		@Override
 		protected boolean hasProxies() {
 			return true;
 		}
 
-		protected Object resolve(int index, Object object) {
-			return resolve(index, (EObject) object);
+		@SuppressWarnings("unchecked")
+		@Override
+		protected E resolve(int index, E object) {
+			return (E) resolve(index, (EObject) object);
 		}
 	}
 
-	public SubsetEObjectContainmentEList(Class dataClass,
+	public SubsetEObjectContainmentEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] supersetFeatureIDs) {
 		super(dataClass, owner, featureID, supersetFeatureIDs);
 	}
 
-	public SubsetEObjectContainmentEList(Class dataClass,
+	public SubsetEObjectContainmentEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int supersetFeatureID) {
 		this(dataClass, owner, featureID, new int[]{supersetFeatureID});
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#hasInverse()
-	 */
+	@Override
 	protected boolean hasInverse() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasNavigableInverse()
-	 */
+	@Override
 	protected boolean hasNavigableInverse() {
 		return false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#isContainment()
-	 */
+	@Override
 	protected boolean isContainment() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.Collection#addAll(java.util.Collection)
-	 */
-	public boolean addAll(Collection collection) {
-		return super.addAll(new ArrayList(collection));
+	@Override
+	public boolean addAll(Collection<? extends E> collection) {
+		return super.addAll(new ArrayList<E>(collection));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.List#addAll(int, java.util.Collection)
-	 */
-	public boolean addAll(int index, Collection collection) {
-		return super.addAll(index, new ArrayList(collection));
+	@Override
+	public boolean addAll(int index, Collection<? extends E> collection) {
+		return super.addAll(index, new ArrayList<E>(collection));
 	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectContainmentWithInverseEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectContainmentWithInverseEList.java
index 6cbc89a..d88f66d 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectContainmentWithInverseEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectContainmentWithInverseEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetEObjectContainmentWithInverseEList.java,v 1.3 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SubsetEObjectContainmentWithInverseEList.java,v 1.4 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -16,77 +16,72 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectContainmentWithInverseEList
- */
-public class SubsetEObjectContainmentWithInverseEList
-		extends SubsetEObjectContainmentEList {
+@Deprecated
+public class SubsetEObjectContainmentWithInverseEList<E>
+		extends SubsetEObjectContainmentEList<E> {
 
-	public static class Unsettable
-			extends SubsetEObjectContainmentWithInverseEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class Resolving
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SubsetEObjectContainmentWithInverseEList<E> {
 
-			public Resolving(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class Resolving<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] supersetFeatureIDs,
 					int inverseFeatureID) {
 				super(dataClass, owner, featureID, supersetFeatureIDs,
 					inverseFeatureID);
 			}
 
-			public Resolving(Class dataClass, InternalEObject owner,
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int supersetFeatureID, int inverseFeatureID) {
 				this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 					inverseFeatureID);
 			}
 
+			@Override
 			protected boolean hasProxies() {
 				return true;
 			}
 
-			protected Object resolve(int index, Object object) {
-				return resolve(index, (EObject) object);
+			@SuppressWarnings("unchecked")
+			@Override
+			protected E resolve(int index, E object) {
+				return (E) resolve(index, (EObject) object);
 			}
 		}
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int supersetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -102,33 +97,38 @@
 		}
 	}
 
-	public static class Resolving
-			extends SubsetEObjectContainmentWithInverseEList {
+	public static class Resolving<E>
+			extends SubsetEObjectContainmentWithInverseEList<E> {
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int[] supersetFeatureIDs, int inverseFeatureID) {
+		private static final long serialVersionUID = 1L;
+
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int[] supersetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int supersetFeatureID, int inverseFeatureID) {
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int supersetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 				inverseFeatureID);
 		}
 
+		@Override
 		protected boolean hasProxies() {
 			return true;
 		}
 
-		protected Object resolve(int index, Object object) {
-			return resolve(index, (EObject) object);
+		@SuppressWarnings("unchecked")
+		@Override
+		protected E resolve(int index, E object) {
+			return (E) resolve(index, (EObject) object);
 		}
 	}
 
 	protected final int inverseFeatureID;
 
-	public SubsetEObjectContainmentWithInverseEList(Class dataClass,
+	public SubsetEObjectContainmentWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] supersetFeatureIDs,
 			int inverseFeatureID) {
 		super(dataClass, owner, featureID, supersetFeatureIDs);
@@ -136,37 +136,25 @@
 		this.inverseFeatureID = inverseFeatureID;
 	}
 
-	public SubsetEObjectContainmentWithInverseEList(Class dataClass,
+	public SubsetEObjectContainmentWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int supersetFeatureID,
 			int inverseFeatureID) {
 		this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 			inverseFeatureID);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasNavigableInverse()
-	 */
+	@Override
 	protected boolean hasNavigableInverse() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#getInverseFeatureID()
-	 */
+	@Override
 	public int getInverseFeatureID() {
 		return inverseFeatureID;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#getInverseFeatureClass()
-	 */
-	public Class getInverseFeatureClass() {
+	@Override
+	public Class<?> getInverseFeatureClass() {
 		return dataClass;
 	}
 
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectEList.java
index 34ae0f2..2bba45a 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetEObjectEList.java,v 1.4 2006/03/01 16:28:17 khussey Exp $
+ * $Id: SubsetEObjectEList.java,v 1.5 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -23,50 +23,40 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.util.EObjectEList;
 
-/**
- * @deprecated Use SubsetSupersetEObjectEList
- */
-public class SubsetEObjectEList
-		extends EObjectEList {
+@Deprecated
+public class SubsetEObjectEList<E>
+		extends EObjectEList<E> {
 
-	public static class Unsettable
-			extends SubsetEObjectEList {
+	private static final long serialVersionUID = 1L;
+
+	public static class Unsettable<E>
+			extends SubsetEObjectEList<E> {
+
+		private static final long serialVersionUID = 1L;
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs) {
 			super(dataClass, owner, featureID, supersetFeatureIDs);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int supersetFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID});
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -84,14 +74,14 @@
 
 	protected final int[] supersetFeatureIDs;
 
-	public SubsetEObjectEList(Class dataClass, InternalEObject owner,
+	public SubsetEObjectEList(Class<?> dataClass, InternalEObject owner,
 			int featureID, int[] supersetFeatureIDs) {
 		super(dataClass, owner, featureID);
 
 		this.supersetFeatureIDs = supersetFeatureIDs;
 	}
 
-	public SubsetEObjectEList(Class dataClass, InternalEObject owner,
+	public SubsetEObjectEList(Class<?> dataClass, InternalEObject owner,
 			int featureID, int supersetFeatureID) {
 		this(dataClass, owner, featureID, new int[]{supersetFeatureID});
 	}
@@ -110,7 +100,8 @@
 					.getEStructuralFeature(supersetFeatureIDs[i]);
 
 				if (supersetEStructuralFeature.isMany()) {
-					EList supersetEList = (EList) owner
+					@SuppressWarnings("unchecked")
+					EList<Object> supersetEList = (EList<Object>) owner
 						.eGet(supersetEStructuralFeature);
 
 					if (!supersetEList.contains(object)) {
@@ -121,14 +112,8 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#basicAdd(java.lang.Object,
-	 *      org.eclipse.emf.common.notify.NotificationChain)
-	 */
-	public NotificationChain basicAdd(Object object,
-			NotificationChain notifications) {
+	@Override
+	public NotificationChain basicAdd(E object, NotificationChain notifications) {
 		notifications = super.basicAdd(object, notifications);
 
 		supersetAdd(object);
@@ -136,13 +121,8 @@
 		return notifications;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#basicSet(int,
-	 *      java.lang.Object, org.eclipse.emf.common.notify.NotificationChain)
-	 */
-	public NotificationChain basicSet(int index, Object object,
+	@Override
+	public NotificationChain basicSet(int index, E object,
 			NotificationChain notifications) {
 		notifications = super.basicSet(index, object, notifications);
 
@@ -151,23 +131,15 @@
 		return notifications;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.List#add(int, java.lang.Object)
-	 */
-	public void add(int index, Object object) {
+	@Override
+	public void add(int index, E object) {
 		super.add(index, object);
 
 		supersetAdd(object);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.Collection#add(java.lang.Object)
-	 */
-	public boolean add(Object object) {
+	@Override
+	public boolean add(E object) {
 		boolean result = super.add(object);
 
 		supersetAdd(object);
@@ -175,43 +147,35 @@
 		return result;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.Collection#addAll(java.util.Collection)
-	 */
-	public boolean addAll(Collection collection) {
+	@Override
+	public boolean addAll(Collection<? extends E> collection) {
 		boolean result = super.addAll(collection);
 
-		for (Iterator elements = collection.iterator(); elements.hasNext();) {
+		for (Iterator<? extends E> elements = collection.iterator(); elements
+			.hasNext();) {
+
 			supersetAdd(elements.next());
 		}
 
 		return result;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.List#addAll(int, java.util.Collection)
-	 */
-	public boolean addAll(int index, Collection collection) {
+	@Override
+	public boolean addAll(int index, Collection<? extends E> collection) {
 		boolean result = super.addAll(index, collection);
 
-		for (Iterator elements = collection.iterator(); elements.hasNext();) {
+		for (Iterator<? extends E> elements = collection.iterator(); elements
+			.hasNext();) {
+
 			supersetAdd(elements.next());
 		}
 
 		return result;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.List#set(int, java.lang.Object)
-	 */
-	public Object set(int index, Object object) {
-		Object result = super.set(index, object);
+	@Override
+	public E set(int index, E object) {
+		E result = super.set(index, object);
 
 		supersetAdd(object);
 
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectResolvingEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectResolvingEList.java
index 6e96496..3b42f65 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectResolvingEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectResolvingEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetEObjectResolvingEList.java,v 1.2 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SubsetEObjectResolvingEList.java,v 1.3 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -16,50 +16,40 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectResolvingEList
- */
-public class SubsetEObjectResolvingEList
-		extends SubsetEObjectEList {
+@Deprecated
+public class SubsetEObjectResolvingEList<E>
+		extends SubsetEObjectEList<E> {
 
-	public static class Unsettable
-			extends SubsetEObjectResolvingEList {
+	private static final long serialVersionUID = 1L;
+
+	public static class Unsettable<E>
+			extends SubsetEObjectResolvingEList<E> {
+
+		private static final long serialVersionUID = 1L;
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs) {
 			super(dataClass, owner, featureID, supersetFeatureIDs);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int supersetFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID});
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -75,33 +65,25 @@
 		}
 	}
 
-	public SubsetEObjectResolvingEList(Class dataClass, InternalEObject owner,
-			int featureID, int[] supersetFeatureIDs) {
+	public SubsetEObjectResolvingEList(Class<?> dataClass,
+			InternalEObject owner, int featureID, int[] supersetFeatureIDs) {
 		super(dataClass, owner, featureID, supersetFeatureIDs);
 	}
 
-	public SubsetEObjectResolvingEList(Class dataClass, InternalEObject owner,
-			int featureID, int supersetFeatureID) {
+	public SubsetEObjectResolvingEList(Class<?> dataClass,
+			InternalEObject owner, int featureID, int supersetFeatureID) {
 		this(dataClass, owner, featureID, new int[]{supersetFeatureID});
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasProxies()
-	 */
+	@Override
 	protected boolean hasProxies() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.util.BasicEList#resolve(int,
-	 *      java.lang.Object)
-	 */
-	protected Object resolve(int index, Object object) {
-		return resolve(index, (EObject) object);
+	@SuppressWarnings("unchecked")
+	@Override
+	protected E resolve(int index, E object) {
+		return (E) resolve(index, (EObject) object);
 	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectWithInverseEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectWithInverseEList.java
index c8fa06b..83d4376 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectWithInverseEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectWithInverseEList.java
@@ -8,43 +8,43 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetEObjectWithInverseEList.java,v 1.2 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SubsetEObjectWithInverseEList.java,v 1.3 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectWithInverseEList
- */
-public class SubsetEObjectWithInverseEList
-		extends SubsetEObjectEList {
+@Deprecated
+public class SubsetEObjectWithInverseEList<E>
+		extends SubsetEObjectEList<E> {
 
-	public static class Unsettable
-			extends SubsetEObjectWithInverseEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class ManyInverse
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SubsetEObjectWithInverseEList<E> {
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class ManyInverse<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] supersetFeatureIDs,
 					int inverseFeatureID) {
 				super(dataClass, owner, featureID, supersetFeatureIDs,
 					inverseFeatureID);
 			}
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int supersetFeatureID, int inverseFeatureID) {
 				this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 					inverseFeatureID);
 			}
 
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.emf.ecore.util.EcoreEList#hasManyInverse()
-			 */
+			@Override
 			protected boolean hasManyInverse() {
 				return true;
 			}
@@ -52,41 +52,29 @@
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int supersetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -102,26 +90,24 @@
 		}
 	}
 
-	public static class ManyInverse
-			extends SubsetEObjectWithInverseEList {
+	public static class ManyInverse<E>
+			extends SubsetEObjectWithInverseEList<E> {
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int supersetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.util.EcoreEList#hasManyInverse()
-		 */
+		@Override
 		protected boolean hasManyInverse() {
 			return true;
 		}
@@ -129,7 +115,7 @@
 
 	protected final int inverseFeatureID;
 
-	public SubsetEObjectWithInverseEList(Class dataClass,
+	public SubsetEObjectWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] supersetFeatureIDs,
 			int inverseFeatureID) {
 		super(dataClass, owner, featureID, supersetFeatureIDs);
@@ -137,46 +123,30 @@
 		this.inverseFeatureID = inverseFeatureID;
 	}
 
-	public SubsetEObjectWithInverseEList(Class dataClass,
+	public SubsetEObjectWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int supersetFeatureID,
 			int inverseFeatureID) {
 		this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 			inverseFeatureID);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#hasInverse()
-	 */
+	@Override
 	protected boolean hasInverse() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasNavigableInverse()
-	 */
+	@Override
 	protected boolean hasNavigableInverse() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#getInverseFeatureID()
-	 */
+	@Override
 	public int getInverseFeatureID() {
 		return inverseFeatureID;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#getInverseFeatureClass()
-	 */
-	public Class getInverseFeatureClass() {
+	@Override
+	public Class<?> getInverseFeatureClass() {
 		return dataClass;
 	}
 
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectWithInverseResolvingEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectWithInverseResolvingEList.java
index c2b2fd9..be2de9c 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectWithInverseResolvingEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetEObjectWithInverseResolvingEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetEObjectWithInverseResolvingEList.java,v 1.2 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SubsetEObjectWithInverseResolvingEList.java,v 1.3 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -16,36 +16,36 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectWithInverseResolvingEList
- */
-public class SubsetEObjectWithInverseResolvingEList
-		extends SubsetEObjectWithInverseEList {
+@Deprecated
+public class SubsetEObjectWithInverseResolvingEList<E>
+		extends SubsetEObjectWithInverseEList<E> {
 
-	public static class Unsettable
-			extends SubsetEObjectWithInverseResolvingEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class ManyInverse
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SubsetEObjectWithInverseResolvingEList<E> {
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class ManyInverse<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] supersetFeatureIDs,
 					int inverseFeatureID) {
 				super(dataClass, owner, featureID, supersetFeatureIDs,
 					inverseFeatureID);
 			}
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int supersetFeatureID, int inverseFeatureID) {
 				this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 					inverseFeatureID);
 			}
 
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.emf.ecore.util.EcoreEList#hasManyInverse()
-			 */
+			@Override
 			protected boolean hasManyInverse() {
 				return true;
 			}
@@ -53,41 +53,29 @@
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int supersetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -103,61 +91,51 @@
 		}
 	}
 
-	public static class ManyInverse
-			extends SubsetEObjectWithInverseResolvingEList {
+	public static class ManyInverse<E>
+			extends SubsetEObjectWithInverseResolvingEList<E> {
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int supersetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.util.EcoreEList#hasManyInverse()
-		 */
+		@Override
 		protected boolean hasManyInverse() {
 			return true;
 		}
 	}
 
-	public SubsetEObjectWithInverseResolvingEList(Class dataClass,
+	public SubsetEObjectWithInverseResolvingEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] supersetFeatureIDs,
 			int inverseFeatureID) {
 		super(dataClass, owner, featureID, supersetFeatureIDs, inverseFeatureID);
 	}
 
-	public SubsetEObjectWithInverseResolvingEList(Class dataClass,
+	public SubsetEObjectWithInverseResolvingEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int supersetFeatureID,
 			int inverseFeatureID) {
 		this(dataClass, owner, featureID, new int[]{supersetFeatureID},
 			inverseFeatureID);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasProxies()
-	 */
+	@Override
 	protected boolean hasProxies() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.util.BasicEList#resolve(int,
-	 *      java.lang.Object)
-	 */
-	protected Object resolve(int index, Object object) {
-		return resolve(index, (EObject) object);
+	@SuppressWarnings("unchecked")
+	@Override
+	protected E resolve(int index, E object) {
+		return (E) resolve(index, (EObject) object);
 	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectContainmentEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectContainmentEList.java
index 0a2a34e..58fb8c8 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectContainmentEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectContainmentEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetSupersetEObjectContainmentEList.java,v 1.2 2006/10/18 18:46:45 khussey Exp $
+ * $Id: SubsetSupersetEObjectContainmentEList.java,v 1.3 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -22,47 +22,59 @@
 /**
  * @since 1.2
  */
-public class SubsetSupersetEObjectContainmentEList
-		extends SubsetSupersetEObjectEList {
+public class SubsetSupersetEObjectContainmentEList<E>
+		extends SubsetSupersetEObjectEList<E> {
 
-	public static class Unsettable
-			extends SubsetSupersetEObjectContainmentEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class Resolving
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SubsetSupersetEObjectContainmentEList<E> {
 
-			public Resolving(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class Resolving<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] supersetFeatureIDs,
 					int[] subsetFeatureIDs) {
 				super(dataClass, owner, featureID, supersetFeatureIDs,
 					subsetFeatureIDs);
 			}
 
+			@Override
 			protected boolean hasProxies() {
 				return true;
 			}
 
-			protected Object resolve(int index, Object object) {
-				return resolve(index, (EObject) object);
+			@SuppressWarnings("unchecked")
+			@Override
+			protected E resolve(int index, E object) {
+				return (E) resolve(index, (EObject) object);
 			}
 		}
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs, int[] subsetFeatureIDs) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs);
 		}
 
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -78,48 +90,58 @@
 		}
 	}
 
-	public static class Resolving
-			extends SubsetSupersetEObjectContainmentEList {
+	public static class Resolving<E>
+			extends SubsetSupersetEObjectContainmentEList<E> {
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int[] supersetFeatureIDs, int[] subsetFeatureIDs) {
+		private static final long serialVersionUID = 1L;
+
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int[] supersetFeatureIDs, int[] subsetFeatureIDs) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs);
 		}
 
+		@Override
 		protected boolean hasProxies() {
 			return true;
 		}
 
-		protected Object resolve(int index, Object object) {
-			return resolve(index, (EObject) object);
+		@SuppressWarnings("unchecked")
+		@Override
+		protected E resolve(int index, E object) {
+			return (E) resolve(index, (EObject) object);
 		}
 	}
 
-	public SubsetSupersetEObjectContainmentEList(Class dataClass,
+	public SubsetSupersetEObjectContainmentEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] supersetFeatureIDs,
 			int[] subsetFeatureIDs) {
 		super(dataClass, owner, featureID, supersetFeatureIDs, subsetFeatureIDs);
 	}
 
+	@Override
 	protected boolean hasInverse() {
 		return true;
 	}
 
+	@Override
 	protected boolean hasNavigableInverse() {
 		return false;
 	}
 
+	@Override
 	protected boolean isContainment() {
 		return true;
 	}
 
-	public boolean addAll(Collection collection) {
-		return super.addAll(new ArrayList(collection));
+	@Override
+	public boolean addAll(Collection<? extends E> collection) {
+		return super.addAll(new ArrayList<E>(collection));
 	}
 
-	public boolean addAll(int index, Collection collection) {
-		return super.addAll(index, new ArrayList(collection));
+	@Override
+	public boolean addAll(int index, Collection<? extends E> collection) {
+		return super.addAll(index, new ArrayList<E>(collection));
 	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectContainmentWithInverseEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectContainmentWithInverseEList.java
index 2c68530..294149f 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectContainmentWithInverseEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectContainmentWithInverseEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetSupersetEObjectContainmentWithInverseEList.java,v 1.2 2006/10/18 18:46:45 khussey Exp $
+ * $Id: SubsetSupersetEObjectContainmentWithInverseEList.java,v 1.3 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -19,48 +19,60 @@
 /**
  * @since 1.2
  */
-public class SubsetSupersetEObjectContainmentWithInverseEList
-		extends SubsetSupersetEObjectContainmentEList {
+public class SubsetSupersetEObjectContainmentWithInverseEList<E>
+		extends SubsetSupersetEObjectContainmentEList<E> {
 
-	public static class Unsettable
-			extends SubsetSupersetEObjectContainmentWithInverseEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class Resolving
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SubsetSupersetEObjectContainmentWithInverseEList<E> {
 
-			public Resolving(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class Resolving<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] supersetFeatureIDs,
 					int[] subsetFeatureIDs, int inverseFeatureID) {
 				super(dataClass, owner, featureID, supersetFeatureIDs,
 					subsetFeatureIDs, inverseFeatureID);
 			}
 
+			@Override
 			protected boolean hasProxies() {
 				return true;
 			}
 
-			protected Object resolve(int index, Object object) {
-				return resolve(index, (EObject) object);
+			@SuppressWarnings("unchecked")
+			@Override
+			protected E resolve(int index, E object) {
+				return (E) resolve(index, (EObject) object);
 			}
 		}
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs,
 				int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs, inverseFeatureID);
 		}
 
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -76,28 +88,33 @@
 		}
 	}
 
-	public static class Resolving
-			extends SubsetSupersetEObjectContainmentWithInverseEList {
+	public static class Resolving<E>
+			extends SubsetSupersetEObjectContainmentWithInverseEList<E> {
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int[] supersetFeatureIDs, int[] subsetFeatureIDs,
-				int inverseFeatureID) {
+		private static final long serialVersionUID = 1L;
+
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int[] supersetFeatureIDs,
+				int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs, inverseFeatureID);
 		}
 
+		@Override
 		protected boolean hasProxies() {
 			return true;
 		}
 
-		protected Object resolve(int index, Object object) {
-			return resolve(index, (EObject) object);
+		@SuppressWarnings("unchecked")
+		@Override
+		protected E resolve(int index, E object) {
+			return (E) resolve(index, (EObject) object);
 		}
 	}
 
 	protected final int inverseFeatureID;
 
-	public SubsetSupersetEObjectContainmentWithInverseEList(Class dataClass,
+	public SubsetSupersetEObjectContainmentWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] supersetFeatureIDs,
 			int[] subsetFeatureIDs, int inverseFeatureID) {
 		super(dataClass, owner, featureID, supersetFeatureIDs, subsetFeatureIDs);
@@ -105,15 +122,18 @@
 		this.inverseFeatureID = inverseFeatureID;
 	}
 
+	@Override
 	protected boolean hasNavigableInverse() {
 		return true;
 	}
 
+	@Override
 	public int getInverseFeatureID() {
 		return inverseFeatureID;
 	}
 
-	public Class getInverseFeatureClass() {
+	@Override
+	public Class<?> getInverseFeatureClass() {
 		return dataClass;
 	}
 
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectEList.java
index cebcefa..e8fa5a0 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetSupersetEObjectEList.java,v 1.3 2006/10/18 18:46:45 khussey Exp $
+ * $Id: SubsetSupersetEObjectEList.java,v 1.4 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -26,28 +26,35 @@
 /**
  * @since 1.2
  */
-public class SubsetSupersetEObjectEList
-		extends EObjectEList {
+public class SubsetSupersetEObjectEList<E>
+		extends EObjectEList<E> {
 
-	public static class Unsettable
-			extends SubsetSupersetEObjectEList {
+	private static final long serialVersionUID = 1L;
+
+	public static class Unsettable<E>
+			extends SubsetSupersetEObjectEList<E> {
+
+		private static final long serialVersionUID = 1L;
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs, int[] subsetFeatureIDs) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs);
 		}
 
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -67,8 +74,9 @@
 
 	protected final int[] subsetFeatureIDs;
 
-	public SubsetSupersetEObjectEList(Class dataClass, InternalEObject owner,
-			int featureID, int[] supersetFeatureIDs, int[] subsetFeatureIDs) {
+	public SubsetSupersetEObjectEList(Class<?> dataClass,
+			InternalEObject owner, int featureID, int[] supersetFeatureIDs,
+			int[] subsetFeatureIDs) {
 		super(dataClass, owner, featureID);
 
 		this.supersetFeatureIDs = supersetFeatureIDs;
@@ -89,7 +97,8 @@
 					.getEStructuralFeature(supersetFeatureIDs[i]);
 
 				if (supersetEStructuralFeature.isMany()) {
-					EList supersetEList = (EList) owner
+					@SuppressWarnings("unchecked")
+					EList<Object> supersetEList = (EList<Object>) owner
 						.eGet(supersetEStructuralFeature);
 
 					if (!supersetEList.contains(object)) {
@@ -110,8 +119,10 @@
 					.getEStructuralFeature(subsetFeatureIDs[i]);
 
 				if (subsetEStructuralFeature.isMany()) {
-					((EList) owner.eGet(subsetEStructuralFeature))
-						.remove(object);
+					@SuppressWarnings("unchecked")
+					EList<Object> list = ((EList<Object>) owner
+						.eGet(subsetEStructuralFeature));
+					list.remove(object);
 				} else if (object.equals(owner.eGet(subsetEStructuralFeature))) {
 					owner.eSet(subsetEStructuralFeature, null);
 				}
@@ -120,8 +131,8 @@
 		}
 	}
 
-	public NotificationChain basicAdd(Object object,
-			NotificationChain notifications) {
+	@Override
+	public NotificationChain basicAdd(E object, NotificationChain notifications) {
 		notifications = super.basicAdd(object, notifications);
 
 		supersetAdd(object);
@@ -129,7 +140,8 @@
 		return notifications;
 	}
 
-	public NotificationChain basicSet(int index, Object object,
+	@Override
+	public NotificationChain basicSet(int index, E object,
 			NotificationChain notifications) {
 		Object oldObject = data[index];
 
@@ -144,13 +156,15 @@
 		return notifications;
 	}
 
-	public void add(int index, Object object) {
+	@Override
+	public void add(int index, E object) {
 		super.add(index, object);
 
 		supersetAdd(object);
 	}
 
-	public boolean add(Object object) {
+	@Override
+	public boolean add(E object) {
 		boolean result = super.add(object);
 
 		supersetAdd(object);
@@ -158,28 +172,33 @@
 		return result;
 	}
 
-	public boolean addAll(Collection collection) {
+	@Override
+	public boolean addAll(Collection<? extends E> collection) {
 		boolean result = super.addAll(collection);
 
-		for (Iterator elements = collection.iterator(); elements.hasNext();) {
+		for (Iterator<? extends E> elements = collection.iterator(); elements
+			.hasNext();) {
 			supersetAdd(elements.next());
 		}
 
 		return result;
 	}
 
-	public boolean addAll(int index, Collection collection) {
+	@Override
+	public boolean addAll(int index, Collection<? extends E> collection) {
 		boolean result = super.addAll(index, collection);
 
-		for (Iterator elements = collection.iterator(); elements.hasNext();) {
+		for (Iterator<? extends E> elements = collection.iterator(); elements
+			.hasNext();) {
 			supersetAdd(elements.next());
 		}
 
 		return result;
 	}
 
-	public Object set(int index, Object object) {
-		Object result = super.set(index, object);
+	@Override
+	public E set(int index, E object) {
+		E result = super.set(index, object);
 
 		supersetAdd(object);
 
@@ -190,7 +209,8 @@
 		return result;
 	}
 
-	protected void didRemove(int index, Object oldObject) {
+	@Override
+	protected void didRemove(int index, E oldObject) {
 		super.didRemove(index, oldObject);
 
 		subsetRemove(oldObject);
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectResolvingEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectResolvingEList.java
index 4cc587e..5298f6d 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectResolvingEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectResolvingEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetSupersetEObjectResolvingEList.java,v 1.2 2006/10/18 18:46:45 khussey Exp $
+ * $Id: SubsetSupersetEObjectResolvingEList.java,v 1.3 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -19,28 +19,35 @@
 /**
  * @since 1.2
  */
-public class SubsetSupersetEObjectResolvingEList
-		extends SubsetSupersetEObjectEList {
+public class SubsetSupersetEObjectResolvingEList<E>
+		extends SubsetSupersetEObjectEList<E> {
 
-	public static class Unsettable
-			extends SubsetSupersetEObjectResolvingEList {
+	private static final long serialVersionUID = 1L;
+
+	public static class Unsettable<E>
+			extends SubsetSupersetEObjectResolvingEList<E> {
+
+		private static final long serialVersionUID = 1L;
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs, int[] subsetFeatureIDs) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs);
 		}
 
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -56,18 +63,21 @@
 		}
 	}
 
-	public SubsetSupersetEObjectResolvingEList(Class dataClass,
+	public SubsetSupersetEObjectResolvingEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] supersetFeatureIDs,
 			int[] subsetFeatureIDs) {
 		super(dataClass, owner, featureID, supersetFeatureIDs, subsetFeatureIDs);
 	}
 
+	@Override
 	protected boolean hasProxies() {
 		return true;
 	}
 
-	protected Object resolve(int index, Object object) {
-		return resolve(index, (EObject) object);
+	@SuppressWarnings("unchecked")
+	@Override
+	protected E resolve(int index, E object) {
+		return (E) resolve(index, (EObject) object);
 	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectWithInverseEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectWithInverseEList.java
index dd13660..83b5b2f 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectWithInverseEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectWithInverseEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetSupersetEObjectWithInverseEList.java,v 1.2 2006/10/18 18:46:45 khussey Exp $
+ * $Id: SubsetSupersetEObjectWithInverseEList.java,v 1.3 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -18,22 +18,29 @@
 /**
  * @since 1.2
  */
-public class SubsetSupersetEObjectWithInverseEList
-		extends SubsetSupersetEObjectEList {
+public class SubsetSupersetEObjectWithInverseEList<E>
+		extends SubsetSupersetEObjectEList<E> {
 
-	public static class Unsettable
-			extends SubsetSupersetEObjectWithInverseEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class ManyInverse
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SubsetSupersetEObjectWithInverseEList<E> {
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class ManyInverse<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] supersetFeatureIDs,
 					int[] subsetFeatureIDs, int inverseFeatureID) {
 				super(dataClass, owner, featureID, supersetFeatureIDs,
 					subsetFeatureIDs, inverseFeatureID);
 			}
 
+			@Override
 			protected boolean hasManyInverse() {
 				return true;
 			}
@@ -41,21 +48,24 @@
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs,
 				int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs, inverseFeatureID);
 		}
 
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -71,16 +81,19 @@
 		}
 	}
 
-	public static class ManyInverse
-			extends SubsetSupersetEObjectWithInverseEList {
+	public static class ManyInverse<E>
+			extends SubsetSupersetEObjectWithInverseEList<E> {
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs,
 				int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs, inverseFeatureID);
 		}
 
+		@Override
 		protected boolean hasManyInverse() {
 			return true;
 		}
@@ -88,7 +101,7 @@
 
 	protected final int inverseFeatureID;
 
-	public SubsetSupersetEObjectWithInverseEList(Class dataClass,
+	public SubsetSupersetEObjectWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] supersetFeatureIDs,
 			int[] subsetFeatureIDs, int inverseFeatureID) {
 		super(dataClass, owner, featureID, supersetFeatureIDs, subsetFeatureIDs);
@@ -96,19 +109,23 @@
 		this.inverseFeatureID = inverseFeatureID;
 	}
 
+	@Override
 	protected boolean hasInverse() {
 		return true;
 	}
 
+	@Override
 	protected boolean hasNavigableInverse() {
 		return true;
 	}
 
+	@Override
 	public int getInverseFeatureID() {
 		return inverseFeatureID;
 	}
 
-	public Class getInverseFeatureClass() {
+	@Override
+	public Class<?> getInverseFeatureClass() {
 		return dataClass;
 	}
 
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectWithInverseResolvingEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectWithInverseResolvingEList.java
index 2ee56f8..00ca7e9 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectWithInverseResolvingEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SubsetSupersetEObjectWithInverseResolvingEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubsetSupersetEObjectWithInverseResolvingEList.java,v 1.2 2006/10/18 18:46:45 khussey Exp $
+ * $Id: SubsetSupersetEObjectWithInverseResolvingEList.java,v 1.3 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -19,22 +19,29 @@
 /**
  * @since 1.2
  */
-public class SubsetSupersetEObjectWithInverseResolvingEList
-		extends SubsetSupersetEObjectWithInverseEList {
+public class SubsetSupersetEObjectWithInverseResolvingEList<E>
+		extends SubsetSupersetEObjectWithInverseEList<E> {
 
-	public static class Unsettable
-			extends SubsetSupersetEObjectWithInverseResolvingEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class ManyInverse
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SubsetSupersetEObjectWithInverseResolvingEList<E> {
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class ManyInverse<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] supersetFeatureIDs,
 					int[] subsetFeatureIDs, int inverseFeatureID) {
 				super(dataClass, owner, featureID, supersetFeatureIDs,
 					subsetFeatureIDs, inverseFeatureID);
 			}
 
+			@Override
 			protected boolean hasManyInverse() {
 				return true;
 			}
@@ -42,21 +49,24 @@
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs,
 				int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs, inverseFeatureID);
 		}
 
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -72,34 +82,40 @@
 		}
 	}
 
-	public static class ManyInverse
-			extends SubsetSupersetEObjectWithInverseResolvingEList {
+	public static class ManyInverse<E>
+			extends SubsetSupersetEObjectWithInverseResolvingEList<E> {
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] supersetFeatureIDs,
 				int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, supersetFeatureIDs,
 				subsetFeatureIDs, inverseFeatureID);
 		}
 
+		@Override
 		protected boolean hasManyInverse() {
 			return true;
 		}
 	}
 
-	public SubsetSupersetEObjectWithInverseResolvingEList(Class dataClass,
+	public SubsetSupersetEObjectWithInverseResolvingEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] supersetFeatureIDs,
 			int[] subsetFeatureIDs, int inverseFeatureID) {
 		super(dataClass, owner, featureID, supersetFeatureIDs,
 			subsetFeatureIDs, inverseFeatureID);
 	}
 
+	@Override
 	protected boolean hasProxies() {
 		return true;
 	}
 
-	protected Object resolve(int index, Object object) {
-		return resolve(index, (EObject) object);
+	@SuppressWarnings("unchecked")
+	@Override
+	protected E resolve(int index, E object) {
+		return (E) resolve(index, (EObject) object);
 	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectContainmentEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectContainmentEList.java
index 0e161f7..87bb5bd 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectContainmentEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectContainmentEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SupersetEObjectContainmentEList.java,v 1.3 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SupersetEObjectContainmentEList.java,v 1.4 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -16,72 +16,67 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectContainmentEList
- */
-public class SupersetEObjectContainmentEList
-		extends SupersetEObjectEList {
+@Deprecated
+public class SupersetEObjectContainmentEList<E>
+		extends SupersetEObjectEList<E> {
 
-	public static class Unsettable
-			extends SupersetEObjectContainmentEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class Resolving
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SupersetEObjectContainmentEList<E> {
 
-			public Resolving(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class Resolving<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] subsetFeatureIDs) {
 				super(dataClass, owner, featureID, subsetFeatureIDs);
 			}
 
-			public Resolving(Class dataClass, InternalEObject owner,
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int subsetFeatureID) {
 				this(dataClass, owner, featureID, new int[]{subsetFeatureID});
 			}
 
+			@Override
 			protected boolean hasProxies() {
 				return true;
 			}
 
-			protected Object resolve(int index, Object object) {
-				return resolve(index, (EObject) object);
+			@SuppressWarnings("unchecked")
+			@Override
+			protected E resolve(int index, E object) {
+				return (E) resolve(index, (EObject) object);
 			}
 		}
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] subsetFeatureIDs) {
 			super(dataClass, owner, featureID, subsetFeatureIDs);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int subsetFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID});
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -97,61 +92,54 @@
 		}
 	}
 
-	public static class Resolving
-			extends SupersetEObjectContainmentEList {
+	public static class Resolving<E>
+			extends SupersetEObjectContainmentEList<E> {
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int[] subsetFeatureIDs) {
+		private static final long serialVersionUID = 1L;
+
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int[] subsetFeatureIDs) {
 			super(dataClass, owner, featureID, subsetFeatureIDs);
 		}
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int subsetFeatureID) {
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int subsetFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID});
 		}
 
+		@Override
 		protected boolean hasProxies() {
 			return true;
 		}
 
-		protected Object resolve(int index, Object object) {
-			return resolve(index, (EObject) object);
+		@SuppressWarnings("unchecked")
+		@Override
+		protected E resolve(int index, E object) {
+			return (E) resolve(index, (EObject) object);
 		}
 	}
 
-	public SupersetEObjectContainmentEList(Class dataClass,
+	public SupersetEObjectContainmentEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] subsetFeatureIDs) {
 		super(dataClass, owner, featureID, subsetFeatureIDs);
 	}
 
-	public SupersetEObjectContainmentEList(Class dataClass,
+	public SupersetEObjectContainmentEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int subsetFeatureID) {
 		this(dataClass, owner, featureID, new int[]{subsetFeatureID});
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#hasInverse()
-	 */
+	@Override
 	protected boolean hasInverse() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasNavigableInverse()
-	 */
+	@Override
 	protected boolean hasNavigableInverse() {
 		return false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#isContainment()
-	 */
+	@Override
 	protected boolean isContainment() {
 		return true;
 	}
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectContainmentWithInverseEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectContainmentWithInverseEList.java
index a27a0a7..b0f8266 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectContainmentWithInverseEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectContainmentWithInverseEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SupersetEObjectContainmentWithInverseEList.java,v 1.3 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SupersetEObjectContainmentWithInverseEList.java,v 1.4 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -16,76 +16,71 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectContainmentWithInverseEList
- */
-public class SupersetEObjectContainmentWithInverseEList
-		extends SupersetEObjectContainmentEList {
+@Deprecated
+public class SupersetEObjectContainmentWithInverseEList<E>
+		extends SupersetEObjectContainmentEList<E> {
 
-	public static class Unsettable
-			extends SupersetEObjectContainmentWithInverseEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class Resolving
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SupersetEObjectContainmentWithInverseEList<E> {
 
-			public Resolving(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class Resolving<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
 				super(dataClass, owner, featureID, subsetFeatureIDs,
 					inverseFeatureID);
 			}
 
-			public Resolving(Class dataClass, InternalEObject owner,
+			public Resolving(Class<?> dataClass, InternalEObject owner,
 					int featureID, int subsetFeatureID, int inverseFeatureID) {
 				this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 					inverseFeatureID);
 			}
 
+			@Override
 			protected boolean hasProxies() {
 				return true;
 			}
 
-			protected Object resolve(int index, Object object) {
-				return resolve(index, (EObject) object);
+			@SuppressWarnings("unchecked")
+			@Override
+			protected E resolve(int index, E object) {
+				return (E) resolve(index, (EObject) object);
 			}
 		}
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, subsetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int subsetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -101,33 +96,38 @@
 		}
 	}
 
-	public static class Resolving
-			extends SupersetEObjectContainmentWithInverseEList {
+	public static class Resolving<E>
+			extends SupersetEObjectContainmentWithInverseEList<E> {
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int[] subsetFeatureIDs, int inverseFeatureID) {
+		private static final long serialVersionUID = 1L;
+
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, subsetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public Resolving(Class dataClass, InternalEObject owner, int featureID,
-				int subsetFeatureID, int inverseFeatureID) {
+		public Resolving(Class<?> dataClass, InternalEObject owner,
+				int featureID, int subsetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 				inverseFeatureID);
 		}
 
+		@Override
 		protected boolean hasProxies() {
 			return true;
 		}
 
-		protected Object resolve(int index, Object object) {
-			return resolve(index, (EObject) object);
+		@SuppressWarnings("unchecked")
+		@Override
+		protected E resolve(int index, E object) {
+			return (E) resolve(index, (EObject) object);
 		}
 	}
 
 	protected final int inverseFeatureID;
 
-	public SupersetEObjectContainmentWithInverseEList(Class dataClass,
+	public SupersetEObjectContainmentWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] subsetFeatureIDs,
 			int inverseFeatureID) {
 		super(dataClass, owner, featureID, subsetFeatureIDs);
@@ -135,37 +135,25 @@
 		this.inverseFeatureID = inverseFeatureID;
 	}
 
-	public SupersetEObjectContainmentWithInverseEList(Class dataClass,
+	public SupersetEObjectContainmentWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int subsetFeatureID,
 			int inverseFeatureID) {
 		this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 			inverseFeatureID);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasNavigableInverse()
-	 */
+	@Override
 	protected boolean hasNavigableInverse() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#getInverseFeatureID()
-	 */
+	@Override
 	public int getInverseFeatureID() {
 		return inverseFeatureID;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#getInverseFeatureClass()
-	 */
-	public Class getInverseFeatureClass() {
+	@Override
+	public Class<?> getInverseFeatureClass() {
 		return dataClass;
 	}
 
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectEList.java
index d0cd4c8..3b353b6 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SupersetEObjectEList.java,v 1.2 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SupersetEObjectEList.java,v 1.3 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -19,50 +19,40 @@
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.util.EObjectEList;
 
-/**
- * @deprecated Use SubsetSupersetEObjectEList
- */
-public class SupersetEObjectEList
-		extends EObjectEList {
+@Deprecated
+public class SupersetEObjectEList<E>
+		extends EObjectEList<E> {
 
-	public static class Unsettable
-			extends SupersetEObjectEList {
+	private static final long serialVersionUID = 1L;
+
+	public static class Unsettable<E>
+			extends SupersetEObjectEList<E> {
+
+		private static final long serialVersionUID = 1L;
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] subsetFeatureIDs) {
 			super(dataClass, owner, featureID, subsetFeatureIDs);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int subsetFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID});
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -80,14 +70,14 @@
 
 	protected final int[] subsetFeatureIDs;
 
-	public SupersetEObjectEList(Class dataClass, InternalEObject owner,
+	public SupersetEObjectEList(Class<?> dataClass, InternalEObject owner,
 			int featureID, int[] subsetFeatureIDs) {
 		super(dataClass, owner, featureID);
 
 		this.subsetFeatureIDs = subsetFeatureIDs;
 	}
 
-	public SupersetEObjectEList(Class dataClass, InternalEObject owner,
+	public SupersetEObjectEList(Class<?> dataClass, InternalEObject owner,
 			int featureID, int subsetFeatureID) {
 		this(dataClass, owner, featureID, new int[]{subsetFeatureID});
 	}
@@ -101,7 +91,7 @@
 					.getEStructuralFeature(subsetFeatureIDs[i]);
 
 				if (subsetEStructuralFeature.isMany()) {
-					((EList) owner.eGet(subsetEStructuralFeature))
+					((EList<?>) owner.eGet(subsetEStructuralFeature))
 						.remove(object);
 				} else if (object.equals(owner.eGet(subsetEStructuralFeature))) {
 					owner.eSet(subsetEStructuralFeature, null);
@@ -110,25 +100,15 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.util.BasicEList#didRemove(int,
-	 *      java.lang.Object)
-	 */
-	protected void didRemove(int index, Object oldObject) {
+	@Override
+	protected void didRemove(int index, E oldObject) {
 		super.didRemove(index, oldObject);
 
 		subsetRemove(oldObject);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#basicSet(int,
-	 *      java.lang.Object, org.eclipse.emf.common.notify.NotificationChain)
-	 */
-	public NotificationChain basicSet(int index, Object object,
+	@Override
+	public NotificationChain basicSet(int index, E object,
 			NotificationChain notifications) {
 		Object oldObject = data[index];
 
@@ -141,13 +121,9 @@
 		return notifications;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.List#set(int, java.lang.Object)
-	 */
-	public Object set(int index, Object object) {
-		Object result = super.set(index, object);
+	@Override
+	public E set(int index, E object) {
+		E result = super.set(index, object);
 
 		if (result != object) {
 			subsetRemove(result);
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectResolvingEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectResolvingEList.java
index 3e88c87..a28dd70 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectResolvingEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectResolvingEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SupersetEObjectResolvingEList.java,v 1.2 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SupersetEObjectResolvingEList.java,v 1.3 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -16,50 +16,40 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectResolvingEList
- */
-public class SupersetEObjectResolvingEList
-		extends SupersetEObjectEList {
+@Deprecated
+public class SupersetEObjectResolvingEList<E>
+		extends SupersetEObjectEList<E> {
 
-	public static class Unsettable
-			extends SupersetEObjectResolvingEList {
+	private static final long serialVersionUID = 1L;
+
+	public static class Unsettable<E>
+			extends SupersetEObjectResolvingEList<E> {
+
+		private static final long serialVersionUID = 1L;
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] subsetFeatureIDs) {
 			super(dataClass, owner, featureID, subsetFeatureIDs);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int subsetFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID});
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -75,33 +65,25 @@
 		}
 	}
 
-	public SupersetEObjectResolvingEList(Class dataClass,
+	public SupersetEObjectResolvingEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] subsetFeatureIDs) {
 		super(dataClass, owner, featureID, subsetFeatureIDs);
 	}
 
-	public SupersetEObjectResolvingEList(Class dataClass,
+	public SupersetEObjectResolvingEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int subsetFeatureID) {
 		this(dataClass, owner, featureID, new int[]{subsetFeatureID});
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasProxies()
-	 */
+	@Override
 	protected boolean hasProxies() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.util.BasicEList#resolve(int,
-	 *      java.lang.Object)
-	 */
-	protected Object resolve(int index, Object object) {
-		return resolve(index, (EObject) object);
+	@SuppressWarnings("unchecked")
+	@Override
+	protected E resolve(int index, E object) {
+		return (E) resolve(index, (EObject) object);
 	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectWithInverseEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectWithInverseEList.java
index 894211d..fd8b170 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectWithInverseEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectWithInverseEList.java
@@ -8,42 +8,42 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SupersetEObjectWithInverseEList.java,v 1.2 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SupersetEObjectWithInverseEList.java,v 1.3 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectWithInverseEList
- */
-public class SupersetEObjectWithInverseEList
-		extends SupersetEObjectEList {
+@Deprecated
+public class SupersetEObjectWithInverseEList<E>
+		extends SupersetEObjectEList<E> {
 
-	public static class Unsettable
-			extends SupersetEObjectWithInverseEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class ManyInverse
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SupersetEObjectWithInverseEList<E> {
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class ManyInverse<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
 				super(dataClass, owner, featureID, subsetFeatureIDs,
 					inverseFeatureID);
 			}
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int subsetFeatureID, int inverseFeatureID) {
 				this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 					inverseFeatureID);
 			}
 
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.emf.ecore.util.EcoreEList#hasManyInverse()
-			 */
+			@Override
 			protected boolean hasManyInverse() {
 				return true;
 			}
@@ -51,41 +51,29 @@
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, subsetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int subsetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -101,26 +89,24 @@
 		}
 	}
 
-	public static class ManyInverse
-			extends SupersetEObjectWithInverseEList {
+	public static class ManyInverse<E>
+			extends SupersetEObjectWithInverseEList<E> {
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, subsetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int subsetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.util.EcoreEList#hasManyInverse()
-		 */
+		@Override
 		protected boolean hasManyInverse() {
 			return true;
 		}
@@ -128,7 +114,7 @@
 
 	protected final int inverseFeatureID;
 
-	public SupersetEObjectWithInverseEList(Class dataClass,
+	public SupersetEObjectWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] subsetFeatureIDs,
 			int inverseFeatureID) {
 		super(dataClass, owner, featureID, subsetFeatureIDs);
@@ -136,46 +122,30 @@
 		this.inverseFeatureID = inverseFeatureID;
 	}
 
-	public SupersetEObjectWithInverseEList(Class dataClass,
+	public SupersetEObjectWithInverseEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int subsetFeatureID,
 			int inverseFeatureID) {
 		this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 			inverseFeatureID);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#hasInverse()
-	 */
+	@Override
 	protected boolean hasInverse() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasNavigableInverse()
-	 */
+	@Override
 	protected boolean hasNavigableInverse() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#getInverseFeatureID()
-	 */
+	@Override
 	public int getInverseFeatureID() {
 		return inverseFeatureID;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#getInverseFeatureClass()
-	 */
-	public Class getInverseFeatureClass() {
+	@Override
+	public Class<?> getInverseFeatureClass() {
 		return dataClass;
 	}
 
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectWithInverseResolvingEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectWithInverseResolvingEList.java
index 9074f84..ace1cdb 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectWithInverseResolvingEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/SupersetEObjectWithInverseResolvingEList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SupersetEObjectWithInverseResolvingEList.java,v 1.2 2006/01/05 13:49:53 khussey Exp $
+ * $Id: SupersetEObjectWithInverseResolvingEList.java,v 1.3 2006/12/14 15:47:33 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -16,35 +16,35 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 
-/**
- * @deprecated Use SubsetSupersetEObjectWithInverseResolvingEList
- */
-public class SupersetEObjectWithInverseResolvingEList
-		extends SupersetEObjectWithInverseEList {
+@Deprecated
+public class SupersetEObjectWithInverseResolvingEList<E>
+		extends SupersetEObjectWithInverseEList<E> {
 
-	public static class Unsettable
-			extends SupersetEObjectWithInverseResolvingEList {
+	private static final long serialVersionUID = 1L;
 
-		public static class ManyInverse
-				extends Unsettable {
+	public static class Unsettable<E>
+			extends SupersetEObjectWithInverseResolvingEList<E> {
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public static class ManyInverse<E>
+				extends Unsettable<E> {
+
+			private static final long serialVersionUID = 1L;
+
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
 				super(dataClass, owner, featureID, subsetFeatureIDs,
 					inverseFeatureID);
 			}
 
-			public ManyInverse(Class dataClass, InternalEObject owner,
+			public ManyInverse(Class<?> dataClass, InternalEObject owner,
 					int featureID, int subsetFeatureID, int inverseFeatureID) {
 				this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 					inverseFeatureID);
 			}
 
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.emf.ecore.util.EcoreEList#hasManyInverse()
-			 */
+			@Override
 			protected boolean hasManyInverse() {
 				return true;
 			}
@@ -52,41 +52,29 @@
 
 		protected boolean isSet;
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, subsetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public Unsettable(Class dataClass, InternalEObject owner,
+		public Unsettable(Class<?> dataClass, InternalEObject owner,
 				int featureID, int subsetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.util.BasicEList#didChange()
-		 */
+		@Override
 		protected void didChange() {
 			isSet = true;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.common.notify.impl.NotifyingListImpl#isSet()
-		 */
+		@Override
 		public boolean isSet() {
 			return isSet;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset()
-		 */
+		@Override
 		public void unset() {
 			super.unset();
 
@@ -102,61 +90,51 @@
 		}
 	}
 
-	public static class ManyInverse
-			extends SupersetEObjectWithInverseResolvingEList {
+	public static class ManyInverse<E>
+			extends SupersetEObjectWithInverseResolvingEList<E> {
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		private static final long serialVersionUID = 1L;
+
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
 			super(dataClass, owner, featureID, subsetFeatureIDs,
 				inverseFeatureID);
 		}
 
-		public ManyInverse(Class dataClass, InternalEObject owner,
+		public ManyInverse(Class<?> dataClass, InternalEObject owner,
 				int featureID, int subsetFeatureID, int inverseFeatureID) {
 			this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 				inverseFeatureID);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.emf.ecore.util.EcoreEList#hasManyInverse()
-		 */
+		@Override
 		protected boolean hasManyInverse() {
 			return true;
 		}
 	}
 
-	public SupersetEObjectWithInverseResolvingEList(Class dataClass,
+	public SupersetEObjectWithInverseResolvingEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int[] subsetFeatureIDs,
 			int inverseFeatureID) {
 		super(dataClass, owner, featureID, subsetFeatureIDs, inverseFeatureID);
 	}
 
-	public SupersetEObjectWithInverseResolvingEList(Class dataClass,
+	public SupersetEObjectWithInverseResolvingEList(Class<?> dataClass,
 			InternalEObject owner, int featureID, int subsetFeatureID,
 			int inverseFeatureID) {
 		this(dataClass, owner, featureID, new int[]{subsetFeatureID},
 			inverseFeatureID);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.util.EcoreEList#hasProxies()
-	 */
+	@Override
 	protected boolean hasProxies() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.util.BasicEList#resolve(int,
-	 *      java.lang.Object)
-	 */
-	protected Object resolve(int index, Object object) {
-		return resolve(index, (EObject) object);
+	@SuppressWarnings("unchecked")
+	@Override
+	protected E resolve(int index, E object) {
+		return (E) resolve(index, (EObject) object);
 	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/UML2Util.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/UML2Util.java
index 02980d3..47b46f4 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/UML2Util.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/UML2Util.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: UML2Util.java,v 1.25 2006/10/25 18:12:16 khussey Exp $
+ * $Id: UML2Util.java,v 1.26 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -27,6 +27,7 @@
 import java.util.ResourceBundle;
 
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.common.util.AbstractTreeIterator;
 import org.eclipse.emf.common.util.DiagnosticChain;
 import org.eclipse.emf.common.util.TreeIterator;
@@ -47,7 +48,6 @@
 import org.eclipse.emf.ecore.EcoreFactory;
 import org.eclipse.emf.ecore.EcorePackage;
 import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.plugin.EcorePlugin;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.URIConverter;
@@ -107,11 +107,6 @@
 			this.eObject = eObject;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.uml2.common.util.UML2Util.EObjectMatcher#matches(org.eclipse.emf.ecore.EObject)
-		 */
 		public boolean matches(EObject otherEObject) {
 			return eObject == null
 				? false
@@ -147,13 +142,9 @@
 			this.eStructuralFeature = eStructuralFeature;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.uml2.common.util.UML2Util.EClassMatcher#matches(org.eclipse.emf.ecore.EObject)
-		 */
+		@Override
 		public boolean matches(EObject otherEObject) {
-			return super.matches(eObject)
+			return super.matches(otherEObject)
 				&& safeEquals(eObject.eGet(eStructuralFeature), otherEObject
 					.eGet(eStructuralFeature));
 		}
@@ -180,8 +171,10 @@
 		 *            The cache of context-specific information.
 		 * @return Another representation of the objects.
 		 */
-		Collection convert(Collection eObjects, Map options,
-				DiagnosticChain diagnostics, Map context);
+		Collection<? extends EObject> convert(
+				Collection<? extends EObject> eObjects,
+				Map<String, String> options, DiagnosticChain diagnostics,
+				Map<Object, Object> context);
 
 	}
 
@@ -245,8 +238,8 @@
 	/**
 	 * A cache of resource bundles.
 	 */
-	protected static final Map RESOURCE_BUNDLES = Collections
-		.synchronizedMap(new HashMap());
+	protected static final Map<Resource, Map<Locale, ResourceBundle>> RESOURCE_BUNDLES = Collections
+		.synchronizedMap(new HashMap<Resource, Map<Locale, ResourceBundle>>());
 
 	/**
 	 * The empty string.
@@ -295,9 +288,9 @@
 	 * @return The candidate resource bundle URIs with the base URI and base
 	 *         segment in the locale.
 	 */
-	protected static List getResourceBundleURIs(URI baseURI, Locale locale,
-			String baseSegment) {
-		List resourceBundleURIs = new ArrayList();
+	protected static List<URI> getResourceBundleURIs(URI baseURI,
+			Locale locale, String baseSegment) {
+		List<URI> resourceBundleURIs = new ArrayList<URI>();
 		String language = locale.getLanguage();
 
 		if (language.length() > 0) {
@@ -338,8 +331,8 @@
 	 * @return The candidate resource bundle URIs for the URI in the locale (if
 	 *         specified).
 	 */
-	protected static List getResourceBundleURIs(URI uri, Locale locale) {
-		List resourceBundleURIs = new ArrayList();
+	protected static List<URI> getResourceBundleURIs(URI uri, Locale locale) {
+		List<URI> resourceBundleURIs = new ArrayList<URI>();
 		URI baseURI = uri.trimSegments(1);
 		String baseSegment = uri.trimFileExtension().lastSegment();
 
@@ -379,11 +372,12 @@
 		Resource resource = eObject.eResource();
 
 		if (resource != null) {
-			Map resourceBundles = (Map) RESOURCE_BUNDLES.get(resource);
+			Map<Locale, ResourceBundle> resourceBundles = RESOURCE_BUNDLES
+				.get(resource);
 
 			if (resourceBundles == null) {
 				RESOURCE_BUNDLES.put(resource, resourceBundles = Collections
-					.synchronizedMap(new HashMap()));
+					.synchronizedMap(new HashMap<Locale, ResourceBundle>()));
 			}
 
 			if (!resourceBundles.containsKey(locale)) {
@@ -393,9 +387,10 @@
 					: resourceSet.getURIConverter();
 
 				URI uri = resource.getURI();
-				List resourceBundleURIs = getResourceBundleURIs(uri, locale);
+				List<URI> resourceBundleURIs = getResourceBundleURIs(uri,
+					locale);
 
-				if (EcorePlugin.IS_ECLIPSE_RUNNING) {
+				if (EMFPlugin.IS_ECLIPSE_RUNNING) {
 					URI normalizedURI = uriConverter.normalize(uri);
 					int segmentCount = normalizedURI.segmentCount();
 
@@ -410,7 +405,7 @@
 							Bundle[] fragments = Platform.getFragments(bundle);
 
 							if (fragments != null) {
-								String[] trailingSegments = (String[]) normalizedURI
+								String[] trailingSegments = normalizedURI
 									.segmentsList().subList(2, segmentCount)
 									.toArray(new String[]{});
 
@@ -430,12 +425,12 @@
 
 				ResourceBundle resourceBundle = null;
 
-				for (Iterator rbu = resourceBundleURIs.iterator(); rbu
+				for (Iterator<URI> rbu = resourceBundleURIs.iterator(); rbu
 					.hasNext();) {
 
 					try {
 						InputStream inputStream = uriConverter
-							.createInputStream((URI) rbu.next());
+							.createInputStream(rbu.next());
 						try {
 							resourceBundle = new PropertyResourceBundle(
 								inputStream);
@@ -451,7 +446,7 @@
 				resourceBundles.put(locale, resourceBundle);
 			}
 
-			return (ResourceBundle) resourceBundles.get(locale);
+			return resourceBundles.get(locale);
 		}
 
 		return null;
@@ -570,7 +565,7 @@
 			if (eContainingFeature.isMany()) {
 				qualifiedText.append(' ');
 
-				List list = (List) eObject.eContainer().eGet(
+				List<?> list = (List<?>) eObject.eContainer().eGet(
 					eContainingFeature, false);
 
 				qualifiedText.append('[');
@@ -587,7 +582,8 @@
 		return qualifiedText;
 	}
 
-	protected static String getMessageSubstitution(Map context, Object object) {
+	protected static String getMessageSubstitution(Map<Object, Object> context,
+			Object object) {
 
 		if (object instanceof EObject) {
 			EObject eObject = (EObject) object;
@@ -621,19 +617,20 @@
 		}
 	}
 
-	protected static Object[] getMessageSubstitutions(Map context,
-			Object object0) {
+	protected static Object[] getMessageSubstitutions(
+			Map<Object, Object> context, Object object0) {
 		return new Object[]{getMessageSubstitution(context, object0)};
 	}
 
-	protected static Object[] getMessageSubstitutions(Map context,
-			Object object0, Object object1) {
+	protected static Object[] getMessageSubstitutions(
+			Map<Object, Object> context, Object object0, Object object1) {
 		return new Object[]{getMessageSubstitution(context, object0),
 			getMessageSubstitution(context, object1)};
 	}
 
-	protected static Object[] getMessageSubstitutions(Map context,
-			Object object0, Object object1, Object object2) {
+	protected static Object[] getMessageSubstitutions(
+			Map<Object, Object> context, Object object0, Object object1,
+			Object object2) {
 		return new Object[]{getMessageSubstitution(context, object0),
 			getMessageSubstitution(context, object1),
 			getMessageSubstitution(context, object2)};
@@ -680,7 +677,8 @@
 	 *            The matcher to be used.
 	 * @return The first object that matches the criteria.
 	 */
-	public static EObject findEObject(Collection eObjects, EObjectMatcher filter) {
+	public static <T> T findEObject(Collection<? extends EObject> eObjects,
+			EObjectMatcher filter) {
 		return findEObject(eObjects.iterator(), filter);
 	}
 
@@ -694,13 +692,16 @@
 	 *            The matcher to be used.
 	 * @return The first object that matches the criteria.
 	 */
-	public static EObject findEObject(Iterator iterator, EObjectMatcher filter) {
+	public static <T> T findEObject(Iterator<? extends EObject> iterator,
+			EObjectMatcher filter) {
 
 		while (iterator.hasNext()) {
-			EObject eObject = (EObject) iterator.next();
+			EObject eObject = iterator.next();
 
 			if (filter.matches(eObject)) {
-				return eObject;
+				@SuppressWarnings("unchecked")
+				T t = (T) eObject;
+				return t;
 			}
 		}
 
@@ -713,14 +714,15 @@
 		if (eType == null || eType.equals(otherEType)) {
 			return eType;
 		} else {
-			return (EClassifier) new EcoreSwitch() {
+			return new EcoreSwitch<EClassifier>() {
 
-				public Object caseEClassifier(EClassifier eClassifier) {
-
+				@Override
+				public EClassifier caseEClassifier(EClassifier eClassifier) {
 					return EcorePackage.eINSTANCE.getEObject();
 				}
 
-				public Object caseEClass(EClass eClass) {
+				@Override
+				public EClassifier caseEClass(EClass eClass) {
 
 					if (otherEType instanceof EClass) {
 						EClass otherEClass = (EClass) otherEType;
@@ -731,23 +733,22 @@
 							return otherEClass;
 						}
 
-						for (Iterator eAllSuperTypes = eClass
+						for (Iterator<EClass> eAllSuperTypes = eClass
 							.getEAllSuperTypes().iterator(); eAllSuperTypes
 							.hasNext();) {
 
-							EClass eSuperType = (EClass) eAllSuperTypes.next();
+							EClass eSuperType = eAllSuperTypes.next();
 
 							if (eSuperType.isSuperTypeOf(otherEClass)) {
 								return eSuperType;
 							}
 						}
 
-						for (Iterator otherEAllSuperTypes = otherEClass
+						for (Iterator<EClass> otherEAllSuperTypes = otherEClass
 							.getEAllSuperTypes().iterator(); otherEAllSuperTypes
 							.hasNext();) {
 
-							EClass otherESuperType = (EClass) otherEAllSuperTypes
-								.next();
+							EClass otherESuperType = otherEAllSuperTypes.next();
 
 							if (otherESuperType.isSuperTypeOf(eClass)) {
 								return otherESuperType;
@@ -758,7 +759,8 @@
 					return super.caseEClass(eClass);
 				}
 
-				public Object caseEDataType(EDataType eDataType) {
+				@Override
+				public EClassifier caseEDataType(EDataType eDataType) {
 					return otherEType instanceof EDataType
 						&& eDataType.getInstanceClass().equals(
 							((EDataType) otherEType).getInstanceClass())
@@ -766,7 +768,8 @@
 						: EcorePackage.eINSTANCE.getEJavaObject();
 				}
 
-				public Object caseEEnum(EEnum eEnum) {
+				@Override
+				public EClassifier caseEEnum(EEnum eEnum) {
 					return otherEType instanceof EEnum
 						? EcorePackage.eINSTANCE.getEEnumerator()
 						: EcorePackage.eINSTANCE.getEJavaObject();
@@ -942,7 +945,7 @@
 	 *            The classifier in question.
 	 * @return The number of the instances of the classifier.
 	 */
-	public static int getInstanceCount(Iterator iterator,
+	public static int getInstanceCount(Iterator<?> iterator,
 			EClassifier eClassifier) {
 		int count = 0;
 
@@ -962,7 +965,7 @@
 		if (isEmpty(constraint)) {
 			return false;
 		} else {
-			List constraints = new ArrayList(EcoreUtil
+			List<String> constraints = new ArrayList<String>(EcoreUtil
 				.getConstraints(eModelElement));
 
 			boolean result = constraints.add(constraint);
@@ -985,11 +988,12 @@
 		}
 	}
 
-	protected static Collection getRootContainers(Collection eObjects) {
-		Collection rootContainers = new UniqueEList.FastCompare();
+	protected static Collection<EObject> getRootContainers(
+			Collection<? extends EObject> eObjects) {
+		Collection<EObject> rootContainers = new UniqueEList.FastCompare<EObject>();
 
-		for (Iterator i = eObjects.iterator(); i.hasNext();) {
-			rootContainers.add(EcoreUtil.getRootContainer((EObject) i.next()));
+		for (Iterator<? extends EObject> i = eObjects.iterator(); i.hasNext();) {
+			rootContainers.add(EcoreUtil.getRootContainer(i.next()));
 		}
 
 		return rootContainers;
@@ -1008,14 +1012,19 @@
 	 *            Whether to copy contents while iterating.
 	 * @return A content tree iterator.
 	 */
-	public static TreeIterator getAllContents(EObject eObject,
+	public static <T> TreeIterator<T> getAllContents(EObject eObject,
 			boolean includeRoot, final boolean defensiveCopy) {
-		return new AbstractTreeIterator(eObject, includeRoot) {
+		return new AbstractTreeIterator<T>(eObject, includeRoot) {
 
-			protected Iterator getChildren(Object object) {
-				return defensiveCopy
-					? new ArrayList(((EObject) object).eContents()).iterator()
-					: ((EObject) object).eContents().iterator();
+			private static final long serialVersionUID = 1L;
+
+			@SuppressWarnings("unchecked")
+			@Override
+			protected Iterator<T> getChildren(Object object) {
+				return (Iterator<T>) (defensiveCopy
+					? new ArrayList<EObject>(((EObject) object).eContents())
+						.iterator()
+					: ((EObject) object).eContents().iterator());
 			}
 		};
 	}
@@ -1068,11 +1077,12 @@
 	 *            The referenced object.
 	 * @return The non-navigable inverse references to the object.
 	 */
-	public static Collection getNonNavigableInverseReferences(EObject eObject) {
+	public static Collection<EStructuralFeature.Setting> getNonNavigableInverseReferences(
+			EObject eObject) {
 		ECrossReferenceAdapter crossReferenceAdapter = ECrossReferenceAdapter
 			.getCrossReferenceAdapter(eObject);
 		return crossReferenceAdapter == null
-			? Collections.EMPTY_LIST
+			? Collections.<EStructuralFeature.Setting> emptyList()
 			: crossReferenceAdapter.getNonNavigableInverseReferences(eObject);
 	}
 
@@ -1083,45 +1093,39 @@
 	 *            The referenced object.
 	 * @return The inverse references to the object.
 	 */
-	public static Collection getInverseReferences(EObject eObject) {
+	public static Collection<EStructuralFeature.Setting> getInverseReferences(
+			EObject eObject) {
 		ECrossReferenceAdapter crossReferenceAdapter = ECrossReferenceAdapter
 			.getCrossReferenceAdapter(eObject);
 		return crossReferenceAdapter == null
-			? Collections.EMPTY_LIST
+			? Collections.<EStructuralFeature.Setting> emptyList()
 			: crossReferenceAdapter.getInverseReferences(eObject);
 	}
 
 	protected static void removeReferences(EObject eObject,
 			EObject ancestorEObject) {
-		List nonNavigableInverseReferences = new ArrayList(
-			getNonNavigableInverseReferences(eObject));
 
-		for (Iterator nnir = nonNavigableInverseReferences.iterator(); nnir
-			.hasNext();) {
+		for (EStructuralFeature.Setting nonNavigableInverseReference : new ArrayList<EStructuralFeature.Setting>(
+			getNonNavigableInverseReferences(eObject))) {
 
-			EStructuralFeature.Setting setting = (EStructuralFeature.Setting) nnir
-				.next();
-
-			if (setting.getEStructuralFeature().isChangeable()
+			if (nonNavigableInverseReference.getEStructuralFeature()
+				.isChangeable()
 				&& (ancestorEObject == null || !EcoreUtil.isAncestor(
-					ancestorEObject, setting.getEObject()))) {
+					ancestorEObject, nonNavigableInverseReference.getEObject()))) {
 
-				EcoreUtil.remove(setting, eObject);
+				EcoreUtil.remove(nonNavigableInverseReference, eObject);
 			}
 		}
 
-		for (Iterator eAllReferences = eObject.eClass().getEAllReferences()
-			.iterator(); eAllReferences.hasNext();) {
-
-			EReference eReference = (EReference) eAllReferences.next();
+		for (EReference eReference : eObject.eClass().getEAllReferences()) {
 
 			if (eReference.isChangeable() && !eReference.isContainer()
 				&& !eReference.isContainment() && eObject.eIsSet(eReference)) {
 
 				if (eReference.isMany()) {
 
-					for (Iterator values = ((List) eObject.eGet(eReference))
-						.iterator(); values.hasNext();) {
+					for (Iterator<?> values = ((List<?>) eObject
+						.eGet(eReference)).iterator(); values.hasNext();) {
 
 						Object value = values.next();
 
@@ -1152,26 +1156,26 @@
 			eObject.eAdapters().clear();
 		} else {
 
-			for (Iterator allContents = getAllContents(eObject, true, false); allContents
-				.hasNext();) {
+			for (Iterator<EObject> allContents = getAllContents(eObject, true,
+				false); allContents.hasNext();) {
 
-				removeReferences((EObject) allContents.next(), eObject);
+				removeReferences(allContents.next(), eObject);
 			}
 
-			for (Iterator allContents = getAllContents(eObject, true, false); allContents
-				.hasNext();) {
+			for (Iterator<EObject> allContents = getAllContents(eObject, true,
+				false); allContents.hasNext();) {
 
-				((EObject) allContents.next()).eAdapters().clear();
+				(allContents.next()).eAdapters().clear();
 			}
 		}
 
 		EcoreUtil.remove(eObject);
 	}
 
-	protected static void destroyAll(Collection eObjects) {
+	protected static void destroyAll(Collection<? extends EObject> eObjects) {
 
-		for (Iterator o = eObjects.iterator(); o.hasNext();) {
-			destroy((EObject) o.next());
+		for (Iterator<? extends EObject> o = eObjects.iterator(); o.hasNext();) {
+			destroy(o.next());
 		}
 	}
 
@@ -1188,29 +1192,20 @@
 	 *            The class of the object to be retrieved.
 	 * @return The first instance of the class in the resource.
 	 */
-	public static Object load(ResourceSet resourceSet, URI uri, EClass eClass) {
+	public static <T> T load(ResourceSet resourceSet, URI uri, EClass eClass) {
 
 		try {
-			return EcoreUtil.getObjectByType(resourceSet.getResource(uri, true)
-				.getContents(), eClass);
+			@SuppressWarnings("unchecked")
+			T objectByType = (T) EcoreUtil.getObjectByType(resourceSet
+				.getResource(uri, true).getContents(), eClass);
+			return objectByType;
 		} catch (Exception e) {
 			return null;
 		}
 	}
 
-	protected static boolean intersect(Collection collection,
-			Collection otherCollection) {
-
-		if (!collection.isEmpty() && !collection.isEmpty()) {
-
-			for (Iterator c = collection.iterator(); c.hasNext();) {
-
-				if (otherCollection.contains(c.next())) {
-					return true;
-				}
-			}
-		}
-
-		return false;
+	protected static boolean intersect(Collection<?> collection,
+			Collection<?> otherCollection) {
+		return !Collections.disjoint(collection, otherCollection);
 	}
 }
diff --git a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/UnionEObjectEList.java b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/UnionEObjectEList.java
index 443d8b7..19706e7 100644
--- a/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/UnionEObjectEList.java
+++ b/plugins/org.eclipse.uml2.common/src/org/eclipse/uml2/common/util/UnionEObjectEList.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: UnionEObjectEList.java,v 1.3 2005/09/09 19:16:42 khussey Exp $
+ * $Id: UnionEObjectEList.java,v 1.4 2006/12/14 15:47:32 khussey Exp $
  */
 package org.eclipse.uml2.common.util;
 
@@ -20,11 +20,10 @@
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.util.EcoreEList;
 
-/**
- * 
- */
-public class UnionEObjectEList
-		extends EcoreEList.UnmodifiableEList {
+public class UnionEObjectEList<E>
+		extends EcoreEList.UnmodifiableEList<E> {
+
+	private static final long serialVersionUID = 1L;
 
 	public UnionEObjectEList(InternalEObject owner,
 			EStructuralFeature eStructuralFeature, int size, Object[] data) {
@@ -37,11 +36,14 @@
 			: eObject;
 	}
 
-	protected Object resolve(int index, Object object) {
-		EObject resolved = resolveProxy((EObject) object);
+	@SuppressWarnings("unchecked")
+	@Override
+	protected E resolve(int index, E object) {
+		E resolved = (E) resolveProxy((EObject) object);
 
 		if (resolved != object) {
-			Object oldObject = data[index];
+			@SuppressWarnings("unchecked")
+			E oldObject = (E) data[index];
 			assign(index, validate(index, resolved));
 			didSet(index, resolved, oldObject);
 
@@ -51,18 +53,22 @@
 		}
 	}
 
+	@Override
 	protected boolean canContainNull() {
 		return false;
 	}
 
+	@Override
 	protected boolean isUnique() {
 		return true;
 	}
 
+	@Override
 	protected boolean useEquals() {
 		return false;
 	}
 
+	@Override
 	public boolean contains(Object object) {
 		boolean result = super.contains(object);
 
@@ -79,6 +85,7 @@
 		return result;
 	}
 
+	@Override
 	public int indexOf(Object object) {
 		int result = super.indexOf(object);
 
@@ -95,6 +102,7 @@
 		return result;
 	}
 
+	@Override
 	public int lastIndexOf(Object object) {
 		int result = super.lastIndexOf(object);
 
@@ -111,21 +119,24 @@
 		return result;
 	}
 
-	public Iterator iterator() {
+	@Override
+	public Iterator<E> iterator() {
 		return listIterator();
 	}
 
-	public ListIterator listIterator() {
-		return new EListIterator();
+	@Override
+	public ListIterator<E> listIterator() {
+		return new EListIterator<E>();
 	}
 
-	public ListIterator listIterator(int index) {
+	@Override
+	public ListIterator<E> listIterator(int index) {
 
 		if (index < 0 || index > size()) {
 			throw new BasicIndexOutOfBoundsException(index, size);
 		}
 
-		return new EListIterator(index);
+		return new EListIterator<E>(index);
 	}
 
 }