diff --git a/platform/core-api/src/com/intellij/openapi/util/KeyedExtensionCollector.java b/platform/core-api/src/com/intellij/openapi/util/KeyedExtensionCollector.java index f87ad5f35af0..cb211cdd0741 100644 --- a/platform/core-api/src/com/intellij/openapi/util/KeyedExtensionCollector.java +++ b/platform/core-api/src/com/intellij/openapi/util/KeyedExtensionCollector.java @@ -111,6 +111,8 @@ public class KeyedExtensionCollector implements ModificationTracker { cached = buildExtensions(stringKey, key); + if (!myEpListenerAdded.get()) return cached; + synchronized (lock) { List recent = cache.get(stringKey); if (recent != null) { @@ -296,6 +298,7 @@ public class KeyedExtensionCollector implements ModificationTracker { public void areaReplaced(@NotNull ExtensionsArea area) { synchronized (lock) { cache = Java11Shim.INSTANCE.mapOf(); + myEpListenerAdded.set(false); tracker.incModificationCount(); } } diff --git a/platform/extensions/src/com/intellij/openapi/extensions/Extensions.java b/platform/extensions/src/com/intellij/openapi/extensions/Extensions.java index c0fc2f1d2659..f98a7693acd4 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/Extensions.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/Extensions.java @@ -37,6 +37,9 @@ public final class Extensions { public static void setRootArea(@NotNull ExtensionsAreaImpl area, @NotNull Disposable parentDisposable) { ExtensionsAreaImpl oldRootArea = staticRootArea; staticRootArea = area; + if (oldRootArea != null) { + oldRootArea.notifyAreaReplaced(area); + } Disposer.register(parentDisposable, () -> { staticRootArea.notifyAreaReplaced(oldRootArea); staticRootArea = oldRootArea; @@ -51,7 +54,8 @@ public final class Extensions { public static ExtensionsArea getRootArea() { if (rootSupplier != null) { return rootSupplier.get(); - } else { + } + else { return staticRootArea; } }