From 5a369fa7377b920f23045dab0e32da29d59871ae Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Thu, 13 Oct 2016 20:21:20 +0300 Subject: [PATCH] if selected text is in the injection, use host editor range when comparing with host editor template ranges --- .../rename/inplace/VariableInplaceRenamer.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java index d0c686fcede9..3cd1af45f6b3 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java @@ -17,8 +17,10 @@ package com.intellij.refactoring.rename.inplace; import com.intellij.codeInsight.template.impl.TemplateManagerImpl; import com.intellij.codeInsight.template.impl.TemplateState; +import com.intellij.injected.editor.EditorWindow; import com.intellij.lang.Language; import com.intellij.lang.LanguageExtension; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.CommandProcessor; @@ -159,13 +161,22 @@ public class VariableInplaceRenamer extends InplaceRefactoring { @Override protected void restoreSelection() { if (mySelectedRange != null) { - TemplateState state = TemplateManagerImpl.getTemplateState(InjectedLanguageUtil.getTopLevelEditor(myEditor)); + Editor editor = InjectedLanguageUtil.getTopLevelEditor(myEditor); + TextRange selectedRange; + if (myEditor instanceof EditorWindow) { + PsiFile injected = ((EditorWindow)myEditor).getInjectedFile(); + selectedRange = InjectedLanguageManager.getInstance(editor.getProject()).injectedToHost(injected, mySelectedRange); + } else { + selectedRange = mySelectedRange; + } + TemplateState state = TemplateManagerImpl.getTemplateState(editor); + if (state != null) { for (int i = 0; i < state.getSegmentsCount(); i++) { final TextRange segmentRange = state.getSegmentRange(i); - TextRange intersection = segmentRange.intersection(mySelectedRange); + TextRange intersection = segmentRange.intersection(selectedRange); if (intersection != null) { - myEditor.getSelectionModel().setSelection(intersection.getStartOffset(), intersection.getEndOffset()); + editor.getSelectionModel().setSelection(intersection.getStartOffset(), intersection.getEndOffset()); return; } }