dispose range markers during templates (IDEA-79909)

This commit is contained in:
anna
2012-01-13 19:59:14 +01:00
parent afe0fcd517
commit 3e3fc26dce
5 changed files with 37 additions and 3 deletions
@@ -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);
@@ -45,6 +45,9 @@ public class TemplateSegments {
}
public void removeAll() {
for (RangeMarker segment : mySegments) {
segment.dispose();
}
mySegments.clear();
}
@@ -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();
@@ -339,6 +339,7 @@ public abstract class AbstractInplaceIntroducer<V extends PsiNameIdentifierOwner
@Override
protected void releaseResources() {
super.releaseResources();
if (myPreview == null) return;
EditorFactory.getInstance().releaseEditor(myPreview);
@@ -503,6 +504,9 @@ public abstract class AbstractInplaceIntroducer<V extends PsiNameIdentifierOwner
}
}
super.moveOffsetAfter(success);
if (myLocalMarker != null && !isRestart()) {
myLocalMarker.dispose();
}
if (success) {
performPostIntroduceTasks();
}
@@ -150,7 +150,7 @@ public abstract class InplaceVariableIntroducer<E extends PsiElement> 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<E extends PsiElement> 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() {