From 7dafdc113b7e4be15ff9b1766e09437065485a6b Mon Sep 17 00:00:00 2001 From: "Irina.Chernushina" Date: Tue, 7 Nov 2017 13:05:24 +0100 Subject: [PATCH] emmet preview: correct disposable to parent editor disposable IDEA-CR-26471 --- .../template/emmet/EmmetPreviewHint.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java index 02a394079309..a8228b8c3982 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java @@ -28,6 +28,7 @@ import com.intellij.openapi.editor.event.EditorFactoryEvent; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.ex.EditorMarkupModel; import com.intellij.openapi.editor.ex.MarkupModelEx; +import com.intellij.openapi.editor.impl.EditorImpl; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.ui.popup.Balloon; import com.intellij.openapi.util.Disposer; @@ -40,7 +41,6 @@ import com.intellij.ui.LightweightHint; import com.intellij.ui.components.JBPanel; import com.intellij.util.Alarm; import com.intellij.util.DocumentUtil; -import com.intellij.util.ObjectUtils; import com.intellij.util.Producer; import com.intellij.util.ui.JBUI; import org.jetbrains.annotations.NotNull; @@ -62,8 +62,7 @@ public class EmmetPreviewHint extends LightweightHint implements Disposable { myParentEditor = parentEditor; myEditor = editor; - final Disposable parentDisposable = ObjectUtils.coalesce(ObjectUtils.tryCast(parentEditor, Disposable.class), parentEditor.getProject()); - Disposer.register(parentDisposable, this); + registerForDispose(parentEditor); final Editor topLevelEditor = InjectedLanguageUtil.getTopLevelEditor(myParentEditor); EditorFactory.getInstance().addEditorFactoryListener(new EditorFactoryAdapter() { @@ -87,6 +86,18 @@ public class EmmetPreviewHint extends LightweightHint implements Disposable { }, this); } + private void registerForDispose(@NotNull Editor editor) { + final Disposable parentDisposable; + if (editor instanceof EditorImpl) { + parentDisposable = ((EditorImpl)editor).getDisposable(); + } else { + parentDisposable = editor.getProject(); + } + if (parentDisposable != null) { + Disposer.register(parentDisposable, this); + } + } + public void showHint() { myParentEditor.putUserData(KEY, this);