Community
Participate
Working Groups
The ListChangeEvent fired when WritableList.removeAll(...) is invoked reports that an addition occurred when it should report a removal.
Created attachment 61478 [details] patch
FIXED > 20070320. I have an updated patch but am having issues with bugzilla. Once bug 178446 is resolved I'll upload the latest patch.
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 on attachment 61478 [details] patch See comment 3 for latest patch.
VERIFIED in I20070321-0010.