diff options
author | Matthew Hall | 2010-02-06 06:21:53 +0000 |
---|---|---|
committer | Matthew Hall | 2010-02-06 06:21:53 +0000 |
commit | 113185a5501a43160689d2b04862e657dacbb768 (patch) | |
tree | 2b68d06bba79eb78bd26fd641bdf28a01660c192 | |
parent | d323aa434dcacf7bea5acf86677d02ed747478e5 (diff) | |
download | org.eclipse.e4.databinding-113185a5501a43160689d2b04862e657dacbb768.tar.gz org.eclipse.e4.databinding-113185a5501a43160689d2b04862e657dacbb768.tar.xz org.eclipse.e4.databinding-113185a5501a43160689d2b04862e657dacbb768.zip |
FIXED - bug 301410: [DataBinding] NPE in ListSimpleValueObservableList on disposeI20100223-0800I20100216-0800I20100209-0800
https://bugs.eclipse.org/bugs/show_bug.cgi?id=301410
3 files changed, 45 insertions, 10 deletions
diff --git a/bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/internal/databinding/property/value/ListSimpleValueObservableList.java b/bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/internal/databinding/property/value/ListSimpleValueObservableList.java index ecb5acf5..b7e6a93c 100644 --- a/bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/internal/databinding/property/value/ListSimpleValueObservableList.java +++ b/bundles/org.eclipse.core.databinding.property/src/org/eclipse/core/internal/databinding/property/value/ListSimpleValueObservableList.java @@ -170,16 +170,22 @@ public class ListSimpleValueObservableList extends AbstractObservableList } protected void lastListenerRemoved() { - masterList.removeListChangeListener(masterListener); - masterList.removeStaleListener(staleListener); + if (masterList != null) { + masterList.removeListChangeListener(masterListener); + masterList.removeStaleListener(staleListener); + } if (knownMasterElements != null) { knownMasterElements.dispose(); knownMasterElements = null; } - cachedValues.clear(); - cachedValues = null; - staleElements.clear(); - staleElements = null; + if (cachedValues != null) { + cachedValues.clear(); + cachedValues = null; + } + if (staleElements != null) { + staleElements.clear(); + staleElements = null; + } } protected int doGetSize() { @@ -450,16 +456,17 @@ public class ListSimpleValueObservableList extends AbstractObservableList } public synchronized void dispose() { - if (masterList != null) { - masterList.removeListChangeListener(masterListener); - masterList = null; - } if (knownMasterElements != null) { knownMasterElements.clear(); // detaches listeners knownMasterElements.dispose(); knownMasterElements = null; } + if (masterList != null) { + masterList.removeListChangeListener(masterListener); + masterList = null; + } + masterListener = null; detailListener = null; detailProperty = null; diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/ListSimpleValueObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/ListSimpleValueObservableListTest.java new file mode 100644 index 00000000..8a02d8f9 --- /dev/null +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/ListSimpleValueObservableListTest.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2010 Matthew Hall and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Matthew Hall - initial API and implementation (bug 301410) + ******************************************************************************/ + +package org.eclipse.core.tests.internal.databinding.property.value; + +import org.eclipse.core.databinding.beans.BeanProperties; +import org.eclipse.core.databinding.observable.list.WritableList; +import org.eclipse.core.tests.internal.databinding.beans.Bean; +import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase; + +public class ListSimpleValueObservableListTest extends + AbstractDefaultRealmTestCase { + + public void testBug301410() { + BeanProperties.value(Bean.class, "value").observeDetail( + new WritableList()).dispose(); + } +} diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java index f91a5328..c545f350 100644 --- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java @@ -140,6 +140,7 @@ import org.eclipse.core.tests.internal.databinding.observable.masterdetail.Detai import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableMapTest; import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableSetTest; import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableValueTest; +import org.eclipse.core.tests.internal.databinding.property.value.ListSimpleValueObservableListTest; import org.eclipse.core.tests.internal.databinding.property.value.MapSimpleValueObservableMapTest; import org.eclipse.core.tests.internal.databinding.property.value.SetSimpleValueObservableMapTest; import org.eclipse.core.tests.internal.databinding.validation.AbstractStringToNumberValidatorTest; @@ -381,6 +382,7 @@ public class BindingTestSuite extends TestSuite { // org.eclipse.core.tests.internal.databinding.property.value addTestSuite(MapSimpleValueObservableMapTest.class); addTestSuite(SetSimpleValueObservableMapTest.class); + addTestSuite(ListSimpleValueObservableListTest.class); // org.eclipse.core.tests.internal.databinding.validation addTestSuite(AbstractStringToNumberValidatorTest.class); |