diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableCardPanel.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableCardPanel.java index 88f08a339162..84311b7eb7d6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableCardPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableCardPanel.java @@ -2,6 +2,7 @@ package com.intellij.openapi.options.ex; import com.intellij.openapi.Disposable; +import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.ReadAction; @@ -29,6 +30,8 @@ import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import static com.intellij.openapi.actionSystem.PlatformDataKeys.UI_DISPOSABLE; + public class ConfigurableCardPanel extends CardLayoutPanel { private static final Logger LOG = Logger.getInstance(ConfigurableCardPanel.class); @@ -53,13 +56,13 @@ public class ConfigurableCardPanel extends CardLayoutPanel { - JComponent component = createConfigurableComponent(configurable); - if (configurable instanceof ConfigurableWrapper && component != null) { - addEPChangesListener((ConfigurableWrapper)configurable); - } - return component; - }); + JComponent component = createConfigurableComponent(configurable); + if (component == null) return null; + + if (configurable instanceof ConfigurableWrapper) { + ReadAction.run(() -> addEPChangesListener((ConfigurableWrapper)configurable)); + } + return new Wrapper(configurable, component); } @SuppressWarnings("rawtypes") @@ -150,6 +153,7 @@ public class ConfigurableCardPanel extends CardLayoutPanel !Disposer.isDisposed(disposable)) .forEach(disposable -> { - String name = configurable.getDisplayName(); - String id = ConfigurableVisitor.getId(configurable); - LOG.warn("auto-dispose '" + name + "' id=" + id); + LOG.warn(getString("auto-dispose", configurable)); Disposer.dispose(disposable); if (LOG.isDebugEnabled()) { - StringBuilder sb = new StringBuilder("component ").append(disposable.getClass()); - UIUtil.uiParents((Component)disposable, false).forEach(parent -> { - sb.append("\n in ").append(parent.getClass()); - }); - LOG.warn(sb.toString()); + UIUtil.uiParents((Component)disposable, false) + .forEach(parent -> LOG.debug(" in ", parent.getClass())); } }); } @@ -196,15 +195,17 @@ public class ConfigurableCardPanel extends CardLayoutPanel