mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-131188 IDEA becomes very slow to respond - fixed VirtualMachine leaks
This commit is contained in:
+9
-1
@@ -18,10 +18,12 @@ package com.intellij.xdebugger.impl.evaluate.quick.common;
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.concurrency.ResultConsumer;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
import com.intellij.xdebugger.XDebuggerBundle;
|
||||
@@ -32,7 +34,7 @@ import javax.swing.tree.TreePath;
|
||||
import java.awt.*;
|
||||
import java.awt.event.InputEvent;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -177,4 +179,10 @@ abstract class DebuggerTreeWithHistoryContainer<D> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected static void registerTreeDisposable(Disposable disposable, Tree tree) {
|
||||
if (tree instanceof Disposable) {
|
||||
Disposer.register(disposable, (Disposable)tree);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
-2
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.xdebugger.impl.evaluate.quick.common;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
@@ -28,14 +29,19 @@ import java.awt.*;
|
||||
*/
|
||||
public class DebuggerTreeWithHistoryPanel<D> extends DebuggerTreeWithHistoryContainer<D> {
|
||||
private final JPanel myMainPanel;
|
||||
private final Disposable myDisposable;
|
||||
|
||||
public DebuggerTreeWithHistoryPanel(@NotNull D initialItem, @NotNull DebuggerTreeCreator<D> creator, @NotNull Project project) {
|
||||
public DebuggerTreeWithHistoryPanel(@NotNull D initialItem, @NotNull DebuggerTreeCreator<D> creator, @NotNull Project project, Disposable disposable) {
|
||||
super(initialItem, creator, project);
|
||||
myMainPanel = createMainPanel(myTreeCreator.createTree(initialItem));
|
||||
myDisposable = disposable;
|
||||
Tree tree = myTreeCreator.createTree(initialItem);
|
||||
registerTreeDisposable(myDisposable, tree);
|
||||
myMainPanel = createMainPanel(tree);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateContainer(Tree tree, String title) {
|
||||
registerTreeDisposable(myDisposable, tree);
|
||||
Component component = ((BorderLayout)myMainPanel.getLayout()).getLayoutComponent(BorderLayout.CENTER);
|
||||
myMainPanel.remove(component);
|
||||
myMainPanel.add(BorderLayout.CENTER, ScrollPaneFactory.createScrollPane(tree));
|
||||
|
||||
+1
-5
@@ -15,13 +15,11 @@
|
||||
*/
|
||||
package com.intellij.xdebugger.impl.evaluate.quick.common;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.popup.JBPopup;
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.ui.ScreenUtil;
|
||||
import com.intellij.ui.awt.RelativePoint;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
@@ -93,9 +91,7 @@ class DebuggerTreeWithHistoryPopup<D> extends DebuggerTreeWithHistoryContainer<D
|
||||
})
|
||||
.createPopup();
|
||||
|
||||
if (tree instanceof Disposable) {
|
||||
Disposer.register(myPopup, (Disposable)tree);
|
||||
}
|
||||
registerTreeDisposable(myPopup, tree);
|
||||
|
||||
//Editor may be disposed before later invokator process this action
|
||||
if (myEditor.getComponent().getRootPane() == null) {
|
||||
|
||||
@@ -50,7 +50,7 @@ public class XInspectDialog extends DialogWrapper {
|
||||
|
||||
Pair<XValue, String> initialItem = Pair.create(value, name);
|
||||
XDebuggerTreeCreator creator = new XDebuggerTreeCreator(project, editorsProvider, sourcePosition, markers);
|
||||
myDebuggerTreePanel = new DebuggerTreeWithHistoryPanel<Pair<XValue, String>>(initialItem, creator, project);
|
||||
myDebuggerTreePanel = new DebuggerTreeWithHistoryPanel<Pair<XValue, String>>(initialItem, creator, project, myDisposable);
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user