diff options
Diffstat (limited to 'platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java')
-rw-r--r-- | platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java b/platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java index 0b92057074ac..c51b950b67a7 100644 --- a/platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java +++ b/platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java @@ -165,9 +165,20 @@ public class DefaultPicoContainer implements MutablePicoContainer, Serializable @Override public ComponentAdapter unregisterComponent(Object componentKey) { ComponentAdapter adapter = componentKeyToAdapterCache.remove(componentKey); - componentAdapters.remove(adapter); - + if (adapter instanceof AssignableToComponentAdapter) { + classNameToAdapter.remove(((AssignableToComponentAdapter)adapter).getAssignableToClassName()); + } + else { + do { + FList<ComponentAdapter> oldList = nonAssignableComponentAdapters.get(); + FList<ComponentAdapter> newList = oldList.without(adapter); + if (nonAssignableComponentAdapters.compareAndSet(oldList, newList)) { + break; + } + } + while (true); + } return adapter; } |