You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2007/07/10 09:12:08 UTC

svn commit: r554857 - in /harmony/enhanced/classlib/trunk/modules/beans/src: main/java/java/beans/PropertyEditorSupport.java test/java/org/apache/harmony/beans/tests/java/beans/PropertyEditorSupportTest.java

Author: pyang
Date: Tue Jul 10 00:12:07 2007
New Revision: 554857

URL: http://svn.apache.org/viewvc?view=rev&rev=554857
Log:
Fix 2 bugs in PropertyEditorSupport: 1. setSource(null) should not throw NPE(the original tests fail on RI, also updated accordingly), 2. firePropertyChange should fire an event with the source only

Modified:
    harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyEditorSupport.java
    harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PropertyEditorSupportTest.java

Modified: harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyEditorSupport.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyEditorSupport.java?view=diff&rev=554857&r1=554856&r2=554857
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyEditorSupport.java (original)
+++ harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyEditorSupport.java Tue Jul 10 00:12:07 2007
@@ -79,10 +79,7 @@
         return newValue;
     }
 
-    public void setSource(Object source) {
-        if (source == null) {
-            throw new NullPointerException(Messages.getString("beans.0C")); //$NON-NLS-1$
-        }
+    public void setSource(Object source) {        
         this.source = source;
     }
 
@@ -115,15 +112,22 @@
     }
 
     public void firePropertyChange() {
-        if (listeners.size() > 0) {
-            PropertyChangeEvent event = new PropertyChangeEvent(source, null,
-                    oldValue, newValue);
-            Iterator<PropertyChangeListener> iterator = listeners.iterator();
-
-            while (iterator.hasNext()) {
-                PropertyChangeListener listener = iterator.next();
-                listener.propertyChange(event);
-            }
+        if (listeners.isEmpty()) {
+            return;
+        }
+
+        List<PropertyChangeListener> copy = new ArrayList<PropertyChangeListener>(
+                listeners.size());
+        synchronized (listeners) {
+            copy.addAll(listeners);
+        }
+
+        PropertyChangeEvent changeAllEvent = new PropertyChangeEvent(source,
+                null, null, null);
+        for (Iterator<PropertyChangeListener> listenersItr = copy.iterator(); listenersItr
+                .hasNext();) {
+            PropertyChangeListener listna = listenersItr.next();
+            listna.propertyChange(changeAllEvent);
         }
     }
 }

Modified: harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PropertyEditorSupportTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PropertyEditorSupportTest.java?view=diff&rev=554857&r1=554856&r2=554857
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PropertyEditorSupportTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PropertyEditorSupportTest.java Tue Jul 10 00:12:07 2007
@@ -287,11 +287,24 @@
         support.setSource(source);
         assertSame(source, support.getSource());
 
-        try {
-            support.setSource(null);
-            fail("No expected NullPointerException");
-        } catch (NullPointerException e) {
-        }
+        support.setSource(null);
+    }
+    
+    public void testSetValue_Event() {
+        PropertyEditorSupport support = new PropertyEditorSupport();
+        Object source = new Object();
+        support.setSource(source);
+        MockPropertyChangeListener listener = new MockPropertyChangeListener();
+        support.addPropertyChangeListener(listener);
+        
+        support.setValue(new Object());        
+        PropertyChangeEvent event = listener.getEvent();
+        assertNotNull(event);
+        assertEquals(source, event.getSource());
+        assertNull(event.getNewValue());
+        assertNull(event.getOldValue());
+        assertNull(event.getPropagationId());
+        assertNull(event.getPropertyName());        
     }
 
     public static class MockSource {
@@ -411,5 +424,21 @@
                             : this.eventSource.equals(other.eventSource)) && (this.label == null ? other.label == null
                     : this.label.equals(other.label)));
         }
+    }
+    
+    public class MockPropertyChangeListener implements PropertyChangeListener
+    {
+
+        private PropertyChangeEvent event;        
+        public void propertyChange(PropertyChangeEvent event) {
+            
+            this.event = event;
+        }
+        
+        public PropertyChangeEvent getEvent()
+        {
+            return event;
+        }
+        
     }
 }