From 4d10ddc8cb3b2a21d96b07da0fef9d835e85e74c Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 17 Feb 2012 13:39:01 +0100 Subject: [PATCH] mem leak: renderer keeps file --- .../codeInsight/daemon/impl/TrafficLightRenderer.java | 3 ++- .../src/com/intellij/openapi/editor/impl/EditorImpl.java | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java index dd89cd16c6e2..cfefd8bf93b6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java @@ -29,6 +29,7 @@ import com.intellij.openapi.editor.ex.EditorMarkupModel; import com.intellij.openapi.editor.ex.MarkupModelEx; import com.intellij.openapi.editor.ex.RangeHighlighterEx; import com.intellij.openapi.editor.impl.DocumentMarkupModel; +import com.intellij.openapi.editor.impl.EditorImpl; import com.intellij.openapi.editor.impl.EditorMarkupModelImpl; import com.intellij.openapi.editor.impl.event.MarkupModelListener; import com.intellij.openapi.editor.markup.ErrorStripeRenderer; @@ -123,7 +124,7 @@ public class TrafficLightRenderer implements ErrorStripeRenderer, Disposable { } else { renderer = new TrafficLightRenderer(project, document, file); - Disposer.register(project, (Disposable)renderer); + Disposer.register(((EditorImpl)editorMarkupModel.getEditor()).getDisposable(), (Disposable)renderer); editorMarkupModel.setErrorStripeRenderer(renderer); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 90af164413ba..a4763ae3a7c3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -25,6 +25,7 @@ import com.intellij.concurrency.JobScheduler; import com.intellij.diagnostic.LogMessageEx; import com.intellij.ide.*; import com.intellij.ide.dnd.DnDManager; +import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.IdeActions; @@ -283,6 +284,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi private boolean myPaintSelection; private final EditorSizeAdjustmentStrategy mySizeAdjustmentStrategy = new EditorSizeAdjustmentStrategy(); + private final Disposable myDisposable = Disposer.newDisposable(); static { ourCaretBlinkingCommand = new RepaintCursorCommand(); @@ -683,6 +685,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi if (myConnection != null) { myConnection.disconnect(); } + Disposer.dispose(myDisposable); } private void clearCaretThread() { @@ -1539,6 +1542,10 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi myScrollToCaret = scrollToCaret; } + public Disposable getDisposable() { + return myDisposable; + } + private static int countLineFeeds(CharSequence c) { return StringUtil.countNewLines(c); }