check language of PsiElement (IDEA-52569)
authorEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>
Mon, 1 Mar 2010 14:23:39 +0000 (17:23 +0300)
committerEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>
Mon, 1 Mar 2010 14:23:39 +0000 (17:23 +0300)
xml/impl/src/com/intellij/codeInsight/template/XmlZenCodingTemplate.java

index 129ae8838e58da15bccc761c976e1a9791254934..7db36391fe1ecff09de282a1f5cc6c539417f681 100644 (file)
@@ -302,31 +302,33 @@ public class XmlZenCodingTemplate implements CustomLiveTemplate {
     if (file.getLanguage() instanceof XMLLanguage) {
       Editor editor = callback.getEditor();
       PsiElement element = file.findElementAt(editor.getCaretModel().getOffset() - 1);
-      int line = editor.getCaretModel().getLogicalPosition().line;
-      int lineStart = editor.getDocument().getLineStartOffset(line);
-      int parentStart;
-      do {
-        parentStart = element != null ? element.getTextRange().getStartOffset() : 0;
-        int startOffset = parentStart > lineStart ? parentStart : lineStart;
-        String key = computeKey(editor, startOffset);
-        List<MyToken> tokens = parse(key, callback);
-        if (tokens != null && check(tokens)) {
-          if (tokens.size() == 2) {
-            MyToken token = tokens.get(0);
-            if (token instanceof MyTemplateToken) {
-              if (key.equals(((MyTemplateToken)token).myKey) && callback.isLiveTemplateApplicable(key)) {
-                // do not activate only live template
-                return null;
+      if (element == null || element.getLanguage() instanceof XMLLanguage) {
+        int line = editor.getCaretModel().getLogicalPosition().line;
+        int lineStart = editor.getDocument().getLineStartOffset(line);
+        int parentStart;
+        do {
+          parentStart = element != null ? element.getTextRange().getStartOffset() : 0;
+          int startOffset = parentStart > lineStart ? parentStart : lineStart;
+          String key = computeKey(editor, startOffset);
+          List<MyToken> tokens = parse(key, callback);
+          if (tokens != null && check(tokens)) {
+            if (tokens.size() == 2) {
+              MyToken token = tokens.get(0);
+              if (token instanceof MyTemplateToken) {
+                if (key.equals(((MyTemplateToken)token).myKey) && callback.isLiveTemplateApplicable(key)) {
+                  // do not activate only live template
+                  return null;
+                }
               }
             }
+            return key;
+          }
+          if (element != null) {
+            element = element.getParent();
           }
-          return key;
-        }
-        if (element != null) {
-          element = element.getParent();
         }
+        while (element != null && parentStart > lineStart);
       }
-      while (element != null && parentStart > lineStart);
     }
     return null;
   }