diff --git a/propertly.core/src/main/java/de/adito/propertly/core/api/AbstractNode.java b/propertly.core/src/main/java/de/adito/propertly/core/api/AbstractNode.java index 30ff68c..5fed353 100644 --- a/propertly.core/src/main/java/de/adito/propertly/core/api/AbstractNode.java +++ b/propertly.core/src/main/java/de/adito/propertly/core/api/AbstractNode.java @@ -2,24 +2,19 @@ import de.adito.propertly.core.common.PropertlyUtility; import de.adito.propertly.core.common.path.PropertyPath; -import de.adito.propertly.core.spi.IProperty; -import de.adito.propertly.core.spi.IPropertyDescription; -import de.adito.propertly.core.spi.IPropertyPitEventListener; -import de.adito.propertly.core.spi.IPropertyPitProvider; +import de.adito.propertly.core.spi.*; import de.adito.util.weak.MixedReferences; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.*; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.function.Consumer; /** * Abstract class for INode implementations. * * @author PaL - * Date: 09.02.13 - * Time: 19:36 + * Date: 09.02.13 + * Time: 19:36 */ public abstract class AbstractNode implements INode { @@ -83,6 +78,11 @@ public void remove() listeners = null; } + protected void clearListeners() + { + listeners.clear(); + } + @Override public void addWeakListener(@NotNull IPropertyPitEventListener pListener) { diff --git a/propertly.core/src/main/java/de/adito/propertly/core/api/DelegatingNode.java b/propertly.core/src/main/java/de/adito/propertly/core/api/DelegatingNode.java index 7bd16b2..940a493 100644 --- a/propertly.core/src/main/java/de/adito/propertly/core/api/DelegatingNode.java +++ b/propertly.core/src/main/java/de/adito/propertly/core/api/DelegatingNode.java @@ -96,6 +96,7 @@ public Object setValue(@Nullable Object pValue, @NotNull Set pAttributes List onFinish = new ArrayList<>(); fireValueWillBeChange(oldValue, pValue, onFinish::add, pAttributes); delegate.setValue(pValue, pAttributes); + clearListeners(); _alignToDelegate(); Object newValue = getValueInternal(); fireValueChange(oldValue, newValue, pAttributes); diff --git a/propertly.core/src/main/java/de/adito/propertly/core/api/Node.java b/propertly.core/src/main/java/de/adito/propertly/core/api/Node.java index e1a3b45..e6cfeac 100644 --- a/propertly.core/src/main/java/de/adito/propertly/core/api/Node.java +++ b/propertly.core/src/main/java/de/adito/propertly/core/api/Node.java @@ -79,6 +79,7 @@ public Object setValue(Object pValue, @NotNull Set pAttributes) } HierarchyHelper.setNode((IPropertyPitProvider) oldValue, null); } + clearListeners(); if (pppProvider != null) { IPropertyPitProvider pppCopy = PropertlyUtility.create(pppProvider); value = pppCopy;