### Eclipse Workspace Patch 1.0
#P org.eclipse.core.databinding
Index: src/org/eclipse/core/databinding/UpdateListStrategy.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.databinding/src/org/eclipse/core/databinding/UpdateListStrategy.java,v
retrieving revision 1.3
diff -u -r1.3 UpdateListStrategy.java
--- src/org/eclipse/core/databinding/UpdateListStrategy.java	26 Apr 2007 03:00:44 -0000	1.3
+++ src/org/eclipse/core/databinding/UpdateListStrategy.java	20 Oct 2007 01:24:24 -0000
@@ -36,8 +36,8 @@
  * construction of the strategy (e.g. {@link #POLICY_NEVER},
  * {@link #POLICY_ON_REQUEST}, {@link #POLICY_UPDATE}).
  * </p>
- * 
- * 
+ *
+ *
  * @see DataBindingContext#bindList(IObservableList, IObservableList,
  *      UpdateListStrategy, UpdateListStrategy)
  * @see IConverter
@@ -71,7 +71,7 @@
 	 * Helper method allowing API evolution of the above constant values. The
 	 * compiler will not inline constant values into client code if values are
 	 * "computed" using this helper.
-	 * 
+	 *
 	 * @param i
 	 *            an integer
 	 * @return the same integer
@@ -100,7 +100,7 @@
 	 * Creates a new update list strategy with a configurable update policy. A
 	 * default converter will be provided. The defaults can be changed by
 	 * calling one of the setter methods.
-	 * 
+	 *
 	 * @param updatePolicy
 	 *            one of {@link #POLICY_NEVER}, {@link #POLICY_ON_REQUEST}, or
 	 *            {@link #POLICY_UPDATE}
@@ -114,7 +114,7 @@
 	 * default converter will be provided if <code>provideDefaults</code> is
 	 * <code>true</code>. The defaults can be changed by calling one of the
 	 * setter methods.
-	 * 
+	 *
 	 * @param provideDefaults
 	 *            if <code>true</code>, default validators and a default
 	 *            converter will be provided based on the observable list's
@@ -136,7 +136,7 @@
 	 * {@link #setConverter(IConverter) converter} if one exists. If no
 	 * converter exists no conversion occurs.
 	 * </p>
-	 * 
+	 *
 	 * @param element
 	 * @return the converted element
 	 */
@@ -145,29 +145,29 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param source
 	 * @param destination
 	 */
 	protected void fillDefaults(IObservableList source,
 			IObservableList destination) {
-		Object sourceType = source.getElementType();
-		Object destinationType = destination.getElementType();
-		if (provideDefaults && sourceType != null && destinationType != null) {
-			if (converter == null) {
-				setConverter(createConverter(sourceType, destinationType));
-			}
-		}
-		if (converter != null) {
-			if (sourceType != null) {
-				checkAssignable(converter.getFromType(), sourceType,
-						"converter does not convert from type " + sourceType); //$NON-NLS-1$
-			}
-			if (destinationType != null) {
-				checkAssignable(converter.getToType(), destinationType,
-						"converter does not convert to type " + destinationType); //$NON-NLS-1$
-			}
-		}
+//		Object sourceType = source.getElementType();
+//		Object destinationType = destination.getElementType();
+//		if (provideDefaults && sourceType != null && destinationType != null) {
+//			if (converter == null) {
+//				setConverter(createConverter(sourceType, destinationType));
+//			}
+//		}
+//		if (converter != null) {
+//			if (sourceType != null) {
+//				checkAssignable(converter.getFromType(), sourceType,
+//						"converter does not convert from type " + sourceType); //$NON-NLS-1$
+//			}
+//			if (destinationType != null) {
+//				checkAssignable(converter.getToType(), destinationType,
+//						"converter does not convert to type " + destinationType); //$NON-NLS-1$
+//			}
+//		}
 	}
 
 	/**
@@ -180,7 +180,7 @@
 	/**
 	 * Sets the converter to be invoked when converting added elements from the
 	 * source element type to the destination element type.
-	 * 
+	 *
 	 * @param converter
 	 * @return the receiver, to enable method call chaining
 	 */
@@ -192,7 +192,7 @@
 	/**
 	 * Adds the given element at the given index to the given observable list.
 	 * Clients may extend but must call the super implementation.
-	 * 
+	 *
 	 * @param observableList
 	 * @param element
 	 * @param index
@@ -213,7 +213,7 @@
 	/**
 	 * Removes the element at the given index from the given observable list.
 	 * Clients may extend but must call the super implementation.
-	 * 
+	 *
 	 * @param observableList
 	 * @param index
 	 * @return a status
