summaryrefslogtreecommitdiff
path: root/platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java')
-rw-r--r--platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java15
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;
}