From ff085f0e702c0696e3b32d3d106e68c4316e06e7 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 26 Aug 2015 14:59:45 +0300 Subject: [PATCH] indicator mem leak --- .../impl/analysis/HighlightVisitorImpl.java | 2 +- .../impl/analysis/PostHighlightingVisitor.java | 13 +++++-------- .../daemon/impl/HighlightingSession.java | 3 +-- .../daemon/impl/HighlightingSessionImpl.java | 17 ++--------------- 4 files changed, 9 insertions(+), 26 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index af88115801c4..0f44a9171846 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -182,7 +182,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh highlight.run(); progress.checkCanceled(); HighlightingSession highlightingSession = HighlightingSessionImpl.getHighlightingSession(file, progress); - PostHighlightingVisitor highlightingVisitor = new PostHighlightingVisitor(file, document, refCountHolder, highlightingSession); + PostHighlightingVisitor highlightingVisitor = new PostHighlightingVisitor(file, document, refCountHolder); highlightingVisitor.collectHighlights(file, holder, progress); } }); diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java index 3f89ae26ff55..1d1644d7dfd5 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java @@ -73,7 +73,6 @@ class PostHighlightingVisitor { @NotNull private final Project myProject; private final PsiFile myFile; @NotNull private final Document myDocument; - @NotNull private final HighlightingSession myHighlightingSession; private boolean myHasRedundantImports; private int myCurrentEntryIndex; @@ -94,19 +93,19 @@ class PostHighlightingVisitor { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { - if (myProject.isDisposed() || !myFile.isValid()) return; + if (myProject.isDisposed() || !myFile.isValid() || !myFile.isWritable()) return; IntentionAction optimizeImportsFix = QuickFixFactory.getInstance().createOptimizeImportsFix(true); - if (optimizeImportsFix.isAvailable(myProject, null, myFile) && myFile.isWritable()) { + if (optimizeImportsFix.isAvailable(myProject, null, myFile)) { optimizeImportsFix.invoke(myProject, null, myFile); } } }); } }; - Disposer.register(myHighlightingSession, invokeFixLater); + Disposer.register((DaemonProgressIndicator)progress, invokeFixLater); if (progress.isCanceled()) { Disposer.dispose(invokeFixLater); - Disposer.dispose(myHighlightingSession); + Disposer.dispose((DaemonProgressIndicator)progress); progress.checkCanceled(); } } @@ -114,9 +113,7 @@ class PostHighlightingVisitor { PostHighlightingVisitor(@NotNull PsiFile file, @NotNull Document document, - @NotNull RefCountHolder refCountHolder, - @NotNull HighlightingSession highlightingSession) throws ProcessCanceledException { - myHighlightingSession = highlightingSession; + @NotNull RefCountHolder refCountHolder) throws ProcessCanceledException { myProject = file.getProject(); myFile = file; myDocument = document; diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightingSession.java b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightingSession.java index c8e54875e6c9..017595c0e68a 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightingSession.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightingSession.java @@ -15,7 +15,6 @@ */ package com.intellij.codeInsight.daemon.impl; -import com.intellij.openapi.Disposable; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.colors.EditorColorsScheme; @@ -24,7 +23,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; -public interface HighlightingSession extends Disposable { +public interface HighlightingSession { @NotNull Project getProject(); @NotNull PsiFile getPsiFile(); Editor getEditor(); diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightingSessionImpl.java b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightingSessionImpl.java index 94640f84aeab..94d69dab0a5f 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightingSessionImpl.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightingSessionImpl.java @@ -24,7 +24,6 @@ import com.intellij.openapi.editor.ex.RangeHighlighterEx; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Condition; -import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiDocumentManager; @@ -48,7 +47,6 @@ public class HighlightingSessionImpl implements HighlightingSession { @NotNull private final Project myProject; private final Document myDocument; private final Map myRanges2markersCache = new THashMap(); - private volatile boolean myDisposed; private HighlightingSessionImpl(@NotNull PsiFile psiFile, @Nullable Editor editor, @@ -60,10 +58,6 @@ public class HighlightingSessionImpl implements HighlightingSession { myEditorColorsScheme = editorColorsScheme; myProject = psiFile.getProject(); myDocument = PsiDocumentManager.getInstance(myProject).getDocument(psiFile); - Disposer.register(progressIndicator, this); - if (progressIndicator.isCanceled()) { - Disposer.dispose(progressIndicator); //dispose both progress indicator and this session in case we managed to register after indicator dispose to avoid mem leaks - } } private static final Key> HIGHLIGHTING_SESSION = Key.create("HIGHLIGHTING_SESSION"); @@ -159,7 +153,7 @@ public class HighlightingSessionImpl implements HighlightingSession { @NotNull TextRange priorityRange, @NotNull TextRange restrictedRange, int groupId) { - myAddHighlighterInEDTQueue.offer(new Info(info, priorityRange, restrictedRange, groupId)); + myAddHighlighterInEDTQueue.offer(new Info(info, restrictedRange, groupId)); } void queueDisposeHighlighter(@Nullable RangeHighlighterEx highlighter) { @@ -167,20 +161,13 @@ public class HighlightingSessionImpl implements HighlightingSession { myDisposeHighlighterInEDTQueue.offer(highlighter); } - @Override - public void dispose() { - myDisposed = true; - } - private static class Info { @NotNull private final HighlightInfo myInfo; - @NotNull private final TextRange myPriorityRange; @NotNull private final TextRange myRestrictRange; private final int myGroupId; - public Info(@NotNull HighlightInfo info, @NotNull TextRange priorityRange, @NotNull TextRange restrictRange, int groupId) { + private Info(@NotNull HighlightInfo info, @NotNull TextRange restrictRange, int groupId) { myInfo = info; - myPriorityRange = priorityRange; myRestrictRange = restrictRange; myGroupId = groupId; }