From bb411f0576d932b52c6e1600b0e10b7bcb9b9b6e Mon Sep 17 00:00:00 2001 From: Denis Zhdanov Date: Sun, 5 Jul 2015 14:25:46 +0300 Subject: [PATCH] UP-4484 Improve performance of MessageBusImpl processing --- .../util/messages/MessageBusFactory.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/platform/util/src/com/intellij/util/messages/MessageBusFactory.java b/platform/util/src/com/intellij/util/messages/MessageBusFactory.java index c1875a8c429c..f91daed0dd2c 100644 --- a/platform/util/src/com/intellij/util/messages/MessageBusFactory.java +++ b/platform/util/src/com/intellij/util/messages/MessageBusFactory.java @@ -23,14 +23,44 @@ import com.intellij.util.messages.impl.MessageBusImpl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.concurrent.atomic.AtomicReference; + public class MessageBusFactory { + + private static final AtomicReference ourImpl = new AtomicReference(new Impl() { + @NotNull + @Override + public MessageBus newMessageBus(@NotNull Object owner) { + return new MessageBusImpl.RootBus(owner); + } + + @NotNull + @Override + public MessageBus newMessageBus(@NotNull Object owner, @Nullable MessageBus parentBus) { + return parentBus == null ? newMessageBus(owner) : new MessageBusImpl(owner, parentBus); + } + }); + private MessageBusFactory() {} public static MessageBus newMessageBus(@NotNull Object owner) { - return new MessageBusImpl.RootBus(owner); + return ourImpl.get().newMessageBus(owner); } public static MessageBus newMessageBus(@NotNull Object owner, @Nullable MessageBus parentBus) { - return parentBus == null ? newMessageBus(owner) : new MessageBusImpl(owner, parentBus); + return ourImpl.get().newMessageBus(owner, parentBus); + } + + public static void setImpl(@NotNull Impl impl) { + ourImpl.set(impl); + } + + public interface Impl { + + @NotNull + MessageBus newMessageBus(@NotNull Object owner); + + @NotNull + MessageBus newMessageBus(@NotNull Object owner, @Nullable MessageBus parentBus); } } \ No newline at end of file