Corrected extensions unregistration.

This commit is contained in:
Alexander Kireyev
2005-02-25 12:17:05 +03:00
parent 4bfdea63cc
commit cf17dd59a9
3 changed files with 34 additions and 5 deletions
@@ -276,6 +276,18 @@ public class ExtensionPointImpl implements ExtensionPoint {
myExtensionAdapters.add(adapter);
}
public boolean unregisterComponentAdapter(final ExtensionComponentAdapter componentAdapter) {
if (myExtensionAdapters.contains(componentAdapter)) {
myExtensionAdapters.remove(componentAdapter);
return true;
}
else if (myLoadedAdapters.contains(componentAdapter)) {
unregisterExtension(componentAdapter.getExtension());
return true;
}
return false;
}
private static class ObjectComponentAdapter extends ExtensionComponentAdapter {
private Object myExtension;
private LoadingOrder myLoadingOrder;
@@ -189,8 +189,7 @@ public class ExtensionsAreaImpl implements ExtensionsArea {
}
ExtensionComponentAdapter adapter = (ExtensionComponentAdapter) myExtensionElement2extension.remove(extensionElement);
if (adapter == null) return;
if (getExtensionPoint(epName).hasExtension(adapter.getExtension())) {
getExtensionPoint(epName).unregisterExtension(adapter.getExtension());
if (getExtensionPointImpl(epName).unregisterComponentAdapter(adapter)) {
MutablePicoContainer pluginContainer = internalGetPluginContainer(pluginName);
pluginContainer.unregisterComponent(adapter.getComponentKey());
if (pluginContainer.getComponentAdapters().size() == 0) {
@@ -1,13 +1,13 @@
package com.intellij.openapi.extensions.impl;
import com.intellij.openapi.extensions.Extensions;
import junit.framework.TestCase;
import org.picocontainer.defaults.DefaultPicoContainer;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.defaults.DefaultPicoContainer;
import org.jdom.Element;
import java.util.List;
import com.intellij.openapi.extensions.Extensions;
/**
* @author mike
*/
@@ -28,4 +28,22 @@ public class ExtensionsAreaTest extends TestCase {
final List adapters = myPicoContainer.getComponentAdaptersOfType(ExtensionsAreaTest.class);
assertEquals(1, adapters.size());
}
public void testNoCreateOnUnregisterElement() {
myExtensionsArea.registerExtensionPoint("test.ep", TestClass.class.getName());
final Element element = ExtensionComponentAdapterTest.readElement("<extension point=\"test.ep\"/>");
TestClass.ourCreationCount = 0;
myExtensionsArea.registerExtension("test", element);
assertEquals(0, TestClass.ourCreationCount);
myExtensionsArea.unregisterExtension("test", element);
assertEquals(0, TestClass.ourCreationCount);
}
public static class TestClass {
public static int ourCreationCount = 0;
public TestClass() {
ourCreationCount++;
}
}
}