From 43357dc64d37661a0d866fdbcbc2ed29d8885598 Mon Sep 17 00:00:00 2001 From: Alexander Kireyev Date: Wed, 2 Mar 2005 17:37:45 +0300 Subject: [PATCH] More extension unloading fixes. --- .../openapi/extensions/impl/ExtensionPointImpl.java | 10 ++++++++-- .../openapi/extensions/impl/ExtensionsAreaTest.java | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java index 613e0ce505d3..020a5cea78ea 100644 --- a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java +++ b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java @@ -169,12 +169,18 @@ public class ExtensionPointImpl implements ExtensionPoint { public void unregisterExtension(final Object extension) { assert (extension != null) : "Extension cannot be null"; + if (!myExtensions.contains(extension)) { + throw new IllegalArgumentException("Extension to be removed not found: " + extension); + } - myOwner.getMutablePicoContainer().unregisterComponentByInstance(extension); + final int index = myExtensions.indexOf(extension); + final ExtensionComponentAdapter adapter = (ExtensionComponentAdapter)myLoadedAdapters.get(index); + + myOwner.getMutablePicoContainer().unregisterComponent(adapter.getComponentKey()); final MutablePicoContainer[] pluginContainers = myOwner.getPluginContainers(); for (int i = 0; i < pluginContainers.length; i++) { MutablePicoContainer pluginContainer = pluginContainers[i]; - pluginContainer.unregisterComponentByInstance(extension); + pluginContainer.unregisterComponent(adapter.getComponentKey()); } processAdapters(); diff --git a/extensions/testSource/com/intellij/openapi/extensions/impl/ExtensionsAreaTest.java b/extensions/testSource/com/intellij/openapi/extensions/impl/ExtensionsAreaTest.java index 1523f90ffc28..51bf72f57746 100644 --- a/extensions/testSource/com/intellij/openapi/extensions/impl/ExtensionsAreaTest.java +++ b/extensions/testSource/com/intellij/openapi/extensions/impl/ExtensionsAreaTest.java @@ -67,7 +67,10 @@ public class ExtensionsAreaTest extends TestCase { public void verify(PicoContainer container) throws PicoIntrospectionException { } }); + final TestClass extension = new TestClass(); + myExtensionsArea.getExtensionPoint("test.ep").registerExtension(extension); myExtensionsArea.unregisterExtension("test", element); + myExtensionsArea.getExtensionPoint("test.ep").unregisterExtension(extension); } public static class TestClass {