From a7df8863f73a21bf98255ff323dceb93f67c5263 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 17 Sep 2015 14:06:10 +0200 Subject: [PATCH] don't try to insert parentheses if live template has been cancelled (EA-61976 - assert: DocumentImpl.insertString); don't store Editor instances in a static map to avoid memory leaks --- .../AnonymousTemplateEditingListener.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/liveTemplates/macro/AnonymousTemplateEditingListener.java b/idea/src/org/jetbrains/kotlin/idea/liveTemplates/macro/AnonymousTemplateEditingListener.java index 7a2ba89c3ca..a474246ce8f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/liveTemplates/macro/AnonymousTemplateEditingListener.java +++ b/idea/src/org/jetbrains/kotlin/idea/liveTemplates/macro/AnonymousTemplateEditingListener.java @@ -22,6 +22,7 @@ import com.intellij.codeInsight.template.impl.TemplateManagerImpl; import com.intellij.codeInsight.template.impl.TemplateState; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Key; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; @@ -36,18 +37,14 @@ import org.jetbrains.kotlin.psi.JetReferenceExpression; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode; -import java.util.HashMap; -import java.util.Map; - class AnonymousTemplateEditingListener extends TemplateEditingAdapter { private JetReferenceExpression classRef; private ClassDescriptor classDescriptor; private final Editor editor; private final PsiFile psiFile; - - private static final Map ourAddedListeners = - new HashMap(); + private static final Key LISTENER_KEY = Key.create("kotlin.AnonymousTemplateEditingListener"); + public AnonymousTemplateEditingListener(PsiFile psiFile, Editor editor) { this.psiFile = psiFile; this.editor = editor; @@ -71,7 +68,10 @@ class AnonymousTemplateEditingListener extends TemplateEditingAdapter { @Override public void templateFinished(Template template, boolean brokenOff) { - ourAddedListeners.remove(editor); + editor.putUserData(LISTENER_KEY, null); + if (brokenOff) { + return; + } if (classDescriptor != null) { if (classDescriptor.getKind() == ClassKind.CLASS) { @@ -94,7 +94,7 @@ class AnonymousTemplateEditingListener extends TemplateEditingAdapter { } static void registerListener(Editor editor, Project project) { - if (ourAddedListeners.containsKey(editor)) { + if (editor.getUserData(LISTENER_KEY) != null) { return; } PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); @@ -102,7 +102,7 @@ class AnonymousTemplateEditingListener extends TemplateEditingAdapter { TemplateState templateState = TemplateManagerImpl.getTemplateState(editor); if (templateState != null) { AnonymousTemplateEditingListener listener = new AnonymousTemplateEditingListener(psiFile, editor); - ourAddedListeners.put(editor, listener); + editor.putUserData(LISTENER_KEY, listener); templateState.addTemplateStateListener(listener); } }