From bf5b3339a138326097cc6e37fe25fa5add9f7c45 Mon Sep 17 00:00:00 2001 From: keshane Date: Thu, 27 Oct 2022 21:16:08 +0800 Subject: [PATCH] add removeSubscriber method in MessageBusManager --- .../plugins/spotbugs/messages/MessageBus.java | 13 ++++++++----- .../spotbugs/messages/MessageBusManager.java | 6 +++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/jetbrains/plugins/spotbugs/messages/MessageBus.java b/src/main/java/org/jetbrains/plugins/spotbugs/messages/MessageBus.java index 12769852..646e86f5 100644 --- a/src/main/java/org/jetbrains/plugins/spotbugs/messages/MessageBus.java +++ b/src/main/java/org/jetbrains/plugins/spotbugs/messages/MessageBus.java @@ -43,19 +43,22 @@ final class MessageBus { private final Project _project; - private final Map, Object/*handler*/>> _subscribers; - private final Map, Object/*handler*/> _publisher; + private final ConcurrentHashMap, Object/*handler*/>> _subscribers; + private final ConcurrentHashMap, Object/*handler*/> _publisher; MessageBus(@NotNull final Project project) { _project = project; - _subscribers = new HashMap<>(); - _publisher = new HashMap<>(); + _subscribers = new ConcurrentHashMap<>(); + _publisher = new ConcurrentHashMap<>(); } + public void remove(Object subscriber) { + _subscribers.remove(subscriber); + } public void subscribe(@NotNull final Object subscriber, @NotNull final Topic topic, @NotNull final L handler) { - Map, Object/*handler*/> handlerByTopic = _subscribers.computeIfAbsent(subscriber, k -> new HashMap<>()); + Map, Object/*handler*/> handlerByTopic = _subscribers.computeIfAbsent(subscriber, k -> new ConcurrentHashMap<>()); if (!handlerByTopic.containsKey(topic)) { handlerByTopic.put(topic, handler); } // else do nothing ; subscriber has already subscribed this topic diff --git a/src/main/java/org/jetbrains/plugins/spotbugs/messages/MessageBusManager.java b/src/main/java/org/jetbrains/plugins/spotbugs/messages/MessageBusManager.java index 4968af66..162b2681 100644 --- a/src/main/java/org/jetbrains/plugins/spotbugs/messages/MessageBusManager.java +++ b/src/main/java/org/jetbrains/plugins/spotbugs/messages/MessageBusManager.java @@ -49,6 +49,10 @@ private static MessageBus of(@NotNull final Project project) { return ret; } + public static void removeSubscriber(Project project, Object subscriber) { + of(project).remove(subscriber); + } + public static void subscribeAnalysisState(@NotNull final Project project, @NotNull final Object subscriber, @NotNull final L handler) { subscribe(project, subscriber, AnalysisStartedListener.TOPIC, handler); subscribe(project, subscriber, AnalysisAbortingListener.TOPIC, handler); @@ -133,4 +137,4 @@ public static void dispose(@NotNull final Project project) { EventDispatchThreadHelper.checkEDT(); _busByProject.remove(project); } -} +} \ No newline at end of file