fix JspxTemplatesTest. We can not cache caretOffset since template preprocessor could...
authorSergey Stupin <sergey.stupin@jetbrains.com>
Mon, 10 Aug 2020 21:03:29 +0000 (23:03 +0200)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Mon, 10 Aug 2020 21:04:01 +0000 (21:04 +0000)
GitOrigin-RevId: f2e479d6be9b7f5ad14a7ec4a358cc4ea61c8f49

platform/analysis-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java

index d6f82c702a3263a3b332c3942e33ce24a13ee08c..05df88c86350dec4cf5fd225d7c88960b88ee1a4 100644 (file)
@@ -296,7 +296,7 @@ public final class TemplateState extends TemplateStateBase implements Disposable
 
   void start(@NotNull TemplateImpl template,
              @Nullable PairProcessor<? super String, ? super String> processor,
-             @Nullable Map<String, String> predefinedVarValues, int caretOffset) {
+             @Nullable Map<String, String> predefinedVarValues, int startCaretOffset) {
     LOG.assertTrue(!myStarted, "Already started");
     myStarted = true;
 
@@ -314,10 +314,12 @@ public final class TemplateState extends TemplateStateBase implements Disposable
     setPredefinedVariableValues(predefinedVarValues);
 
     if (getTemplate().isInline()) {
+      int caretOffset = getCurrentCaretOffset(startCaretOffset);
       myTemplateRange = getDocument().createRangeMarker(caretOffset, caretOffset + getTemplate().getTemplateText().length());
     }
     else {
-      preprocessTemplate(file, caretOffset, getTemplate().getTemplateText());
+      preprocessTemplate(file, getCurrentCaretOffset(startCaretOffset), getTemplate().getTemplateText());
+      int caretOffset = getCurrentCaretOffset(startCaretOffset);
       myTemplateRange = getDocument().createRangeMarker(caretOffset, caretOffset);
     }
     myTemplateRange.setGreedyToLeft(true);
@@ -328,6 +330,11 @@ public final class TemplateState extends TemplateStateBase implements Disposable
     processAllExpressions(getTemplate());
   }
 
+  private int getCurrentCaretOffset(int caretOffset) {
+    Editor editor = getEditor();
+    return editor != null ? editor.getCaretModel().getOffset() : caretOffset;
+  }
+
   private void preprocessTemplate(final PsiFile file, int caretOffset, final String textToInsert) {
     for (TemplatePreprocessor preprocessor : TemplatePreprocessor.EP_NAME.getExtensionList()) {
       preprocessor.preprocessTemplate(getEditor(), file, caretOffset, textToInsert, getTemplate().getTemplateText());