mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Corrected extensions unregistration.
This commit is contained in:
@@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user