mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-238782 PsiViewerDialog: fix memory leaks and cleanup code
GitOrigin-RevId: 30ceeaaeec6fb59f6a8d634af00b06d237e7bc1a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d0e30d46df
commit
208b694de8
@@ -8,7 +8,6 @@ import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.LanguageUtil;
|
||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.actionSystem.DataProvider;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -84,7 +83,7 @@ import static com.intellij.openapi.wm.IdeFocusManager.getGlobalInstance;
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disposable {
|
||||
public class PsiViewerDialog extends DialogWrapper implements DataProvider {
|
||||
private static final String REFS_CACHE = "References Resolve Cache";
|
||||
public static final Color BOX_COLOR = new JBColor(new Color(0xFC6C00), new Color(0xDE6C01));
|
||||
public static final Logger LOG = Logger.getInstance(PsiViewerDialog.class);
|
||||
@@ -104,7 +103,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
private JSplitPane myTreeSplit;
|
||||
private Tree myPsiTree;
|
||||
private ViewerTreeBuilder myPsiTreeBuilder;
|
||||
private final JList myRefs;
|
||||
private final JList<String> myRefs;
|
||||
|
||||
private TitledSeparator myTextSeparator;
|
||||
private TitledSeparator myPsiTreeSeparator;
|
||||
@@ -124,7 +123,6 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
private int myLastParsedTextHashCode = 17;
|
||||
private int myNewDocumentHashCode = 11;
|
||||
|
||||
|
||||
private final boolean myExternalDocument;
|
||||
|
||||
@NotNull
|
||||
@@ -155,7 +153,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
myProject = project;
|
||||
myExternalDocument = selectedEditor != null;
|
||||
myTabs = createTabPanel(project);
|
||||
myRefs = new JBList(new DefaultListModel());
|
||||
myRefs = new JBList<>(new DefaultListModel<>());
|
||||
ViewerPsiBasedTree.PsiTreeUpdater psiTreeUpdater = new ViewerPsiBasedTree.PsiTreeUpdater() {
|
||||
|
||||
private final TextAttributes myAttributes;
|
||||
@@ -188,6 +186,8 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
};
|
||||
myStubTree = new StubViewerPsiBasedTree(project, psiTreeUpdater);
|
||||
myBlockTree = new BlockViewerPsiBasedTree(project, psiTreeUpdater);
|
||||
Disposer.register(getDisposable(), myStubTree);
|
||||
Disposer.register(getDisposable(), myBlockTree);
|
||||
|
||||
setOKButtonText("&Build PSI Tree");
|
||||
setCancelButtonText("&Close");
|
||||
@@ -225,7 +225,6 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
return tabs;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
initMnemonics();
|
||||
@@ -310,16 +309,20 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
});
|
||||
|
||||
myEditor.getSettings().setFoldingOutlineShown(false);
|
||||
myEditor.getDocument().addDocumentListener(myEditorListener);
|
||||
myEditor.getDocument().addDocumentListener(myEditorListener, getDisposable());
|
||||
myEditor.getSelectionModel().addSelectionListener(myEditorListener);
|
||||
myEditor.getCaretModel().addCaretListener(myEditorListener);
|
||||
|
||||
FocusTraversalPolicy oldPolicy = getPeer().getWindow().getFocusTraversalPolicy();
|
||||
getPeer().getWindow().setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
|
||||
@Override
|
||||
public Component getInitialComponent(@NotNull Window window) {
|
||||
return myEditor.getComponent();
|
||||
}
|
||||
});
|
||||
Disposer.register(getDisposable(), () -> {
|
||||
getPeer().getWindow().setFocusTraversalPolicy(oldPolicy);
|
||||
});
|
||||
VirtualFile file = myExternalDocument ? FileDocumentManager.getInstance().getFile(myEditor.getDocument()) : null;
|
||||
Language curLanguage = LanguageUtil.getLanguageForPsi(myProject, file);
|
||||
|
||||
@@ -716,10 +719,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
}
|
||||
}
|
||||
else if (myRefs.hasFocus()) {
|
||||
final Object value = myRefs.getSelectedValue();
|
||||
if (value instanceof String) {
|
||||
fqn = (String)value;
|
||||
}
|
||||
fqn = myRefs.getSelectedValue();
|
||||
}
|
||||
if (fqn != null) {
|
||||
return getContainingFileForClass(fqn);
|
||||
@@ -783,11 +783,11 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
|
||||
|
||||
public void updateReferences(PsiElement element) {
|
||||
final DefaultListModel model = (DefaultListModel)myRefs.getModel();
|
||||
final DefaultListModel<String> model = (DefaultListModel<String>)myRefs.getModel();
|
||||
model.clear();
|
||||
final Object cache = myRefs.getClientProperty(REFS_CACHE);
|
||||
if (cache instanceof Map) {
|
||||
((Map)cache).clear();
|
||||
((Map<?, ?>)cache).clear();
|
||||
}
|
||||
else {
|
||||
myRefs.putClientProperty(REFS_CACHE, new HashMap());
|
||||
@@ -825,13 +825,9 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
Disposer.dispose(myPsiTreeBuilder);
|
||||
|
||||
if (!myEditor.isDisposed()) {
|
||||
EditorFactory.getInstance().releaseEditor(myEditor);
|
||||
}
|
||||
Disposer.dispose(myBlockTree);
|
||||
Disposer.dispose(myStubTree);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@@ -896,16 +892,11 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
|
||||
|
||||
private class GoToListener implements KeyListener, MouseListener, ListSelectionListener {
|
||||
private RangeHighlighter myListenerHighlighter;
|
||||
private final TextAttributes myAttributes =
|
||||
new TextAttributes(JBColor.RED, null, null, null, Font.PLAIN);
|
||||
|
||||
private void navigate() {
|
||||
final Object value = myRefs.getSelectedValue();
|
||||
if (value instanceof String) {
|
||||
final String fqn = (String)value;
|
||||
final PsiFile file = getContainingFileForClass(fqn);
|
||||
if (file != null) file.navigate(true);
|
||||
}
|
||||
final String fqn = myRefs.getSelectedValue();
|
||||
final PsiFile file = getContainingFileForClass(fqn);
|
||||
if (file != null) file.navigate(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user