IDEA-101768 Avoid memory leak in 'editor tabs: none' mode

This commit is contained in:
Denis.Zhdanov
2013-02-25 12:54:09 +04:00
parent 490f646062
commit 3a8c007ddc
3 changed files with 23 additions and 4 deletions
@@ -405,6 +405,11 @@ public abstract class EditorComposite implements Disposable {
}
public void dispose() {
for (FileEditor editor : myEditors) {
if (!Disposer.isDisposed(editor)) {
Disposer.dispose(editor);
}
}
}
private static class TopBottomPanel extends JPanel {
@@ -719,6 +719,12 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
providers = newSelectedComposite.getProviders();
}
else {
if (UISettings.getInstance().EDITOR_TAB_PLACEMENT == UISettings.TABS_NONE) {
for (EditorWithProviderComposite composite : window.getEditors()) {
Disposer.dispose(composite);
}
}
// File is not opened yet. In this case we have to create editors
// and select the created EditorComposite.
final FileEditorProviderManager editorProviderManager = FileEditorProviderManager.getInstance();
@@ -23,7 +23,10 @@ import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.event.*;
import com.intellij.openapi.editor.event.DocumentAdapter;
import com.intellij.openapi.editor.event.DocumentEvent;
import com.intellij.openapi.editor.event.EditorMouseEvent;
import com.intellij.openapi.editor.event.EditorMouseEventArea;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.ex.EditorMarkupModel;
import com.intellij.openapi.editor.highlighter.EditorHighlighter;
@@ -59,7 +62,7 @@ import java.beans.PropertyChangeListener;
* @author Anton Katilin
* @author Vladimir Kondratyev
*/
class TextEditorComponent extends JBLoadingPanel implements DataProvider{
class TextEditorComponent extends JBLoadingPanel implements DataProvider {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.fileEditor.impl.text.TextEditorComponent");
private final Project myProject;
@@ -160,14 +163,19 @@ class TextEditorComponent extends JBLoadingPanel implements DataProvider{
Editor getEditor(){
return myEditor;
}
/**
* @return created editor. This editor should be released by {@link #disposeEditor(Editor) }
* method.
*/
@NotNull
private Editor createEditor(){
Editor editor = EditorFactory.getInstance().createEditor(myDocument, myProject);
EditorFactory editorFactory = EditorFactory.getInstance();
Editor[] editors = editorFactory.getEditors(myDocument);
if (editors.length == 1) {
return editors[0];
}
final Editor editor = editorFactory.createEditor(myDocument, myProject);
((EditorMarkupModel) editor.getMarkupModel()).setErrorStripeVisible(true);
EditorHighlighter highlighter = EditorHighlighterFactory.getInstance().createEditorHighlighter(myFile, EditorColorsManager.getInstance().getGlobalScheme(), myProject);
((EditorEx) editor).setHighlighter(highlighter);