Refines the HasValue documentation, in particular wrt use of null and value equality. Desk review by jlabanca

git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.6@4164 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/CheckBox.java b/user/src/com/google/gwt/user/client/ui/CheckBox.java
index 1b1a8f3..a9eba4f 100644
--- a/user/src/com/google/gwt/user/client/ui/CheckBox.java
+++ b/user/src/com/google/gwt/user/client/ui/CheckBox.java
@@ -219,6 +219,7 @@
   }
 
   public void setValue(Boolean value, boolean fireEvents) {
+    assert null != value : "Value must not be null";
     if (isChecked() == value) {
       return;
     }
diff --git a/user/src/com/google/gwt/user/client/ui/HasValue.java b/user/src/com/google/gwt/user/client/ui/HasValue.java
index f3240e9..0c7d36f 100644
--- a/user/src/com/google/gwt/user/client/ui/HasValue.java
+++ b/user/src/com/google/gwt/user/client/ui/HasValue.java
@@ -20,6 +20,11 @@
 /**
  * An object that implements this interface should be a user input widget, where
  * the user and programmer can both set and get the object's value.
+ * <p>
+ * It is a requirement that a value passed to {@link setValue} be
+ * {@link Object#equals} to that returned by an immediately succeeding call to
+ * {@link getValue}, or that both be null. Note that this is not a requirement
+ * that <code>setValue(null)</code> be supported by all implementors.
  * 
  * @param <T> the type of value.
  */
@@ -33,8 +38,11 @@
   T getValue();
 
   /**
-   * Sets this object's value without firing any events. Should call setValue(T
-   * value, false).
+   * Sets this object's value without firing any events. This should be
+   * identical to calling setValue(value, false).
+   * <p>
+   * It is acceptable to fail assertions or throw (documented) unchecked
+   * exceptions in response to bad values.
    * 
    * @param value the object's new value
    */
@@ -44,6 +52,9 @@
    * Sets this object's value. Fires
    * {@link com.google.gwt.event.logical.shared.ValueChangeEvent} when
    * fireEvents is true and the new value does not equal the existing value.
+   * <p>
+   * It is acceptable to fail assertions or throw (documented) unchecked
+   * exceptions in response to bad values.
    * 
    * @param value the object's new value
    * @param fireEvents fire events if true and value is new
diff --git a/user/src/com/google/gwt/user/client/ui/TextBoxBase.java b/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
index 3a8554e..3f7660a 100644
--- a/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
+++ b/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
@@ -301,6 +301,7 @@
   }
 
   public void setValue(String value, boolean fireEvents) {
+    assert null != value : "Value must not be null";
     String oldValue = getText();
     setText(value);
     if (fireEvents) {