diff --git a/extensions/source/com/intellij/openapi/extensions/ExtensionsArea.java b/extensions/source/com/intellij/openapi/extensions/ExtensionsArea.java index d09f6c761731..bfe80343125d 100644 --- a/extensions/source/com/intellij/openapi/extensions/ExtensionsArea.java +++ b/extensions/source/com/intellij/openapi/extensions/ExtensionsArea.java @@ -41,4 +41,5 @@ public interface ExtensionsArea { String getAreaClass(); + void registerExtensionPoint(String extensionPointName, String extensionPointBeanClass, PluginDescriptor descriptor); } diff --git a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java index c78c4b67ff95..ff9a0f8ffec4 100644 --- a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java +++ b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java @@ -9,6 +9,9 @@ import com.intellij.openapi.extensions.PluginAware; import com.intellij.openapi.extensions.ReaderConfigurator; import com.intellij.openapi.extensions.PluginDescriptor; import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.XppDriver; +import com.thoughtworks.xstream.core.DefaultClassMapper; +import com.thoughtworks.xstream.core.util.CompositeClassLoader; import org.jdom.Element; import org.picocontainer.PicoContainer; import org.picocontainer.PicoInitializationException; @@ -38,7 +41,11 @@ public class ExtensionComponentAdapter extends ConstructorInjectionComponentAdap if (myComponentInstance == null) { if (!Element.class.equals(getComponentImplementation())) { - XStream xStream = new XStream(new PropertyReflectionProvider()); + final CompositeClassLoader classLoader = new CompositeClassLoader(); + if (myPluginDescriptor.getPluginClassLoader() != null) { + classLoader.add(myPluginDescriptor.getPluginClassLoader()); + } + XStream xStream = new XStream(new PropertyReflectionProvider(), new DefaultClassMapper(classLoader), new XppDriver()); xStream.registerConverter(new ElementConverter()); Object componentInstance = super.getComponentInstance(container); if (componentInstance instanceof ReaderConfigurator) { diff --git a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java index a2b066f340ab..c872e92e1293 100644 --- a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java +++ b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java @@ -88,7 +88,7 @@ public class ExtensionsAreaImpl implements ExtensionsArea { if (className == null) { throw new RuntimeException("No class specified for extension point: " + epName); } - registerExtensionPoint(epName, className); + registerExtensionPoint(epName, className, pluginDescriptor); } public void registerExtension(final String pluginName, final Element extensionElement) {