adjusted solution to memory leaks in RubyProjectStructureConfigurable according to...
[idea/community.git] / platform / platform-impl / src / com / intellij / openapi / options / TabbedConfigurable.java
index 59cde1bfc0e946c8820de831f5e7a27463c941ff..39be2062378f6c546ff14cf4a7fb49f594d855c9 100644 (file)
@@ -16,9 +16,9 @@
 package com.intellij.openapi.options;
 
 import com.intellij.openapi.Disposable;
+import com.intellij.openapi.util.Disposer;
 import com.intellij.ui.TabbedPaneWrapper;
 import com.intellij.util.ui.JBUI;
-import org.jetbrains.annotations.NotNull;
 
 import javax.swing.*;
 
@@ -30,15 +30,11 @@ import static com.intellij.openapi.options.ex.ConfigurableCardPanel.createConfig
 public abstract class TabbedConfigurable extends CompositeConfigurable<Configurable> implements Configurable.NoScroll,
                                                                                                 Configurable.NoMargin {
   protected TabbedPaneWrapper myTabbedPane;
-  private final Disposable myParentDisposable;
-
-  protected TabbedConfigurable(@NotNull Disposable parentDisposable) {
-    myParentDisposable = parentDisposable;
-  }
+  private final Disposable myDisposable = Disposer.newDisposable();
 
   @Override
   public JComponent createComponent() {
-    myTabbedPane = new TabbedPaneWrapper(myParentDisposable);
+    myTabbedPane = new TabbedPaneWrapper(myDisposable);
     createConfigurableTabs();
     final JComponent component = myTabbedPane.getComponent();
     component.setBorder(JBUI.Borders.emptyTop(5));
@@ -54,11 +50,8 @@ public abstract class TabbedConfigurable extends CompositeConfigurable<Configura
 
   @Override
   public void disposeUIResources() {
-    myTabbedPane = null;
     super.disposeUIResources();
-  }
-
-  public Disposable getParentDisposable() {
-    return myParentDisposable;
+    Disposer.dispose(myDisposable);
+    myTabbedPane = null;
   }
 }