From 45c3feee70352595049fa47365ae185ae024af2f Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 26 Feb 2013 14:28:45 +0400 Subject: [PATCH] notnull --- .../EPAvailabilityListenerExtension.java | 10 ++- .../openapi/extensions/Extension.java | 6 +- .../openapi/extensions/ExtensionPoint.java | 4 + .../openapi/extensions/ExtensionsArea.java | 44 ++++++----- .../impl/ExtensionComponentAdapter.java | 12 +-- .../extensions/impl/ExtensionsAreaImpl.java | 74 +++++++++---------- .../impl/ExtensionPointImplTest.java | 4 +- 7 files changed, 80 insertions(+), 74 deletions(-) diff --git a/platform/extensions/src/com/intellij/openapi/extensions/EPAvailabilityListenerExtension.java b/platform/extensions/src/com/intellij/openapi/extensions/EPAvailabilityListenerExtension.java index 0f446a487d7d..21a75c9d802f 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/EPAvailabilityListenerExtension.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/EPAvailabilityListenerExtension.java @@ -15,6 +15,8 @@ */ package com.intellij.openapi.extensions; +import org.jetbrains.annotations.NotNull; + /** * @author AKireyev */ @@ -28,24 +30,26 @@ public class EPAvailabilityListenerExtension implements PluginAware { public EPAvailabilityListenerExtension() { } - public EPAvailabilityListenerExtension(String extensionPointName, String listenerClass) { + public EPAvailabilityListenerExtension(@NotNull String extensionPointName, @NotNull String listenerClass) { myExtensionPointName = extensionPointName; myListenerClass = listenerClass; } + @NotNull public String getExtensionPointName() { return myExtensionPointName; } - public void setExtensionPointName(String extensionPointName) { + public void setExtensionPointName(@NotNull String extensionPointName) { myExtensionPointName = extensionPointName; } + @NotNull public String getListenerClass() { return myListenerClass; } - public void setListenerClass(String listenerClass) { + public void setListenerClass(@NotNull String listenerClass) { myListenerClass = listenerClass; } diff --git a/platform/extensions/src/com/intellij/openapi/extensions/Extension.java b/platform/extensions/src/com/intellij/openapi/extensions/Extension.java index fd416a6d224b..0f6a62c85e79 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/Extension.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/Extension.java @@ -15,12 +15,14 @@ */ package com.intellij.openapi.extensions; +import org.jetbrains.annotations.NotNull; + /** * @author kir * * An extension can implement this interface to get notifications when it is added/removed to {@link ExtensionPoint} */ public interface Extension { - void extensionAdded(ExtensionPoint extensionPoint); - void extensionRemoved(ExtensionPoint extensionPoint); + void extensionAdded(@NotNull ExtensionPoint extensionPoint); + void extensionRemoved(@NotNull ExtensionPoint extensionPoint); } diff --git a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionPoint.java b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionPoint.java index ec82f7535462..c019479b50d3 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionPoint.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionPoint.java @@ -23,12 +23,14 @@ import org.jetbrains.annotations.Nullable; * @author AKireyev */ public interface ExtensionPoint { + @NotNull String getName(); AreaInstance getArea(); /** * @deprecated use {@link #getClassName()} instead */ + @NotNull String getBeanClassName(); void registerExtension(@NotNull T extension); @@ -52,8 +54,10 @@ public interface ExtensionPoint { Class getExtensionClass(); + @NotNull Kind getKind(); + @NotNull String getClassName(); enum Kind {INTERFACE, BEAN_CLASS} diff --git a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.java b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.java index 3f31a2e8aecf..6dcac22e4401 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.java @@ -18,6 +18,7 @@ package com.intellij.openapi.extensions; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.picocontainer.PicoContainer; import java.util.List; @@ -26,41 +27,44 @@ import java.util.List; * @author AKireyev */ public interface ExtensionsArea { - void registerExtensionPoint(@NonNls String extensionPointName, String extensionPointBeanClass); - void registerExtensionPoint(@NonNls String extensionPointName, String extensionPointBeanClass, ExtensionPoint.Kind kind); - void unregisterExtensionPoint(@NonNls String extensionPointName); + void registerExtensionPoint(@NonNls @NotNull String extensionPointName, @NotNull String extensionPointBeanClass); + void registerExtensionPoint(@NonNls @NotNull String extensionPointName, @NotNull String extensionPointBeanClass, @NotNull ExtensionPoint.Kind kind); + void registerExtensionPoint(@NotNull String extensionPointName, @NotNull String extensionPointBeanClass, @NotNull PluginDescriptor descriptor); + void unregisterExtensionPoint(@NonNls @NotNull String extensionPointName); - boolean hasExtensionPoint(@NonNls String extensionPointName); + boolean hasExtensionPoint(@NonNls @NotNull String extensionPointName); @NotNull - ExtensionPoint getExtensionPoint(@NonNls String extensionPointName); - ExtensionPoint getExtensionPoint(ExtensionPointName extensionPointName); + ExtensionPoint getExtensionPoint(@NonNls @NotNull String extensionPointName); + ExtensionPoint getExtensionPoint(@NotNull ExtensionPointName extensionPointName); + + @NotNull ExtensionPoint[] getExtensionPoints(); - void suspendInteractions(); void resumeInteractions(); + void killPendingInteractions(); - void addAvailabilityListener(String epName, ExtensionPointAvailabilityListener listener); + void addAvailabilityListener(@NotNull String extensionPointName, @NotNull ExtensionPointAvailabilityListener listener); + @NotNull AreaPicoContainer getPicoContainer(); + void registerExtensionPoint(@NotNull String pluginName, @NotNull Element extensionPointElement); + void registerExtensionPoint(@NotNull PluginDescriptor pluginDescriptor, @NotNull Element extensionPointElement); + void registerExtension(@NotNull String pluginName, @NotNull Element extensionElement); - void registerExtensionPoint(String pluginName, Element extensionPointElement); - void registerExtensionPoint(PluginDescriptor pluginDescriptor, Element extensionPointElement); - void registerExtension(String pluginName, Element extensionElement); - void registerExtension(PluginDescriptor pluginDescriptor, Element extensionElement); + void registerExtension(@NotNull PluginDescriptor pluginDescriptor, @NotNull Element extensionElement); - void unregisterExtensionPoint(String pluginName, Element extensionPointElement); + void unregisterExtensionPoint(@NotNull String pluginName, @NotNull Element extensionPointElement); - void unregisterExtension(String pluginName, Element extensionElement); + void unregisterExtension(@NotNull String pluginName, @NotNull Element extensionElement); - PicoContainer getPluginContainer(String pluginName); + @NotNull + PicoContainer getPluginContainer(@NotNull String pluginName); String getAreaClass(); - void registerExtensionPoint(String extensionPointName, String extensionPointBeanClass, PluginDescriptor descriptor); - - void registerAreaExtensionsAndPoints(final PluginDescriptor pluginDescriptor, - final List extensionsPoints, - final List extensions); + void registerAreaExtensionsAndPoints(@NotNull PluginDescriptor pluginDescriptor, + @Nullable List extensionsPoints, + @Nullable List extensions); } diff --git a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java index e4a6bd3616fa..d081d55d1810 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionComponentAdapter.java @@ -19,6 +19,7 @@ import com.intellij.openapi.extensions.*; import com.intellij.util.pico.AssignableToComponentAdapter; import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Element; +import org.jetbrains.annotations.NotNull; import org.picocontainer.*; import org.picocontainer.defaults.AssignabilityRegistrationException; import org.picocontainer.defaults.CachingComponentAdapter; @@ -40,12 +41,11 @@ public class ExtensionComponentAdapter implements LoadingOrder.Orderable, Assign private ComponentAdapter myDelegate; private Class myImplementationClass; - public ExtensionComponentAdapter( - String implementationClass, - Element extensionElement, - PicoContainer container, - PluginDescriptor pluginDescriptor, - boolean deserializeInstance) { + public ExtensionComponentAdapter(@NotNull String implementationClass, + Element extensionElement, + PicoContainer container, + PluginDescriptor pluginDescriptor, + boolean deserializeInstance) { myImplementationClassName = implementationClass; myExtensionElement = extensionElement; myContainer = container; diff --git a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java index 1354c41f38ac..ee8f85f1a901 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java @@ -25,11 +25,11 @@ import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import org.picocontainer.MutablePicoContainer; import org.picocontainer.PicoContainer; import org.picocontainer.defaults.ConstructorInjectionComponentAdapter; -import org.picocontainer.defaults.DefaultPicoContainer; import java.io.IOException; import java.io.StringWriter; @@ -59,7 +59,6 @@ public class ExtensionsAreaImpl implements ExtensionsArea { private final AreaInstance myAreaInstance; private final String myAreaClass; private final Map myExtensionElement2extension = new HashMap(); - private final Map myPluginName2picoContainer = new HashMap(); public ExtensionsAreaImpl(String areaClass, AreaInstance areaInstance, PicoContainer parentPicoContainer, @NotNull LogProvider logger) { myCreationTrace = DEBUG_REGISTRATION ? new Throwable("Area creation trace") : null; @@ -81,6 +80,7 @@ public class ExtensionsAreaImpl implements ExtensionsArea { } } + @NotNull @Override public AreaPicoContainer getPicoContainer() { return myPicoContainer; @@ -96,12 +96,12 @@ public class ExtensionsAreaImpl implements ExtensionsArea { } @Override - public void registerExtensionPoint(String pluginName, Element extensionPointElement) { + public void registerExtensionPoint(@NotNull String pluginName, @NotNull Element extensionPointElement) { registerExtensionPoint(new DefaultPluginDescriptor(PluginId.getId(pluginName)), extensionPointElement); } @Override - public void registerExtensionPoint(PluginDescriptor pluginDescriptor, Element extensionPointElement) { + public void registerExtensionPoint(@NotNull PluginDescriptor pluginDescriptor, @NotNull Element extensionPointElement) { assert pluginDescriptor.getPluginId() != null; final String pluginId = pluginDescriptor.getPluginId().getIdString(); String epName = extensionPointElement.getAttributeValue("qualifiedName"); @@ -136,12 +136,12 @@ public class ExtensionsAreaImpl implements ExtensionsArea { } @Override - public void registerExtension(final String pluginName, final Element extensionElement) { + public void registerExtension(@NotNull final String pluginName, @NotNull final Element extensionElement) { registerExtension(new DefaultPluginDescriptor(PluginId.getId(pluginName)), extensionElement); } @Override - public void registerExtension(final PluginDescriptor pluginDescriptor, final Element extensionElement) { + public void registerExtension(@NotNull final PluginDescriptor pluginDescriptor, @NotNull final Element extensionElement) { final PluginId pluginId = pluginDescriptor.getPluginId(); String epName = extractEPName(extensionElement); @@ -194,8 +194,9 @@ public class ExtensionsAreaImpl implements ExtensionsArea { return epName; } + @NotNull @Override - public PicoContainer getPluginContainer(String pluginName) { + public PicoContainer getPluginContainer(@NotNull String pluginName) { return internalGetPluginContainer(); } @@ -203,22 +204,14 @@ public class ExtensionsAreaImpl implements ExtensionsArea { return myPicoContainer; } - private void disposePluginContainer(String pluginName) { - DefaultPicoContainer pluginContainer = myPluginName2picoContainer.remove(pluginName); - if (pluginContainer != null) { - myPicoContainer.removeChildContainer(pluginContainer); - } - } - @Override - public void unregisterExtensionPoint(String pluginName, Element extensionPointElement) { - assert pluginName != null; + public void unregisterExtensionPoint(@NotNull String pluginName, @NotNull Element extensionPointElement) { String epName = pluginName + '.' + extensionPointElement.getAttributeValue("name"); unregisterExtensionPoint(epName); } @Override - public void unregisterExtension(String pluginName, Element extensionElement) { + public void unregisterExtension(@NotNull String pluginName, @NotNull Element extensionElement) { String epName = extractEPName(extensionElement); if (!myExtensionElement2extension.containsKey(extensionElement)) { XMLOutputter xmlOutputter = new XMLOutputter(); @@ -239,9 +232,6 @@ public class ExtensionsAreaImpl implements ExtensionsArea { if (getExtensionPoint(epName).unregisterComponentAdapter(adapter)) { MutablePicoContainer pluginContainer = internalGetPluginContainer(); pluginContainer.unregisterComponent(adapter.getComponentKey()); - if (pluginContainer.getComponentAdapters().isEmpty()) { - disposePluginContainer(pluginName); - } } } @@ -297,32 +287,32 @@ public class ExtensionsAreaImpl implements ExtensionsArea { } @Override - public void addAvailabilityListener(String epName, ExtensionPointAvailabilityListener listener) { - myAvailabilityListeners.putValue(epName, listener); - if (hasExtensionPoint(epName)) { - notifyAvailableListener(listener, myExtensionPoints.get(epName)); + public void addAvailabilityListener(@NotNull String extensionPointName, @NotNull ExtensionPointAvailabilityListener listener) { + myAvailabilityListeners.putValue(extensionPointName, listener); + if (hasExtensionPoint(extensionPointName)) { + notifyAvailableListener(listener, myExtensionPoints.get(extensionPointName)); } } @Override - public void registerExtensionPoint(final String extensionPointName, String extensionPointBeanClass) { + public void registerExtensionPoint(@NotNull final String extensionPointName, @NotNull String extensionPointBeanClass) { registerExtensionPoint(extensionPointName, extensionPointBeanClass, ExtensionPoint.Kind.INTERFACE); } @Override - public void registerExtensionPoint(@NonNls String extensionPointName, String extensionPointBeanClass, ExtensionPoint.Kind kind) { + public void registerExtensionPoint(@NotNull @NonNls String extensionPointName, @NotNull String extensionPointBeanClass, @NotNull ExtensionPoint.Kind kind) { registerExtensionPoint(extensionPointName, extensionPointBeanClass, new UndefinedPluginDescriptor(), kind); } @Override - public void registerExtensionPoint(final String extensionPointName, String extensionPointBeanClass, PluginDescriptor descriptor) { + public void registerExtensionPoint(@NotNull final String extensionPointName, @NotNull String extensionPointBeanClass, @NotNull PluginDescriptor descriptor) { registerExtensionPoint(extensionPointName, extensionPointBeanClass, descriptor, ExtensionPoint.Kind.INTERFACE); } - private void registerExtensionPoint(final String extensionPointName, - String extensionPointBeanClass, - PluginDescriptor descriptor, - ExtensionPoint.Kind kind) { + private void registerExtensionPoint(@NotNull String extensionPointName, + @NotNull String extensionPointBeanClass, + @NotNull PluginDescriptor descriptor, + @NotNull ExtensionPoint.Kind kind) { if (hasExtensionPoint(extensionPointName)) { if (DEBUG_REGISTRATION) { final ExtensionPointImpl oldEP = getExtensionPoint(extensionPointName); @@ -336,8 +326,8 @@ public class ExtensionsAreaImpl implements ExtensionsArea { registerExtensionPoint(new ExtensionPointImpl(extensionPointName, extensionPointBeanClass, kind, this, myAreaInstance, myLogger, descriptor)); } - public void registerExtensionPoint(final ExtensionPointImpl extensionPoint) { - final String name = extensionPoint.getName(); + public void registerExtensionPoint(@NotNull ExtensionPointImpl extensionPoint) { + String name = extensionPoint.getName(); myExtensionPoints.put(name, extensionPoint); notifyEPRegistered(extensionPoint); if (DEBUG_REGISTRATION) { @@ -346,9 +336,9 @@ public class ExtensionsAreaImpl implements ExtensionsArea { } @Override - public void registerAreaExtensionsAndPoints(final PluginDescriptor pluginDescriptor, - final List extensionsPoints, - final List extensions) { + public void registerAreaExtensionsAndPoints(@NotNull final PluginDescriptor pluginDescriptor, + @Nullable List extensionsPoints, + @Nullable List extensions) { final String areaClass = getAreaClass(); if (extensionsPoints != null) { //noinspection ForLoopReplaceableByForEach @@ -406,7 +396,7 @@ public class ExtensionsAreaImpl implements ExtensionsArea { @Override @NotNull - public ExtensionPointImpl getExtensionPoint(String extensionPointName) { + public ExtensionPointImpl getExtensionPoint(@NotNull String extensionPointName) { ExtensionPointImpl extensionPoint = myExtensionPoints.get(extensionPointName); if (extensionPoint == null) { throw new IllegalArgumentException("Missing extension point: " + extensionPointName + " in area " + myAreaInstance); @@ -416,17 +406,18 @@ public class ExtensionsAreaImpl implements ExtensionsArea { @Override @SuppressWarnings({"unchecked"}) - public ExtensionPoint getExtensionPoint(ExtensionPointName extensionPointName) { + public ExtensionPoint getExtensionPoint(@NotNull ExtensionPointName extensionPointName) { return getExtensionPoint(extensionPointName.getName()); } + @NotNull @Override public ExtensionPoint[] getExtensionPoints() { return myExtensionPoints.values().toArray(new ExtensionPoint[myExtensionPoints.size()]); } @Override - public void unregisterExtensionPoint(final String extensionPointName) { + public void unregisterExtensionPoint(@NotNull final String extensionPointName) { ExtensionPoint extensionPoint = myExtensionPoints.get(extensionPointName); if (extensionPoint != null) { extensionPoint.reset(); @@ -453,7 +444,7 @@ public class ExtensionsAreaImpl implements ExtensionsArea { } @Override - public boolean hasExtensionPoint(String extensionPointName) { + public boolean hasExtensionPoint(@NotNull String extensionPointName) { return myExtensionPoints.containsKey(extensionPointName); } @@ -485,8 +476,9 @@ public class ExtensionsAreaImpl implements ExtensionsArea { mySuspendedListenerActions.clear(); } + @NotNull public MutablePicoContainer[] getPluginContainers() { - return myPluginName2picoContainer.values().toArray(new MutablePicoContainer[myPluginName2picoContainer.values().size()]); + return new MutablePicoContainer[0]; } public void removeAllComponents(final Set extensionAdapters) { diff --git a/platform/extensions/testSrc/com/intellij/openapi/extensions/impl/ExtensionPointImplTest.java b/platform/extensions/testSrc/com/intellij/openapi/extensions/impl/ExtensionPointImplTest.java index a225479abc90..d39b9a31340d 100644 --- a/platform/extensions/testSrc/com/intellij/openapi/extensions/impl/ExtensionPointImplTest.java +++ b/platform/extensions/testSrc/com/intellij/openapi/extensions/impl/ExtensionPointImplTest.java @@ -56,14 +56,14 @@ public class ExtensionPointImplTest extends TestCase { final boolean[] flags = new boolean[2]; Extension extension = new Extension() { @Override - public void extensionAdded(ExtensionPoint extensionPoint1) { + public void extensionAdded(@NotNull ExtensionPoint extensionPoint1) { assertSame(extensionPoint, extensionPoint1); assertSame(area, extensionPoint1.getArea()); flags[0] = true; } @Override - public void extensionRemoved(ExtensionPoint extensionPoint1) { + public void extensionRemoved(@NotNull ExtensionPoint extensionPoint1) { assertSame(extensionPoint, extensionPoint1); assertSame(area, extensionPoint1.getArea()); flags[1] = true;