Live Templates. Reverting substituting Template via TemplatePreprocessor
authorAndrey Vokin <andrey.vokin@jetbrains.com>
Mon, 1 Dec 2014 13:35:10 +0000 (16:35 +0300)
committerAndrey Vokin <andrey.vokin@jetbrains.com>
Mon, 1 Dec 2014 14:35:22 +0000 (17:35 +0300)
platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplatePreprocessor.java
platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java

index 4f049c83ef5dcdba3fbe6b3385421bcce78952ad..0bc04d7dc6c07b8adf9e14f4487c208ee8f86d2e 100644 (file)
@@ -26,5 +26,5 @@ import com.intellij.psi.PsiFile;
 public interface TemplatePreprocessor {
   ExtensionPointName<TemplatePreprocessor> EP_NAME = ExtensionPointName.create("com.intellij.liveTemplatePreprocessor");
 
-  TemplateImpl preprocessTemplate(final Editor editor, final PsiFile file, int caretOffset, final TemplateImpl template);
+  void preprocessTemplate(final Editor editor, final PsiFile file, int caretOffset, final String textToInsert, final String templateText);
 }
index 7832ace7357cb8a9ce3aaa90114130ec23de8573..c6ed313510e19632b2be2d6987329036ddf78450 100644 (file)
@@ -296,8 +296,8 @@ public class TemplateState implements Disposable {
     myTemplate = template;
     myProcessor = processor;
 
-    DocumentReference[] refs = myDocument != null 
-                               ? new DocumentReference[]{DocumentReferenceManager.getInstance().create(myDocument)} 
+    DocumentReference[] refs = myDocument != null
+                               ? new DocumentReference[]{DocumentReferenceManager.getInstance().create(myDocument)}
                                : null;
     UndoManager.getInstance(myProject).undoableActionPerformed(new BasicUndoableAction(refs) {
       @Override
@@ -320,29 +320,25 @@ public class TemplateState implements Disposable {
     myTemplateIndented = false;
     myCurrentVariableNumber = -1;
     mySegments = new TemplateSegments(myEditor);
+    myPrevTemplate = myTemplate;
 
     //myArgument = argument;
     myPredefinedVariableValues = predefinedVarValues;
 
     if (template.isInline()) {
-      myPrevTemplate = myTemplate;
       int caretOffset = myEditor.getCaretModel().getOffset();
       myTemplateRange = myDocument.createRangeMarker(caretOffset, caretOffset + template.getTemplateText().length());
     }
     else {
       PsiFile file = getPsiFile();
-      preprocessTemplate(file, myEditor.getCaretModel().getOffset());
-      myPrevTemplate = myTemplate;
-      LOG.assertTrue(!myTemplate.isInline(),
-                     "current template: " + presentTemplate(myTemplate) + ", previous template: " + presentTemplate(myPrevTemplate));
-
+      preprocessTemplate(file, myEditor.getCaretModel().getOffset(), myTemplate.getTemplateText());
       int caretOffset = myEditor.getCaretModel().getOffset();
       myTemplateRange = myDocument.createRangeMarker(caretOffset, caretOffset);
     }
     myTemplateRange.setGreedyToLeft(true);
     myTemplateRange.setGreedyToRight(true);
 
-    processAllExpressions(myTemplate);
+    processAllExpressions(template);
   }
 
   private void fireTemplateCancelled() {
@@ -353,9 +349,9 @@ public class TemplateState implements Disposable {
     }
   }
 
-  private void preprocessTemplate(final PsiFile file, int caretOffset) {
+  private void preprocessTemplate(final PsiFile file, int caretOffset, final String textToInsert) {
     for (TemplatePreprocessor preprocessor : Extensions.getExtensions(TemplatePreprocessor.EP_NAME)) {
-      myTemplate = preprocessor.preprocessTemplate(myEditor, file, caretOffset, myTemplate);
+      preprocessor.preprocessTemplate(myEditor, file, caretOffset, textToInsert, myTemplate.getTemplateText());
     }
   }
 
@@ -394,7 +390,7 @@ public class TemplateState implements Disposable {
           if (isMultiCaretMode()) {
             finishTemplateEditing(false);
           }
-        } 
+        }
       }
     });
   }
@@ -417,7 +413,7 @@ public class TemplateState implements Disposable {
       public void run() {
         IntArrayList indices = initEmptyVariables();
         mySegments.setSegmentsGreedy(false);
-        LOG.assertTrue(myTemplateRange.isValid(), 
+        LOG.assertTrue(myTemplateRange.isValid(),
                        "template key: " + myTemplate.getKey() + "; " +
                        "template text" + myTemplate.getTemplateText() + "; " +
                        "variable number: " + getCurrentVariableNumber());