mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Introducing Services
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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<HighlightVisitor> EP_HIGHLIGHT_VISITOR = new ExtensionPointName<HighlightVisitor>("com.intellij.highlightVisitor");
|
||||
|
||||
boolean suitableForFile(PsiFile file);
|
||||
void visit(PsiElement element, HighlightInfoHolder holder);
|
||||
void setRefCountHolder(RefCountHolder refCountHolder);
|
||||
|
||||
+1
-17
@@ -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<String, Pair<PsiImportStaticReferenceElement, PsiField>> mySingleImportedFields = new THashMap<String, Pair<PsiImportStaticReferenceElement, PsiField>>();
|
||||
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());
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -24,17 +24,17 @@ public interface ExtensionPoint<T> {
|
||||
|
||||
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<T> listener);
|
||||
void removeExtensionPointListener(ExtensionPointListener<T> extensionPointListener);
|
||||
|
||||
void reset();
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.extensions;
|
||||
|
||||
public interface ExtensionPointListener {
|
||||
void extensionAdded(Object extension);
|
||||
void extensionRemoved(Object extension);
|
||||
public interface ExtensionPointListener<T> {
|
||||
void extensionAdded(T extension);
|
||||
void extensionRemoved(T extension);
|
||||
}
|
||||
|
||||
@@ -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<AreaListener> AREA_LISTENER_EXTENSION_POINT = new ExtensionPointName<AreaListener>("com.intellij.arealistener");
|
||||
|
||||
private static Map ourAreaClass2prototypeArea;
|
||||
private static Map<AreaInstance,ExtensionsAreaImpl> ourAreaInstance2area;
|
||||
@@ -57,6 +57,13 @@ public abstract class Extensions {
|
||||
return (T[])getExtensions(extensionPointName.getName(), null);
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked"})
|
||||
public static <T> T[] getExtensions(ExtensionPointName<T> 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<AreaInstance> keys = ourAreaInstance2area.keySet();
|
||||
return (AreaInstance[]) keys.toArray(new AreaInstance[keys.size()]);
|
||||
return keys.toArray(new AreaInstance[keys.size()]);
|
||||
}
|
||||
|
||||
public static AreaInstance[] getAllAreas(String areaClass) {
|
||||
|
||||
@@ -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:";
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.extensions.impl;
|
||||
|
||||
public class ExtensionClassAndAreaInstance {
|
||||
class ExtensionClassAndAreaInstance {
|
||||
private final Class myExtensionClass;
|
||||
private final Object myAreaInstance;
|
||||
|
||||
|
||||
+6
-3
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -36,7 +36,7 @@ public class ExtensionsAreaImpl implements ExtensionsArea {
|
||||
private final LogProvider myLogger;
|
||||
private static final String ATTRIBUTE_AREA = "area";
|
||||
|
||||
static Map<String,String> ourDefaultEPs = new HashMap<String, String>();
|
||||
private static Map<String,String> ourDefaultEPs = new HashMap<String, String>();
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-4
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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> T getService(Class<T> serviceClass) {
|
||||
return (T)ApplicationManager.getApplication().getPicoContainer().getComponentInstance(serviceClass.getName());
|
||||
}
|
||||
|
||||
public static <T> T getService(Project project, Class<T> serviceClass) {
|
||||
return (T)project.getPicoContainer().getComponentInstance(serviceClass.getName());
|
||||
}
|
||||
|
||||
public static <T> T getService(Module module, Class<T> serviceClass) {
|
||||
return (T)module.getPicoContainer().getComponentInstance(serviceClass.getName());
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Element> extensionPoints = new ArrayList<Element>();
|
||||
final List<Element> extensions = new ArrayList<Element>();
|
||||
|
||||
try {
|
||||
final InputStream stdExtensionsStream = PluginManager.class.getResourceAsStream("/standard-extensions.xml");
|
||||
final Document stdExtensions = JDOMUtil.loadDocument(stdExtensionsStream);
|
||||
final Element root = stdExtensions.getRootElement();
|
||||
final List<Element> epRoots = JDOMUtil.getChildrenFromAllNamespaces(root, "extensionPoints");
|
||||
for (Element epRoot : epRoots) {
|
||||
for (Object o : epRoot.getChildren()) {
|
||||
extensionPoints.add((Element)o);
|
||||
}
|
||||
}
|
||||
|
||||
final List<Element> 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<IdeaPluginDescriptor> getPluginDescriptorComparator(Map<PluginId, IdeaPluginDescriptor> idToDescriptorMap) {
|
||||
final Graph<PluginId> graph = createPluginIdGraph(idToDescriptorMap);
|
||||
final DFSTBuilder<PluginId> builder = new DFSTBuilder<PluginId>(graph);
|
||||
@@ -368,7 +346,6 @@ public class PluginManager {
|
||||
@SuppressWarnings({"UseOfSystemOutOrSystemErr", "CallToPrintStackTrace"})
|
||||
private static void loadDescriptorsFromClassPath(final List<IdeaPluginDescriptorImpl> result) {
|
||||
try {
|
||||
final String homePath = PathManager.getHomePath();
|
||||
final Collection<URL> urls = getClassLoaderUrls();
|
||||
for (URL url : urls) {
|
||||
final String protocol = url.getProtocol();
|
||||
@@ -395,8 +372,7 @@ public class PluginManager {
|
||||
final Class<? extends ClassLoader> aClass = classLoader.getClass();
|
||||
if (aClass.getName().equals(UrlClassLoader.class.getName())) {
|
||||
try {
|
||||
final List<URL> urls = (List<URL>)aClass.getDeclaredMethod("getUrls").invoke(classLoader);
|
||||
return urls;
|
||||
return (List<URL>)aClass.getDeclaredMethod("getUrls").invoke(classLoader);
|
||||
}
|
||||
catch (IllegalAccessException e) {
|
||||
}
|
||||
@@ -458,7 +434,7 @@ public class PluginManager {
|
||||
}
|
||||
for (Iterator<IdeaPluginDescriptorImpl> 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;
|
||||
|
||||
|
||||
@@ -101,10 +101,6 @@
|
||||
<implementation-class>com.intellij.codeInsight.daemon.impl.EditorTracker</implementation-class>
|
||||
<skipForDummyProject/>
|
||||
</component>
|
||||
<component>
|
||||
<implementation-class>com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl</implementation-class>
|
||||
<skipForDummyProject/>
|
||||
</component>
|
||||
<component>
|
||||
<interface-class>com.intellij.codeInsight.guess.GuessManager</interface-class>
|
||||
<implementation-class>com.intellij.codeInsight.guess.impl.GuessManagerImpl</implementation-class>
|
||||
|
||||
@@ -180,11 +180,10 @@
|
||||
<component>
|
||||
<implementation-class>com.intellij.ide.Exe4jListener</implementation-class>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<interface-class>com.intellij.util.xml.ui.DomUIFactory</interface-class>
|
||||
<implementation-class>com.intellij.util.xml.ui.DomUIFactoryImpl</implementation-class>
|
||||
</component>
|
||||
|
||||
<implementation-class>com.intellij.openapi.components.impl.ServiceManagerImpl</implementation-class>
|
||||
</component>
|
||||
</application-components>
|
||||
|
||||
|
||||
@@ -208,10 +207,6 @@
|
||||
<implementation-class>com.intellij.util.xml.impl.DomElementsNavigationManagerImpl</implementation-class>
|
||||
<skipForDummyProject/>
|
||||
</component>
|
||||
<component>
|
||||
<implementation-class>com.intellij.util.xml.ui.EditorTextFieldControlHighlighter</implementation-class>
|
||||
<skipForDummyProject/>
|
||||
</component>
|
||||
<component>
|
||||
<interface-class>com.intellij.openapi.startup.StartupManager</interface-class>
|
||||
<implementation-class>com.intellij.ide.startup.impl.StartupManagerImpl</implementation-class>
|
||||
@@ -354,6 +349,10 @@
|
||||
<interface-class>com.intellij.facet.FacetExistentceListenersRegistry</interface-class>
|
||||
<implementation-class>com.intellij.facet.impl.FacetExistentceListenersRegistryImpl</implementation-class>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<implementation-class>com.intellij.openapi.components.impl.ServiceManagerImpl</implementation-class>
|
||||
</component>
|
||||
</project-components>
|
||||
|
||||
|
||||
@@ -369,5 +368,9 @@
|
||||
<component>
|
||||
<implementation-class>com.intellij.jar.BuildJarSettings</implementation-class>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<implementation-class>com.intellij.openapi.components.impl.ServiceManagerImpl</implementation-class>
|
||||
</component>
|
||||
</module-components>
|
||||
</components>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, String> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<ServiceDescriptor> APP_SERVICES = new ExtensionPointName<ServiceDescriptor>("com.intellij.applicationService");
|
||||
private static final ExtensionPointName<ServiceDescriptor> PROJECT_SERVICES = new ExtensionPointName<ServiceDescriptor>("com.intellij.projectService");
|
||||
private static final ExtensionPointName<ServiceDescriptor> MODULE_SERVICES = new ExtensionPointName<ServiceDescriptor>("com.intellij.moduleService");
|
||||
private ExtensionPointName<ServiceDescriptor> myExtensionPointName;
|
||||
private ExtensionPointListener<ServiceDescriptor> 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<ServiceDescriptor> pointName, final ComponentManager componentManager) {
|
||||
myExtensionPointName = pointName;
|
||||
final ExtensionPoint<ServiceDescriptor> extensionPoint = Extensions.getArea(null).getExtensionPoint(pointName);
|
||||
assert extensionPoint != null;
|
||||
|
||||
final MutablePicoContainer picoContainer = (MutablePicoContainer)componentManager.getPicoContainer();
|
||||
|
||||
myExtensionPointListener = new ExtensionPointListener<ServiceDescriptor>() {
|
||||
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<ServiceDescriptor> extensionPoint = Extensions.getArea(null).getExtensionPoint(myExtensionPointName);
|
||||
assert extensionPoint != null;
|
||||
extensionPoint.removeExtensionPointListener(myExtensionPointListener);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user