From 4050ec644fcd543e082bd3dd715670a5ed4a1c5d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 29 Feb 2020 11:51:34 +0100 Subject: [PATCH] Do not instantiate a Consumer for registration Taking a Consumer forces us to instantiate it to capture listeners Set. We can do the same by simply moving the reference away. For safety we only get a Collection, for which remove(Object) is just what we want. Change-Id: I4f3bd473a75dabee1d1a31e10cf0fefe57c4896b Signed-off-by: Robert Varga --- .../yangtools/util/ListenerRegistry.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/ListenerRegistry.java b/common/util/src/main/java/org/opendaylight/yangtools/util/ListenerRegistry.java index 4c31cc5526..ca1b79af06 100644 --- a/common/util/src/main/java/org/opendaylight/yangtools/util/ListenerRegistry.java +++ b/common/util/src/main/java/org/opendaylight/yangtools/util/ListenerRegistry.java @@ -10,11 +10,11 @@ package org.opendaylight.yangtools.util; import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects; +import java.util.Collection; import java.util.Collections; import java.util.EventListener; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Consumer; import java.util.stream.Stream; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; @@ -65,7 +65,7 @@ public final class ListenerRegistry implements Mutable } public @NonNull ListenerRegistration register(final L listener) { - final ListenerRegistration ret = new ListenerRegistrationImpl<>(listener, listeners::remove); + final ListenerRegistration ret = new ListenerRegistrationImpl<>(listener, listeners); listeners.add(ret); return ret; } @@ -80,18 +80,18 @@ public final class ListenerRegistry implements Mutable private static final class ListenerRegistrationImpl extends AbstractListenerRegistration { - private Consumer> removeCall; + private Collection removeFrom; - ListenerRegistrationImpl(final T instance, final Consumer> removeCall) { + ListenerRegistrationImpl(final T instance, final Collection removeFrom) { super(instance); - this.removeCall = requireNonNull(removeCall); + this.removeFrom = requireNonNull(removeFrom); } @Override protected void removeRegistration() { - removeCall.accept(this); + removeFrom.remove(this); // Do not retain reference to that state - removeCall = null; + removeFrom = null; } } } -- 2.36.6