diff --git a/platform/core-impl/src/com/intellij/mock/MockComponentManager.java b/platform/core-impl/src/com/intellij/mock/MockComponentManager.java index 2d16698429c2..141a219d9940 100644 --- a/platform/core-impl/src/com/intellij/mock/MockComponentManager.java +++ b/platform/core-impl/src/com/intellij/mock/MockComponentManager.java @@ -140,7 +140,7 @@ public class MockComponentManager extends UserDataHolderBase implements Componen @Override public void dispose() { - myMessageBus.dispose(); + Disposer.dispose(myMessageBus); myDisposed = true; } diff --git a/platform/core-impl/src/com/intellij/openapi/components/impl/ComponentManagerImpl.java b/platform/core-impl/src/com/intellij/openapi/components/impl/ComponentManagerImpl.java index a724ff22049a..575411a8501e 100644 --- a/platform/core-impl/src/com/intellij/openapi/components/impl/ComponentManagerImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/components/impl/ComponentManagerImpl.java @@ -276,7 +276,7 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements myDisposeCompleted = true; if (myMessageBus != null) { - myMessageBus.dispose(); + Disposer.dispose(myMessageBus); myMessageBus = null; } diff --git a/platform/platform-impl/src/com/intellij/util/MessageBusUtil.java b/platform/platform-impl/src/com/intellij/util/MessageBusUtil.java index 34952da51b60..d0f1110a5bc5 100644 --- a/platform/platform-impl/src/com/intellij/util/MessageBusUtil.java +++ b/platform/platform-impl/src/com/intellij/util/MessageBusUtil.java @@ -15,14 +15,11 @@ */ package com.intellij.util; -import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; -import com.intellij.util.messages.MessageBus; import com.intellij.util.messages.Topic; -import org.jetbrains.annotations.NotNull; public class MessageBusUtil { private static Runnable createPublisherRunnable(final Project project, final Topic topic, final Consumer listener) { @@ -42,13 +39,4 @@ public class MessageBusUtil { } } - @NotNull - public static Disposable newMessageBusDisposer(@NotNull final MessageBus messageBus) { - return new Disposable() { - @Override - public void dispose() { - messageBus.dispose(); - } - }; - } } diff --git a/platform/platform-tests/testSrc/com/intellij/util/messages/MessageBusTest.java b/platform/platform-tests/testSrc/com/intellij/util/messages/MessageBusTest.java index 546d0dcd8a54..90a710350dc0 100644 --- a/platform/platform-tests/testSrc/com/intellij/util/messages/MessageBusTest.java +++ b/platform/platform-tests/testSrc/com/intellij/util/messages/MessageBusTest.java @@ -20,6 +20,7 @@ package com.intellij.util.messages; import com.intellij.openapi.progress.ProcessCanceledException; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.text.StringUtil; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.util.ConcurrencyUtil; @@ -95,7 +96,7 @@ public class MessageBusTest extends TestCase { @Override protected void tearDown() throws Exception { try { - myBus.dispose(); + Disposer.dispose(myBus); } finally { myBus = null; @@ -343,7 +344,7 @@ public class MessageBusTest extends TestCase { public void t11() { myLog.add("root 11"); myBus.syncPublisher(TOPIC1).t12(); - child.dispose(); + Disposer.dispose(child); } @Override diff --git a/platform/util/src/com/intellij/util/messages/MessageBus.java b/platform/util/src/com/intellij/util/messages/MessageBus.java index 56799fdde460..148f98356d7d 100644 --- a/platform/util/src/com/intellij/util/messages/MessageBus.java +++ b/platform/util/src/com/intellij/util/messages/MessageBus.java @@ -35,7 +35,7 @@ import org.jetbrains.annotations.Nullable; *

* Please see http://confluence.jetbrains.net/display/IDEADEV/IntelliJ+IDEA+Messaging+infrastructure. */ -public interface MessageBus { +public interface MessageBus extends Disposable { /** * Messages buses can be organised into hierarchies. That allows facilities {@link Topic#getBroadcastDirection() broadcasting}. @@ -141,6 +141,11 @@ public interface MessageBus { */ void dispose(); + /** + * Returns true if this bus is disposed. + */ + boolean isDisposed(); + /** * @return true when events in the given topic are being dispatched in the current thread, * and not all listeners have received the events yet. diff --git a/platform/util/src/com/intellij/util/messages/impl/MessageBusImpl.java b/platform/util/src/com/intellij/util/messages/impl/MessageBusImpl.java index 8291a7ba8822..87d12d493727 100644 --- a/platform/util/src/com/intellij/util/messages/impl/MessageBusImpl.java +++ b/platform/util/src/com/intellij/util/messages/impl/MessageBusImpl.java @@ -262,9 +262,10 @@ public class MessageBusImpl implements MessageBus { @Override public void dispose() { checkNotDisposed(); + myDisposed = true; for (MessageBusImpl childBus : myChildBuses) { - childBus.dispose(); + Disposer.dispose(childBus); } Disposer.dispose(myConnectionDisposable); @@ -280,7 +281,11 @@ public class MessageBusImpl implements MessageBus { else { asRoot().myWaitingBuses.remove(); } - myDisposed = true; + } + + @Override + public boolean isDisposed() { + return myDisposed; } @Override