From 3e3fc26dceed8a0660f87f56acfebc8e702e2a70 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 13 Jan 2012 18:56:19 +0100 Subject: [PATCH] dispose range markers during templates (IDEA-79909) --- .../codeInsight/lookup/impl/LookupImpl.java | 4 ++++ .../template/impl/TemplateSegments.java | 3 +++ .../template/impl/TemplateState.java | 5 +++- .../inplace/AbstractInplaceIntroducer.java | 4 ++++ .../inplace/InplaceVariableIntroducer.java | 24 +++++++++++++++++-- 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java index 8af97baf7087..08e6b502c4f2 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java @@ -1324,6 +1324,10 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable return; } + if (myLookupStartMarker != null) { + myLookupStartMarker.dispose(); + myLookupStartMarker = null; + } Disposer.dispose(myProcessIcon); Disposer.dispose(myHintAlarm); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateSegments.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateSegments.java index 8325c4c66ff2..031476f39e9a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateSegments.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateSegments.java @@ -45,6 +45,9 @@ public class TemplateSegments { } public void removeAll() { + for (RangeMarker segment : mySegments) { + segment.dispose(); + } mySegments.clear(); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java index 84788564bbf3..0b3b7e6e3366 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java @@ -248,7 +248,10 @@ public class TemplateState implements Disposable { mySegments.removeAll(); mySegments = null; } - myTemplateRange = null; + if (myTemplateRange != null) { + myTemplateRange.dispose(); + myTemplateRange = null; + } myPrevTemplate = myTemplate; myTemplate = null; releaseEditor(); diff --git a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java index 736d6885fef2..085d3e9d7cbc 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java +++ b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java @@ -339,6 +339,7 @@ public abstract class AbstractInplaceIntroducer extends In @Override protected void beforeTemplateStart() { myCaretRangeMarker = myEditor.getDocument() - .createRangeMarker(new TextRange(myEditor.getCaretModel().getOffset(), myEditor.getCaretModel().getOffset())); + .createRangeMarker(new TextRange(myEditor.getCaretModel().getOffset(), myEditor.getCaretModel().getOffset())); } @Override @@ -173,8 +173,28 @@ public abstract class InplaceVariableIntroducer extends In return result; } - protected void releaseResources() { + @Override + protected void moveOffsetAfter(boolean success) { + super.moveOffsetAfter(success); + if (myOccurrenceMarkers != null) { + for (RangeMarker marker : myOccurrenceMarkers) { + marker.dispose(); + } + } + if (myCaretRangeMarker != null) { + myCaretRangeMarker.dispose(); + } + if (myExprMarker != null && !isRestart()) { + myExprMarker.dispose(); + } + } + protected boolean isRestart() { + final Boolean isRestart = myEditor.getUserData(INTRODUCE_RESTART); + return isRestart != null && isRestart; + } + + protected void releaseResources() { } protected void showBalloon() {