Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 178439 - [DataBinding] WritableList.removeAll(...) ListDiffEntry reports addition
Summary: [DataBinding] WritableList.removeAll(...) ListDiffEntry reports addition
Status: VERIFIED FIXED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 3.3   Edit
Hardware: PC All
: P3 normal (vote)
Target Milestone: 3.3 M6   Edit
Assignee: Brad Reynolds CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-03-20 17:52 EDT by Brad Reynolds CLA
Modified: 2007-03-21 19:54 EDT (History)
1 user (show)

See Also:


Attachments
patch (3.74 KB, patch)
2007-03-20 17:54 EDT, Brad Reynolds CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Brad Reynolds CLA 2007-03-20 17:52:00 EDT
The ListChangeEvent fired when WritableList.removeAll(...) is invoked reports that an addition occurred when it should report a removal.
Comment 1 Brad Reynolds CLA 2007-03-20 17:54:20 EDT
Created attachment 61478 [details]
patch
Comment 2 Brad Reynolds CLA 2007-03-20 18:23:10 EDT
FIXED > 20070320.

I have an updated patch but am having issues with bugzilla.  Once bug 178446 is resolved I'll upload the latest patch.
Comment 3 Brad Reynolds CLA 2007-03-21 14:12:30 EDT
Since bug 123499 has yet to be resolved I'm just going to paste the patch as a comment.

### Eclipse Workspace Patch 1.0
#P org.eclipse.core.databinding
Index: src/org/eclipse/core/databinding/observable/list/WritableList.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.databinding/src/org/eclipse/core/databinding/observable/list/WritableList.java,v
retrieving revision 1.9
diff -u -r1.9 WritableList.java
--- src/org/eclipse/core/databinding/observable/list/WritableList.java	16 Mar 2007 18:00:56 -0000	1.9
+++ src/org/eclipse/core/databinding/observable/list/WritableList.java	20 Mar 2007 22:08:01 -0000
@@ -155,7 +155,7 @@
 			int removeIndex = wrappedList.indexOf(element);
 			if (removeIndex != -1) {
 				wrappedList.remove(removeIndex);
-				entries.add(Diffs.createListDiffEntry(removeIndex, true,
+				entries.add(Diffs.createListDiffEntry(removeIndex, false,
 						element));
 			}
 		}
#P org.eclipse.jface.tests.databinding
Index: src/org/eclipse/jface/tests/databinding/observable/list/WritableListTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/observable/list/WritableListTest.java,v
retrieving revision 1.5
diff -u -r1.5 WritableListTest.java
--- src/org/eclipse/jface/tests/databinding/observable/list/WritableListTest.java	16 Mar 2007 17:59:53 -0000	1.5
+++ src/org/eclipse/jface/tests/databinding/observable/list/WritableListTest.java	20 Mar 2007 22:08:01 -0000
@@ -12,11 +12,15 @@
 
 package org.eclipse.jface.tests.databinding.observable.list;
 
+import java.util.Arrays;
 import java.util.Collections;
 
 import junit.framework.TestCase;
 
 import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.databinding.observable.list.IListChangeListener;
+import org.eclipse.core.databinding.observable.list.ListChangeEvent;
+import org.eclipse.core.databinding.observable.list.ListDiffEntry;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.jface.tests.databinding.observable.ThreadRealm;
@@ -43,6 +47,42 @@
 		writableList.clear();
 		assertEquals(0, writableList.size());
 	}
+    
+    public void testRemoveAllChangeEvent() throws Exception {
+        CurrentRealm realm = new CurrentRealm(true);
+        
+        WritableList list = new WritableList(realm);
+        String element = "element";
+        
+        list.add(element);
+        
+        class ListChangeListener implements IListChangeListener {
+            int count;
+            ListChangeEvent event;
+            
+            /* (non-Javadoc)
+             * @see org.eclipse.core.databinding.observable.list.IListChangeListener#handleListChange(org.eclipse.core.databinding.observable.list.ListChangeEvent)
+             */
+            public void handleListChange(ListChangeEvent event) {
+                count++;
+                this.event = event;
+            }
+        }
+        
+        ListChangeListener listener = new ListChangeListener();
+        list.addListChangeListener(listener);
+        assertEquals(0, listener.count);
+        
+        list.removeAll(Arrays.asList(new String[] {element}));
+        assertEquals(1, listener.count);
+        
+        assertEquals(1, listener.event.diff.getDifferences().length);
+        ListDiffEntry diffEntry = listener.event.diff.getDifferences()[0];
+        assertFalse("addition", diffEntry.isAddition());
+        assertEquals("element", element, diffEntry.getElement());
+        assertEquals("position", 0, diffEntry.getPosition());
+        assertFalse(list.contains(element));
+    }
 
 	public void testSetRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
Comment 4 Brad Reynolds CLA 2007-03-21 14:13:03 EDT
Comment on attachment 61478 [details]
patch

See comment 3 for latest patch.
Comment 5 Brad Reynolds CLA 2007-03-21 19:54:45 EDT
VERIFIED in I20070321-0010.