diff --git a/codeInsight/impl/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java b/codeInsight/impl/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java index 1170db90c628..cf97bcf706e5 100644 --- a/codeInsight/impl/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java +++ b/codeInsight/impl/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java @@ -16,6 +16,7 @@ import com.intellij.openapi.editor.colors.CodeInsightColors; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.markup.SeparatorPlacement; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; @@ -33,6 +34,7 @@ import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.util.MethodSignatureBackedByPsiMethod; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.*; @@ -79,7 +81,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP HighlightVisitor[] highlightVisitors; synchronized (myProject) { Integer num = myProject.getUserData(HIGHLIGHT_VISITOR_THREADS_IN_USE); - highlightVisitors = myProject.getComponents(HighlightVisitor.class); + highlightVisitors = Extensions.getExtensions(HighlightVisitor.EP_HIGHLIGHT_VISITOR, myProject); if (num == null) { num = 0; } @@ -292,6 +294,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP return array; } + @Nullable private LineMarkerInfo getLineMarkerInfo(PsiElement element) { if (element instanceof PsiIdentifier && element.getParent() instanceof PsiMethod) { PsiMethod method = (PsiMethod)element.getParent(); diff --git a/codeInsight/impl/com/intellij/codeInsight/daemon/impl/HighlightVisitor.java b/codeInsight/impl/com/intellij/codeInsight/daemon/impl/HighlightVisitor.java index 125ab13cb71e..4ba0026d0374 100644 --- a/codeInsight/impl/com/intellij/codeInsight/daemon/impl/HighlightVisitor.java +++ b/codeInsight/impl/com/intellij/codeInsight/daemon/impl/HighlightVisitor.java @@ -1,10 +1,13 @@ package com.intellij.codeInsight.daemon.impl; import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder; +import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; public interface HighlightVisitor { + ExtensionPointName EP_HIGHLIGHT_VISITOR = new ExtensionPointName("com.intellij.highlightVisitor"); + boolean suitableForFile(PsiFile file); void visit(PsiElement element, HighlightInfoHolder holder); void setRefCountHolder(RefCountHolder refCountHolder); diff --git a/codeInsight/impl/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/codeInsight/impl/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 7fff2680c3cd..9445eee8d530 100644 --- a/codeInsight/impl/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/codeInsight/impl/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -9,7 +9,6 @@ import com.intellij.lang.annotation.Annotation; import com.intellij.lang.annotation.Annotator; import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.lang.jsp.JspxFileViewProvider; -import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.impl.injected.DocumentRange; import com.intellij.openapi.fileTypes.StdFileTypes; @@ -37,13 +36,12 @@ import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlText; import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.List; import java.util.Map; -public class HighlightVisitorImpl extends PsiElementVisitor implements HighlightVisitor, ProjectComponent { +public class HighlightVisitorImpl extends PsiElementVisitor implements HighlightVisitor { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl"); private final PsiResolveHelper myResolveHelper; @@ -63,20 +61,6 @@ public class HighlightVisitorImpl extends PsiElementVisitor implements Highlight private final Map> mySingleImportedFields = new THashMap>(); private final AnnotationHolderImpl myAnnotationHolder = new AnnotationHolderImpl(); - @NotNull - public String getComponentName() { - return "HighlightVisitorImpl"; - } - - public void initComponent() { - } - - public void disposeComponent() {} - - public void projectOpened() {} - - public void projectClosed() {} - public HighlightVisitorImpl(PsiManager manager) { this(manager.getResolveHelper()); } diff --git a/dom/impl/src/com/intellij/util/xml/ui/DomUIFactoryImpl.java b/dom/impl/src/com/intellij/util/xml/ui/DomUIFactoryImpl.java index 681ba423c187..bbef1f957203 100644 --- a/dom/impl/src/com/intellij/util/xml/ui/DomUIFactoryImpl.java +++ b/dom/impl/src/com/intellij/util/xml/ui/DomUIFactoryImpl.java @@ -18,17 +18,15 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.xml.XmlFile; import com.intellij.ui.BooleanTableCellEditor; -import com.intellij.ui.UserActivityWatcher; import com.intellij.ui.UserActivityListener; +import com.intellij.ui.UserActivityWatcher; import com.intellij.util.Function; import com.intellij.util.SmartList; import com.intellij.util.containers.ClassMap; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomReflectionUtil; -import com.intellij.util.xml.highlighting.DomElementsErrorPanel; -import com.intellij.util.xml.highlighting.DomElementAnnotationsManager; import com.intellij.util.xml.highlighting.DomElementAnnotationsManagerImpl; -import org.jetbrains.annotations.NonNls; +import com.intellij.util.xml.highlighting.DomElementsErrorPanel; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -176,15 +174,4 @@ public class DomUIFactoryImpl extends DomUIFactory { component.setBorder(new EmptyBorder(0, 0, 0, 0)); return component; } - - @NonNls - public String getComponentName() { - return getClass().getName(); - } - - public void initComponent() { - } - - public void disposeComponent() { - } } diff --git a/dom/openapi/src/com/intellij/util/xml/ui/DomUIFactory.java b/dom/openapi/src/com/intellij/util/xml/ui/DomUIFactory.java index d78aebcfff7e..5a8789733407 100644 --- a/dom/openapi/src/com/intellij/util/xml/ui/DomUIFactory.java +++ b/dom/openapi/src/com/intellij/util/xml/ui/DomUIFactory.java @@ -4,8 +4,7 @@ package com.intellij.util.xml.ui; import com.intellij.codeHighlighting.BackgroundEditorHighlighter; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; @@ -27,7 +26,7 @@ import java.lang.reflect.Type; /** * @author peter */ -public abstract class DomUIFactory implements ApplicationComponent { +public abstract class DomUIFactory { public static Method GET_VALUE_METHOD = null; public static Method SET_VALUE_METHOD = null; public static Method GET_STRING_METHOD = null; @@ -141,7 +140,7 @@ public abstract class DomUIFactory implements ApplicationComponent { } public static DomUIFactory getDomUIFactory() { - return ApplicationManager.getApplication().getComponent(DomUIFactory.class); + return ServiceManager.getService(DomUIFactory.class); } public DomUIControl createCollectionControl(DomElement element, DomCollectionChildDescription description) { diff --git a/extensions/source/com/intellij/openapi/extensions/ExtensionPoint.java b/extensions/source/com/intellij/openapi/extensions/ExtensionPoint.java index f3c63b4b1692..e9c7de036a31 100644 --- a/extensions/source/com/intellij/openapi/extensions/ExtensionPoint.java +++ b/extensions/source/com/intellij/openapi/extensions/ExtensionPoint.java @@ -24,17 +24,17 @@ public interface ExtensionPoint { String getBeanClassName(); - void registerExtension(Object extension); - void registerExtension(Object extension, LoadingOrder order); + void registerExtension(T extension); + void registerExtension(T extension, LoadingOrder order); T[] getExtensions(); T getExtension(); - boolean hasExtension(Object extension); + boolean hasExtension(T extension); - void unregisterExtension(Object extension); + void unregisterExtension(T extension); - void addExtensionPointListener(ExtensionPointListener listener); - void removeExtensionPointListener(ExtensionPointListener extensionPointListener); + void addExtensionPointListener(ExtensionPointListener listener); + void removeExtensionPointListener(ExtensionPointListener extensionPointListener); void reset(); diff --git a/extensions/source/com/intellij/openapi/extensions/ExtensionPointListener.java b/extensions/source/com/intellij/openapi/extensions/ExtensionPointListener.java index aee8f97167d5..60a7c5b0542d 100644 --- a/extensions/source/com/intellij/openapi/extensions/ExtensionPointListener.java +++ b/extensions/source/com/intellij/openapi/extensions/ExtensionPointListener.java @@ -15,7 +15,7 @@ */ package com.intellij.openapi.extensions; -public interface ExtensionPointListener { - void extensionAdded(Object extension); - void extensionRemoved(Object extension); +public interface ExtensionPointListener { + void extensionAdded(T extension); + void extensionRemoved(T extension); } diff --git a/extensions/source/com/intellij/openapi/extensions/Extensions.java b/extensions/source/com/intellij/openapi/extensions/Extensions.java index 5f9eb7922822..25e60fb77ebe 100644 --- a/extensions/source/com/intellij/openapi/extensions/Extensions.java +++ b/extensions/source/com/intellij/openapi/extensions/Extensions.java @@ -28,7 +28,7 @@ import java.util.Set; public abstract class Extensions { private static LogProvider ourLogger = new SimpleLogProvider(); - public static final String AREA_LISTENER_EXTENSION_POINT = "jetbrains.fabrique.platform.areaListeners"; + public static final ExtensionPointName AREA_LISTENER_EXTENSION_POINT = new ExtensionPointName("com.intellij.arealistener"); private static Map ourAreaClass2prototypeArea; private static Map ourAreaInstance2area; @@ -57,6 +57,13 @@ public abstract class Extensions { return (T[])getExtensions(extensionPointName.getName(), null); } + @SuppressWarnings({"unchecked"}) + public static T[] getExtensions(ExtensionPointName extensionPointName, AreaInstance areaInstance) { + return (T[])getExtensions(extensionPointName.getName(), areaInstance); + } + + + public static Object[] getExtensions(String extensionPointName, AreaInstance areaInstance) { ExtensionsArea area = getArea(areaInstance); assert area != null: "Unable to get area for " + areaInstance; @@ -75,7 +82,7 @@ public abstract class Extensions { ExtensionsAreaImpl rootArea = new ExtensionsAreaImpl(null, null, null, ourLogger); ourAreaInstance2area.put(null, rootArea); ourAreaClass2prototypeArea.put(null, rootArea); - rootArea.registerExtensionPoint(AREA_LISTENER_EXTENSION_POINT, AreaListener.class.getName()); + rootArea.registerExtensionPoint(AREA_LISTENER_EXTENSION_POINT.getName(), AreaListener.class.getName()); } } @@ -104,15 +111,13 @@ public abstract class Extensions { ourAreaClass2instances.put(areaClass, areaInstance); ourAreaInstance2class.put(areaInstance, areaClass); AreaListener[] listeners = getAreaListeners(); - for (int i = 0; i < listeners.length; i++) { - AreaListener listener = listeners[i]; + for (AreaListener listener : listeners) { listener.areaCreated(areaClass, areaInstance); } } private static AreaListener[] getAreaListeners() { - AreaListener[] listeners = (AreaListener[]) getRootArea().getExtensionPoint(AREA_LISTENER_EXTENSION_POINT).getExtensions(); - return listeners; + return getRootArea().getExtensionPoint(AREA_LISTENER_EXTENSION_POINT).getExtensions(); } public static void registerAreaClass(@NonNls String areaClass, @NonNls String parentAreaClass) { @@ -153,7 +158,7 @@ public abstract class Extensions { public static AreaInstance[] getAllAreas() { init(); final Set keys = ourAreaInstance2area.keySet(); - return (AreaInstance[]) keys.toArray(new AreaInstance[keys.size()]); + return keys.toArray(new AreaInstance[keys.size()]); } public static AreaInstance[] getAllAreas(String areaClass) { diff --git a/extensions/source/com/intellij/openapi/extensions/LoadingOrder.java b/extensions/source/com/intellij/openapi/extensions/LoadingOrder.java index a38c34d8d9e1..98478c28d719 100644 --- a/extensions/source/com/intellij/openapi/extensions/LoadingOrder.java +++ b/extensions/source/com/intellij/openapi/extensions/LoadingOrder.java @@ -40,9 +40,9 @@ public abstract class LoadingOrder { } }; - static final int DONT_CARE = -1; + private static final int DONT_CARE = -1; static final int ACCEPTABLE = -2; - static final int SPECIAL = -3; + private static final int SPECIAL = -3; private final String myName; // for debug only private static final String BEFORE_STR = "BEFORE:"; diff --git a/extensions/source/com/intellij/openapi/extensions/impl/AreaPicoContainerImpl.java b/extensions/source/com/intellij/openapi/extensions/impl/AreaPicoContainerImpl.java index 67ad635cfc9d..3644027b751d 100644 --- a/extensions/source/com/intellij/openapi/extensions/impl/AreaPicoContainerImpl.java +++ b/extensions/source/com/intellij/openapi/extensions/impl/AreaPicoContainerImpl.java @@ -27,7 +27,7 @@ import org.picocontainer.alternatives.AbstractDelegatingMutablePicoContainer; * @author Alexander Kireyev */ @SuppressWarnings({"unchecked"}) -public class AreaPicoContainerImpl extends AbstractDelegatingMutablePicoContainer implements AreaPicoContainer { +class AreaPicoContainerImpl extends AbstractDelegatingMutablePicoContainer implements AreaPicoContainer { private final AreaInstance myAreaInstance; public AreaPicoContainerImpl(PicoContainer parentPicoContainer, AreaInstance areaInstance) { diff --git a/extensions/source/com/intellij/openapi/extensions/impl/ElementConverter.java b/extensions/source/com/intellij/openapi/extensions/impl/ElementConverter.java index d0e1f2d4f948..25271f3125d3 100644 --- a/extensions/source/com/intellij/openapi/extensions/impl/ElementConverter.java +++ b/extensions/source/com/intellij/openapi/extensions/impl/ElementConverter.java @@ -25,7 +25,7 @@ import org.jdom.Element; /** * @author Alexander Kireyev */ -public class ElementConverter implements Converter { +class ElementConverter implements Converter { public boolean canConvert(Class aClass) { return Element.class.isAssignableFrom(aClass); } @@ -35,6 +35,7 @@ public class ElementConverter implements Converter { } public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, UnmarshallingContext unmarshallingContext) { - return hierarchicalStreamReader.peekUnderlyingNode(); + //return hierarchicalStreamReader.peekUnderlyingNode(); + throw new UnsupportedOperationException("This method is not yet implemented"); } } diff --git a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionClassAndAreaInstance.java b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionClassAndAreaInstance.java index b122abf9fcde..b0b77961cd00 100644 --- a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionClassAndAreaInstance.java +++ b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionClassAndAreaInstance.java @@ -15,7 +15,7 @@ */ package com.intellij.openapi.extensions.impl; -public class ExtensionClassAndAreaInstance { +class ExtensionClassAndAreaInstance { private final Class myExtensionClass; private final Object myAreaInstance; diff --git a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java index 27ba75be5217..347d7b4e9b95 100644 --- a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java +++ b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java @@ -17,6 +17,7 @@ package com.intellij.openapi.extensions.impl; import com.intellij.openapi.extensions.*; import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.annotations.Annotations; import com.thoughtworks.xstream.core.util.CompositeClassLoader; import com.thoughtworks.xstream.io.xml.JDomReader; import org.jdom.Element; @@ -52,14 +53,16 @@ public class ExtensionComponentAdapter extends ConstructorInjectionComponentAdap if (myPluginDescriptor.getPluginClassLoader() != null) { classLoader.add(myPluginDescriptor.getPluginClassLoader()); } - XStream xStream = new XStream(new PropertyReflectionProvider()); + //XStream xStream = new XStream(new PropertyReflectionProvider()); + XStream xStream = new XStream(); xStream.setClassLoader(classLoader); - xStream.registerConverter(new ElementConverter()); + //xStream.registerConverter(new ElementConverter()); Object componentInstance = super.getComponentInstance(container); if (componentInstance instanceof ReaderConfigurator) { ReaderConfigurator readerConfigurator = (ReaderConfigurator) componentInstance; readerConfigurator.configureReader(xStream); } + Annotations.configureAliases(xStream, componentInstance.getClass()); xStream.alias(myExtensionElement.getName(), componentInstance.getClass()); myComponentInstance = xStream.unmarshal(new JDomReader(myExtensionElement), componentInstance); } @@ -88,7 +91,7 @@ public class ExtensionComponentAdapter extends ConstructorInjectionComponentAdap return myExtensionElement.getAttributeValue("id"); } - public Element getExtensionElement() { + private Element getExtensionElement() { return myExtensionElement; } diff --git a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java index d905490a27cd..5bfa88586f6b 100644 --- a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java +++ b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java @@ -231,6 +231,8 @@ public class ExtensionPointImpl implements ExtensionPoint { } public void addExtensionPointListener(ExtensionPointListener listener) { + processAdapters(); + if (myEPListeners.add(listener)) { for (Iterator iterator = myExtensions.iterator(); iterator.hasNext();) { try { diff --git a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java index 8dbed17a12d5..7b91a56a502a 100644 --- a/extensions/source/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java +++ b/extensions/source/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java @@ -36,7 +36,7 @@ public class ExtensionsAreaImpl implements ExtensionsArea { private final LogProvider myLogger; private static final String ATTRIBUTE_AREA = "area"; - static Map ourDefaultEPs = new HashMap(); + private static Map ourDefaultEPs = new HashMap(); static { ourDefaultEPs.put(EPAvailabilityListenerExtension.EXTENSION_POINT_NAME, EPAvailabilityListenerExtension.class.getName()); @@ -221,7 +221,7 @@ public class ExtensionsAreaImpl implements ExtensionsArea { } } - public void initialize() { + private void initialize() { for (String epName : ourDefaultEPs.keySet()) { registerExtensionPoint(epName, ourDefaultEPs.get(epName)); } @@ -307,9 +307,12 @@ public class ExtensionsAreaImpl implements ExtensionsArea { if (extensions != null) { for (Element element : extensions) { - if (equal(areaClass, element.getAttributeValue(ATTRIBUTE_AREA))) { + if (hasExtensionPoint(extractEPName(element))) { registerExtension(pluginDescriptor, element); } + else { + //todo check that other classes have EP + } } } } diff --git a/extensions/testSource/com/intellij/openapi/extensions/impl/TestExtensionClassOne.java b/extensions/testSource/com/intellij/openapi/extensions/impl/TestExtensionClassOne.java index 17e75d38e220..166aafe47fd8 100644 --- a/extensions/testSource/com/intellij/openapi/extensions/impl/TestExtensionClassOne.java +++ b/extensions/testSource/com/intellij/openapi/extensions/impl/TestExtensionClassOne.java @@ -4,10 +4,13 @@ */ package com.intellij.openapi.extensions.impl; +import com.thoughtworks.xstream.annotations.XStreamAlias; + /** * @author Alexander Kireyev */ public class TestExtensionClassOne { + @XStreamAlias("text") private String myText; public TestExtensionClassOne() { @@ -20,8 +23,4 @@ public class TestExtensionClassOne { public String getText() { return myText; } - - public void setText(String text) { - myText = text; - } } diff --git a/extensions/testSource/com/intellij/openapi/extensions/impl/XMLTestBean.java b/extensions/testSource/com/intellij/openapi/extensions/impl/XMLTestBean.java index 5378b2abd8b8..7fef3a4477bc 100644 --- a/extensions/testSource/com/intellij/openapi/extensions/impl/XMLTestBean.java +++ b/extensions/testSource/com/intellij/openapi/extensions/impl/XMLTestBean.java @@ -14,58 +14,58 @@ import java.util.Collection; * @author Alexander Kireyev */ public class XMLTestBean implements PluginAware { - private boolean myOtherProperty; - private int myProp1; - private Object myProp2; - private Collection myCollectionProperty; - private PluginId myPluginId; + private boolean otherProperty; + private int prop1; + private Object prop2; + private Collection collectionProperty; + private PluginId pluginId; public XMLTestBean() { } public XMLTestBean(Collection aCollectionProperty, boolean aOtherProperty, int aProp1) { - myCollectionProperty = aCollectionProperty; - myOtherProperty = aOtherProperty; - myProp1 = aProp1; + collectionProperty = aCollectionProperty; + otherProperty = aOtherProperty; + prop1 = aProp1; } public boolean isOtherProperty() { - return myOtherProperty; + return otherProperty; } public void setOtherProperty(boolean otherProperty) { - myOtherProperty = otherProperty; + this.otherProperty = otherProperty; } public int getProp1() { - return myProp1; + return prop1; } public void setProp1(int prop1) { - myProp1 = prop1; + this.prop1 = prop1; } public Object getProp2() { - return myProp2; + return prop2; } public void setProp2(Object prop2) { - myProp2 = prop2; + this.prop2 = prop2; } public Collection getCollectionProperty() { - return myCollectionProperty; + return collectionProperty; } public void setCollectionProperty(Collection collectionProperty) { - myCollectionProperty = collectionProperty; + this.collectionProperty = collectionProperty; } public void setPluginDescriptor(PluginDescriptor pluginDescriptor) { - myPluginId = pluginDescriptor.getPluginId(); + pluginId = pluginDescriptor.getPluginId(); } public PluginId getPluginId() { - return myPluginId; + return pluginId; } } diff --git a/lib/xstream.jar b/lib/xstream.jar index 392e1c937398..e43240a50219 100644 Binary files a/lib/xstream.jar and b/lib/xstream.jar differ diff --git a/openapi/src/com/intellij/openapi/components/ServiceDescriptor.java b/openapi/src/com/intellij/openapi/components/ServiceDescriptor.java new file mode 100644 index 000000000000..a95bca9c90dd --- /dev/null +++ b/openapi/src/com/intellij/openapi/components/ServiceDescriptor.java @@ -0,0 +1,39 @@ +package com.intellij.openapi.components; + +import com.intellij.openapi.extensions.ReaderConfigurator; +import com.thoughtworks.xstream.XStream; + +public class ServiceDescriptor implements ReaderConfigurator { + private String serviceInterface; + private String serviceImplementation; + + public ServiceDescriptor() { + } + + public ServiceDescriptor(final String serviceInterface, final String serviceImplementation) { + this.serviceInterface = serviceInterface; + this.serviceImplementation = serviceImplementation; + } + + public String getServiceInterface() { + return serviceInterface; + } + + public String getServiceImplementation() { + return serviceImplementation; + } + + + public void setServiceInterface(final String serviceInterface) { + this.serviceInterface = serviceInterface; + } + + public void setServiceImplementation(final String serviceImplementation) { + this.serviceImplementation = serviceImplementation; + } + + public void configureReader(XStream xstream) { + xstream.useAttributeFor("serviceInterface", String.class); + xstream.useAttributeFor("serviceImplementation", String.class); + } +} diff --git a/openapi/src/com/intellij/openapi/components/ServiceManager.java b/openapi/src/com/intellij/openapi/components/ServiceManager.java new file mode 100644 index 000000000000..33b3b48699a3 --- /dev/null +++ b/openapi/src/com/intellij/openapi/components/ServiceManager.java @@ -0,0 +1,23 @@ +package com.intellij.openapi.components; + +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; + +@SuppressWarnings({"unchecked"}) +public class ServiceManager { + private ServiceManager() { + } + + public static T getService(Class serviceClass) { + return (T)ApplicationManager.getApplication().getPicoContainer().getComponentInstance(serviceClass.getName()); + } + + public static T getService(Project project, Class serviceClass) { + return (T)project.getPicoContainer().getComponentInstance(serviceClass.getName()); + } + + public static T getService(Module module, Class serviceClass) { + return (T)module.getPicoContainer().getComponentInstance(serviceClass.getName()); + } +} diff --git a/plugins-management/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java b/plugins-management/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java index 30a54a1c1e55..0e9705a035aa 100644 --- a/plugins-management/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java +++ b/plugins-management/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java @@ -225,6 +225,7 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor { return myDependencies; } + @NotNull public PluginId[] getOptionalDependentPluginIds() { return myOptionalDependencies; @@ -440,4 +441,10 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor { myDescription = loadDescription(myDescriptionChildText, bundle, myId); } + public void insertDependency(final IdeaPluginDescriptor d) { + PluginId[] deps = new PluginId[getDependentPluginIds().length + 1]; + deps[0] = d.getPluginId(); + System.arraycopy(myDependencies, 0, deps, 1, deps.length - 1); + myDependencies = deps; + } } diff --git a/plugins-management/src/com/intellij/ide/plugins/PluginManager.java b/plugins-management/src/com/intellij/ide/plugins/PluginManager.java index 668adcd52839..6e750d8af781 100644 --- a/plugins-management/src/com/intellij/ide/plugins/PluginManager.java +++ b/plugins-management/src/com/intellij/ide/plugins/PluginManager.java @@ -9,9 +9,10 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.application.impl.PluginsFacade; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.*; +import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.extensions.LogProvider; +import com.intellij.openapi.extensions.PluginId; import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.graph.CachingSemiGraph; @@ -20,9 +21,6 @@ import com.intellij.util.graph.Graph; import com.intellij.util.graph.GraphGenerator; import com.intellij.util.lang.UrlClassLoader; import com.intellij.util.text.StringTokenizer; -import org.jdom.Document; -import org.jdom.Element; -import org.jdom.JDOMException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; import sun.reflect.Reflection; @@ -31,7 +29,6 @@ import javax.swing.*; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -55,6 +52,7 @@ public class PluginManager { @NonNls private static final String PROPERTY_PLUGIN_PATH = "plugin.path"; private static final Object PLUGIN_CLASSES_LOCK = new Object(); private static String myPluginError = null; + private static final String CORE_PLUGIN_ID = "com.intellij"; private static Logger getLogger() { if (ourLogger == null) { @@ -119,6 +117,15 @@ public class PluginManager { for (final IdeaPluginDescriptor descriptor : pluginDescriptors) { idToDescriptorMap.put(descriptor.getPluginId(), descriptor); } + + final IdeaPluginDescriptor corePluginDescriptor = idToDescriptorMap.get(PluginId.getId(CORE_PLUGIN_ID)); + assert corePluginDescriptor != null; + for (IdeaPluginDescriptorImpl descriptor : pluginDescriptors) { + if (descriptor != corePluginDescriptor) { + descriptor.insertDependency(corePluginDescriptor); + } + } + // sort descriptors according to plugin dependencies Arrays.sort(pluginDescriptors, getPluginDescriptorComparator(idToDescriptorMap)); @@ -140,51 +147,9 @@ public class PluginManager { } private static void configureExtensions() { - final List extensionPoints = new ArrayList(); - final List extensions = new ArrayList(); - - try { - final InputStream stdExtensionsStream = PluginManager.class.getResourceAsStream("/standard-extensions.xml"); - final Document stdExtensions = JDOMUtil.loadDocument(stdExtensionsStream); - final Element root = stdExtensions.getRootElement(); - final List epRoots = JDOMUtil.getChildrenFromAllNamespaces(root, "extensionPoints"); - for (Element epRoot : epRoots) { - for (Object o : epRoot.getChildren()) { - extensionPoints.add((Element)o); - } - } - - final List extensionRoots = JDOMUtil.getChildrenFromAllNamespaces(root, "extensions"); - for (Element extRoot : extensionRoots) { - for (Object o : extRoot.getChildren()) { - extensions.add((Element)o); - } - } - } - catch (JDOMException e) { - e.printStackTrace(); - } - catch (IOException e) { - e.printStackTrace(); - } - Extensions.setLogProvider(new IdeaLogProvider()); Extensions.registerAreaClass(AREA_IDEA_PROJECT, null); Extensions.registerAreaClass(AREA_IDEA_MODULE, AREA_IDEA_PROJECT); - - Extensions.getRootArea().registerAreaExtensionsAndPoints(RootPluginDescriptor.INSTANCE, extensionPoints, extensions); - - Extensions.getRootArea().getExtensionPoint(Extensions.AREA_LISTENER_EXTENSION_POINT).registerExtension(new AreaListener() { - public void areaCreated(String areaClass, AreaInstance areaInstance) { - if (AREA_IDEA_PROJECT.equals(areaClass) || AREA_IDEA_MODULE.equals(areaClass)) { - final ExtensionsArea area = Extensions.getArea(areaInstance); - area.registerAreaExtensionsAndPoints(RootPluginDescriptor.INSTANCE, extensionPoints, extensions); - } - } - - public void areaDisposing(String areaClass, AreaInstance areaInstance) { - } - }, LoadingOrder.FIRST); } public static boolean shouldLoadPlugins() { @@ -200,20 +165,33 @@ public class PluginManager { return loadPlugins == null || Boolean.TRUE.toString().equals(loadPlugins); } - public static boolean shouldLoadPlugin(IdeaPluginDescriptor descriptor) { - //noinspection HardCodedStringLiteral - final String loadPluginCategory = System.getProperty("idea.load.plugins.category"); - if (loadPluginCategory != null) { - return loadPluginCategory.equals(descriptor.getCategory()); + public static boolean shouldSkipPlugin(IdeaPluginDescriptor descriptor) { + final boolean shouldLoad; + + if (descriptor.getPluginId().getIdString().equals(CORE_PLUGIN_ID)) { + shouldLoad = true; } - //noinspection HardCodedStringLiteral - final String pluginId = System.getProperty("idea.load.plugins.id"); - return pluginId == null || (descriptor.getPluginId() != null && - descriptor.getPluginId().getIdString() != null && - pluginId.equals(descriptor.getPluginId().getIdString())); + else { + //noinspection HardCodedStringLiteral + final String loadPluginCategory = System.getProperty("idea.load.plugins.category"); + if (loadPluginCategory != null) { + shouldLoad = loadPluginCategory.equals(descriptor.getCategory()); + } + else { + //noinspection HardCodedStringLiteral + final String pluginId = System.getProperty("idea.load.plugins.id"); + shouldLoad = pluginId == null || (descriptor.getPluginId() != null && + descriptor.getPluginId().getIdString() != null && + pluginId.equals(descriptor.getPluginId().getIdString())); + } + } + + + return !shouldLoad; } + private static Comparator getPluginDescriptorComparator(Map idToDescriptorMap) { final Graph graph = createPluginIdGraph(idToDescriptorMap); final DFSTBuilder builder = new DFSTBuilder(graph); @@ -368,7 +346,6 @@ public class PluginManager { @SuppressWarnings({"UseOfSystemOutOrSystemErr", "CallToPrintStackTrace"}) private static void loadDescriptorsFromClassPath(final List result) { try { - final String homePath = PathManager.getHomePath(); final Collection urls = getClassLoaderUrls(); for (URL url : urls) { final String protocol = url.getProtocol(); @@ -395,8 +372,7 @@ public class PluginManager { final Class aClass = classLoader.getClass(); if (aClass.getName().equals(UrlClassLoader.class.getName())) { try { - final List urls = (List)aClass.getDeclaredMethod("getUrls").invoke(classLoader); - return urls; + return (List)aClass.getDeclaredMethod("getUrls").invoke(classLoader); } catch (IllegalAccessException e) { } @@ -458,7 +434,7 @@ public class PluginManager { } for (Iterator iterator = result.iterator(); iterator.hasNext();) { IdeaPluginDescriptor descriptor = iterator.next(); - if (!shouldLoadPlugins() || !shouldLoadPlugin(descriptor)) { + if (!shouldLoadPlugins() || shouldSkipPlugin(descriptor)) { iterator.remove(); } } @@ -479,6 +455,7 @@ public class PluginManager { } @SuppressWarnings({"HardCodedStringLiteral"}) + @Nullable private static IdeaPluginDescriptorImpl loadDescriptor(final File file) { IdeaPluginDescriptorImpl descriptor = null; diff --git a/resources/src/componentSets/CodeInsight.xml b/resources/src/componentSets/CodeInsight.xml index 644145ad4855..341f31a46d99 100644 --- a/resources/src/componentSets/CodeInsight.xml +++ b/resources/src/componentSets/CodeInsight.xml @@ -101,10 +101,6 @@ com.intellij.codeInsight.daemon.impl.EditorTracker - - com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl - - com.intellij.codeInsight.guess.GuessManager com.intellij.codeInsight.guess.impl.GuessManagerImpl diff --git a/resources/src/componentSets/Core.xml b/resources/src/componentSets/Core.xml index 324bd87c2ed8..bbd267dd3933 100644 --- a/resources/src/componentSets/Core.xml +++ b/resources/src/componentSets/Core.xml @@ -180,11 +180,10 @@ com.intellij.ide.Exe4jListener + - com.intellij.util.xml.ui.DomUIFactory - com.intellij.util.xml.ui.DomUIFactoryImpl - - + com.intellij.openapi.components.impl.ServiceManagerImpl + @@ -208,10 +207,6 @@ com.intellij.util.xml.impl.DomElementsNavigationManagerImpl - - com.intellij.util.xml.ui.EditorTextFieldControlHighlighter - - com.intellij.openapi.startup.StartupManager com.intellij.ide.startup.impl.StartupManagerImpl @@ -354,6 +349,10 @@ com.intellij.facet.FacetExistentceListenersRegistry com.intellij.facet.impl.FacetExistentceListenersRegistryImpl + + + com.intellij.openapi.components.impl.ServiceManagerImpl + @@ -369,5 +368,9 @@ com.intellij.jar.BuildJarSettings + + + com.intellij.openapi.components.impl.ServiceManagerImpl + diff --git a/source/com/intellij/openapi/application/impl/ApplicationImpl.java b/source/com/intellij/openapi/application/impl/ApplicationImpl.java index f298b92b1eec..99dbf9a27964 100644 --- a/source/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/source/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -196,12 +196,6 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application return myName; } - public void initComponents() { - initComponentsFromExtensions(Extensions.getRootArea()); - super.initComponents(); - } - - @Override protected void handleInitComponentError(final Throwable ex, final boolean fatal, final String componentClassName) { if (PluginManager.isPluginClass(componentClassName)) { @@ -240,7 +234,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application if (PluginManager.shouldLoadPlugins()) { final IdeaPluginDescriptor[] plugins = PluginManager.getPlugins(); for (IdeaPluginDescriptor plugin : plugins) { - if (!PluginManager.shouldLoadPlugin(plugin)) continue; + if (PluginManager.shouldSkipPlugin(plugin)) continue; loadComponentsConfiguration(plugin.getAppComponents(), plugin, true); } } diff --git a/source/com/intellij/openapi/components/impl/ComponentManagerImpl.java b/source/com/intellij/openapi/components/impl/ComponentManagerImpl.java index 00ff1f4eeecc..a34caf131df4 100644 --- a/source/com/intellij/openapi/components/impl/ComponentManagerImpl.java +++ b/source/com/intellij/openapi/components/impl/ComponentManagerImpl.java @@ -1,10 +1,7 @@ package com.intellij.openapi.components.impl; -import com.intellij.ExtensionPoints; import com.intellij.diagnostic.PluginException; -import com.intellij.ide.plugins.ComponentDescriptor; import com.intellij.ide.plugins.IdeaPluginDescriptor; -import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.components.BaseComponent; @@ -14,10 +11,7 @@ import com.intellij.openapi.components.SettingsSavingComponent; import com.intellij.openapi.components.ex.ComponentManagerEx; import com.intellij.openapi.components.impl.stores.IComponentStore; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.ExtensionsArea; -import com.intellij.openapi.extensions.PluginId; import com.intellij.openapi.util.UserDataHolderBase; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.IdeaPicoContainer; import com.intellij.util.containers.HashMap; import com.intellij.util.messages.MessageBus; @@ -260,44 +254,6 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements return result; } - public void initComponentsFromExtensions(final ExtensionsArea extensionsArea) { - //if (ApplicationManagerEx.getApplicationEx().isUnitTestMode()) return; // TODO: quick and dirty. To make tests running. - final Application app = ApplicationManager.getApplication(); - final boolean headless = app.isHeadlessEnvironment(); - - final ComponentDescriptor[] componentDescriptors = - (ComponentDescriptor[])extensionsArea.getExtensionPoint(ExtensionPoints.COMPONENT).getExtensions(); - for (ComponentDescriptor descriptor : componentDescriptors) { - final Map options = descriptor.getOptionsMap(); - if (isComponentSuitable(options)) { - - ClassLoader loader = findLoader(descriptor.getPluginId()); - try { - final String implementation = headless ? descriptor.getHeadlessImplementation() : descriptor.getImplementation(); - if (!StringUtil.isEmpty(implementation)) { - registerComponent(Class.forName(descriptor.getInterface(), true, loader), Class.forName(implementation, true, loader), options); - } - } - catch (Exception e) { - LOG.error(new PluginException(e, descriptor.getPluginId())); - } - catch (Error e) { - LOG.error(new PluginException(e, descriptor.getPluginId())); - } - } - } - - } - - private ClassLoader findLoader(final PluginId id) { - final Application app = ApplicationManager.getApplication(); - ClassLoader loader = app.getPlugin(id).getPluginClassLoader(); - if (loader == null) { - loader = getClass().getClassLoader(); - } - return loader; - } - public synchronized BaseComponent getComponent(String name) { return myComponentsRegistry.getComponentByName(name); } @@ -463,7 +419,7 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements } private boolean containsInterface(final Class interfaceClass) { - assert myClassesLoaded; + if (!myClassesLoaded) loadClasses(); return myInterfaceToClassMap.containsKey(interfaceClass); } diff --git a/source/com/intellij/openapi/components/impl/ServiceManagerImpl.java b/source/com/intellij/openapi/components/impl/ServiceManagerImpl.java new file mode 100644 index 000000000000..927c03adf220 --- /dev/null +++ b/source/com/intellij/openapi/components/impl/ServiceManagerImpl.java @@ -0,0 +1,108 @@ +package com.intellij.openapi.components.impl; + +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.components.BaseComponent; +import com.intellij.openapi.components.ComponentManager; +import com.intellij.openapi.components.ServiceDescriptor; +import com.intellij.openapi.extensions.ExtensionPoint; +import com.intellij.openapi.extensions.ExtensionPointListener; +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.picocontainer.*; +import org.picocontainer.defaults.CachingComponentAdapter; +import org.picocontainer.defaults.ConstructorInjectionComponentAdapter; + +public class ServiceManagerImpl implements BaseComponent { + private static final ExtensionPointName APP_SERVICES = new ExtensionPointName("com.intellij.applicationService"); + private static final ExtensionPointName PROJECT_SERVICES = new ExtensionPointName("com.intellij.projectService"); + private static final ExtensionPointName MODULE_SERVICES = new ExtensionPointName("com.intellij.moduleService"); + private ExtensionPointName myExtensionPointName; + private ExtensionPointListener myExtensionPointListener; + + public ServiceManagerImpl() { + installEP(APP_SERVICES, ApplicationManager.getApplication()); + } + + public ServiceManagerImpl(Project project) { + installEP(PROJECT_SERVICES, project); + } + + @SuppressWarnings({"UnusedDeclaration"}) + public ServiceManagerImpl(Project project, Module module) { + installEP(MODULE_SERVICES, module); + } + + + private void installEP(final ExtensionPointName pointName, final ComponentManager componentManager) { + myExtensionPointName = pointName; + final ExtensionPoint extensionPoint = Extensions.getArea(null).getExtensionPoint(pointName); + assert extensionPoint != null; + + final MutablePicoContainer picoContainer = (MutablePicoContainer)componentManager.getPicoContainer(); + + myExtensionPointListener = new ExtensionPointListener() { + public void extensionAdded(final ServiceDescriptor descriptor) { + picoContainer.registerComponent(new ComponentAdapter() { + private ComponentAdapter myDelegate = null; + + public Object getComponentKey() { + return descriptor.getServiceInterface(); + } + + public Class getComponentImplementation() { + try { + return Class.forName(descriptor.getServiceImplementation()); + } + catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + public Object getComponentInstance(final PicoContainer container) throws PicoInitializationException, PicoIntrospectionException { + return getDelegate().getComponentInstance(container); + } + + private synchronized ComponentAdapter getDelegate() { + if (myDelegate == null) { + myDelegate = new CachingComponentAdapter(new ConstructorInjectionComponentAdapter(getComponentKey(), getComponentImplementation(), null, true)); + } + + return myDelegate; + } + + public void verify(final PicoContainer container) throws PicoIntrospectionException { + getDelegate().verify(container); + } + + public void accept(final PicoVisitor visitor) { + visitor.visitComponentAdapter(this); + } + }); + } + + public void extensionRemoved(final ServiceDescriptor extension) { + picoContainer.unregisterComponent(extension.getServiceInterface()); + } + }; + extensionPoint.addExtensionPointListener(myExtensionPointListener); + } + + @NonNls + @NotNull + public String getComponentName() { + return getClass().getName(); + } + + public void initComponent() { + } + + public void disposeComponent() { + final ExtensionPoint extensionPoint = Extensions.getArea(null).getExtensionPoint(myExtensionPointName); + assert extensionPoint != null; + extensionPoint.removeExtensionPointListener(myExtensionPointListener); + } +} diff --git a/source/com/intellij/openapi/components/impl/stores/ModuleStoreImpl.java b/source/com/intellij/openapi/components/impl/stores/ModuleStoreImpl.java index 45d81743cc66..a25857fa0659 100644 --- a/source/com/intellij/openapi/components/impl/stores/ModuleStoreImpl.java +++ b/source/com/intellij/openapi/components/impl/stores/ModuleStoreImpl.java @@ -5,7 +5,6 @@ import com.intellij.openapi.application.ex.DecodeDefaultsUtil; import com.intellij.openapi.components.ComponentConfig; import com.intellij.openapi.components.impl.ComponentManagerImpl; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.module.ModuleTypeManager; @@ -164,6 +163,5 @@ class ModuleStoreImpl extends BaseFileConfigurableStoreImpl implements IModuleSt } public synchronized void initStore() { - getComponentManager().initComponentsFromExtensions(Extensions.getArea(myModule)); } } diff --git a/source/com/intellij/openapi/components/impl/stores/ProjectStoreImpl.java b/source/com/intellij/openapi/components/impl/stores/ProjectStoreImpl.java index 4b74917b8ed3..cb1b5d202542 100644 --- a/source/com/intellij/openapi/components/impl/stores/ProjectStoreImpl.java +++ b/source/com/intellij/openapi/components/impl/stores/ProjectStoreImpl.java @@ -11,7 +11,6 @@ import com.intellij.openapi.components.ComponentConfig; import com.intellij.openapi.components.PathMacroManager; import com.intellij.openapi.components.impl.ComponentManagerImpl; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.help.HelpManager; import com.intellij.openapi.module.Module; @@ -403,7 +402,6 @@ class ProjectStoreImpl extends BaseFileConfigurableStoreImpl implements IProject } public synchronized void initStore() { - getComponentManager().initComponentsFromExtensions(Extensions.getArea(myProject)); } diff --git a/source/com/intellij/openapi/module/impl/ModuleImpl.java b/source/com/intellij/openapi/module/impl/ModuleImpl.java index 4e11f1a215ce..164288b04caa 100644 --- a/source/com/intellij/openapi/module/impl/ModuleImpl.java +++ b/source/com/intellij/openapi/module/impl/ModuleImpl.java @@ -109,7 +109,7 @@ public class ModuleImpl extends ComponentManagerImpl implements Module { if (PluginManager.shouldLoadPlugins()) { final IdeaPluginDescriptor[] plugins = PluginManager.getPlugins(); for (IdeaPluginDescriptor plugin : plugins) { - if (!PluginManager.shouldLoadPlugin(plugin)) continue; + if (PluginManager.shouldSkipPlugin(plugin)) continue; loadComponentsConfiguration(plugin.getModuleComponents(), plugin, true); } } diff --git a/source/com/intellij/openapi/progress/util/StatusBarProgress.java b/source/com/intellij/openapi/progress/util/StatusBarProgress.java index 0181c4ca2172..21d0268ad546 100644 --- a/source/com/intellij/openapi/progress/util/StatusBarProgress.java +++ b/source/com/intellij/openapi/progress/util/StatusBarProgress.java @@ -5,6 +5,7 @@ import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.util.Pair; import com.intellij.openapi.wm.WindowManager; import com.intellij.openapi.wm.ex.StatusBarEx; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.util.containers.HashMap; import javax.swing.*; @@ -19,6 +20,7 @@ public class StatusBarProgress extends ProgressIndicatorBase { SwingUtilities.invokeLater ( new Runnable() { public void run() { + if (ApplicationManager.getApplication().isDisposed()) return; Project[] projects=ProjectManager.getInstance().getOpenProjects(); if(projects.length==0){ projects=new Project[]{null}; diff --git a/source/com/intellij/openapi/project/impl/ProjectImpl.java b/source/com/intellij/openapi/project/impl/ProjectImpl.java index 35ccdcd6e18a..050e82f2db8e 100644 --- a/source/com/intellij/openapi/project/impl/ProjectImpl.java +++ b/source/com/intellij/openapi/project/impl/ProjectImpl.java @@ -227,7 +227,7 @@ public class ProjectImpl extends ComponentManagerImpl implements ProjectEx { final Application app = ApplicationManager.getApplication(); final IdeaPluginDescriptor[] plugins = app.getPlugins(); for (IdeaPluginDescriptor plugin : plugins) { - if (!PluginManager.shouldLoadPlugin(plugin)) continue; + if (PluginManager.shouldSkipPlugin(plugin)) continue; loadComponentsConfiguration(plugin.getProjectComponents(), plugin, true); } }