IDEA-54346 flex: "add type to declaration" quickfix does not determine correct...
authorMaxim.Mossienko <Maxim.Mossienko@jetbrains.com>
Mon, 26 Apr 2010 10:50:54 +0000 (14:50 +0400)
committerMaxim.Mossienko <Maxim.Mossienko@jetbrains.com>
Mon, 26 Apr 2010 14:51:09 +0000 (18:51 +0400)
platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java
xml/impl/src/com/intellij/lang/xml/XmlLiteralEscaper.java

index c074689f6a1609ba5552bc16a41e9c2e4091d4d7..24e7df4d9cdd923b32b37e4e4fea28fe144c7bc3 100644 (file)
@@ -620,7 +620,8 @@ public class TemplateState implements Disposable {
     if (result == null) return;
 
     PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(myDocument);
-    PsiElement element = psiFile.findElementAt(start);
+    // psiFile does not contain modifications from document at this point so we need to use template start offset for retrieving anchor 
+    PsiElement element = psiFile.findElementAt(myTemplateRange != null ? myTemplateRange.getStartOffset():start);
     if (result.equalsToText(oldValue, element)) return;
 
     String newValue = result.toString();
index 9a33f59a946a293d8ec98785c2ca94260287893c..74df4c229d54d14f07a102ece7364e31fc0abe49 100644 (file)
  */
 package com.intellij.lang.xml;
 
+import com.intellij.lang.ASTNode;
 import com.intellij.lang.LiteralEscaper;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.psi.PsiElement;
+import com.intellij.psi.xml.XmlElementType;
+import com.intellij.psi.xml.XmlToken;
 
 /**
  * @author Gregory.Shrago
  */
 public class XmlLiteralEscaper implements LiteralEscaper {
   public String getEscapedText(PsiElement context, String originalText) {
+    if (context instanceof XmlToken) {
+      context = context.getParent();
+    }
+
+    ASTNode contextNode = context != null ? context.getNode():null;
+    if (contextNode != null && contextNode.getElementType() == XmlElementType.XML_CDATA) {
+      return originalText;
+    }
     return escapeText(originalText);
   }