From 85546ce0f44c11c376148788f8d41092680b06ea Mon Sep 17 00:00:00 2001 From: irengrig Date: Wed, 24 Feb 2010 10:57:00 +0300 Subject: [PATCH] WI-1153 (Exception when closing one of two opened projects) !!! Editor not released bug fixed --- .../openapi/editor/DisposableEditorPanel.java | 4 +++- .../src/com/intellij/util/ui/EditorAdapter.java | 4 ++++ .../vcs/impl/ProjectLevelVcsManagerImpl.java | 15 +++++++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/editor/DisposableEditorPanel.java b/platform/platform-api/src/com/intellij/openapi/editor/DisposableEditorPanel.java index 407f5fa63f91..cdd745e550f2 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/DisposableEditorPanel.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/DisposableEditorPanel.java @@ -33,6 +33,8 @@ public class DisposableEditorPanel extends JPanel implements Disposable { } public void dispose() { - EditorFactory.getInstance().releaseEditor(myEditor); + if (! myEditor.isDisposed()) { + EditorFactory.getInstance().releaseEditor(myEditor); + } } } diff --git a/platform/platform-api/src/com/intellij/util/ui/EditorAdapter.java b/platform/platform-api/src/com/intellij/util/ui/EditorAdapter.java index 52f6a9d177b9..90df1f16d079 100644 --- a/platform/platform-api/src/com/intellij/util/ui/EditorAdapter.java +++ b/platform/platform-api/src/com/intellij/util/ui/EditorAdapter.java @@ -81,6 +81,10 @@ public class EditorAdapter { LOG.assertTrue(myEditor.isViewer()); } + public Editor getEditor() { + return myEditor; + } + public void appendString(String string, TextAttributes attrs) { synchronized (myLines) { myLines.add(new Line(string, attrs)); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java index 8446ab8ed23b..f3158a3d8bf1 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java @@ -20,7 +20,6 @@ import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.components.StorageScheme; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.DisposableEditorPanel; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.EditorSettings; @@ -64,7 +63,10 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; +import java.awt.*; import java.util.*; +import java.util.List; public class ProjectLevelVcsManagerImpl extends ProjectLevelVcsManagerEx implements ProjectComponent, JDOMExternalizable { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.impl.ProjectLevelVcsManagerImpl"); @@ -244,6 +246,12 @@ public class ProjectLevelVcsManagerImpl extends ProjectLevelVcsManagerEx impleme synchronized (myDisposeLock) { if (myIsDisposed) return; + if (myEditorAdapter != null) { + final Editor editor = myEditorAdapter.getEditor(); + if (! editor.isDisposed()) { + EditorFactory.getInstance().releaseEditor(editor); + } + } myMappings.disposeMe(); try { myContentManager = null; @@ -319,7 +327,10 @@ public void addMessageToConsoleWindow(final String message, final TextAttributes editorSettings.setFoldingOutlineShown(false); myEditorAdapter = new EditorAdapter(editor, myProject); - content = ContentFactory.SERVICE.getInstance().createContent(new DisposableEditorPanel(editor), displayName, true); + final JPanel panel = new JPanel(new BorderLayout()); + panel.add(editor.getComponent(), BorderLayout.CENTER); + + content = ContentFactory.SERVICE.getInstance().createContent(panel, displayName, true); contentManager.addContent(content); for (Pair pair : myPendingOutput) {