From 9f77f11db07a1050ee2397fb466e39384f3f8b14 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Tue, 26 Feb 2013 17:56:19 +0400 Subject: [PATCH] WEB-6827 Emmet "Surround with Live Template" creating wrong element --- .../codeInsight/template/emmet/XmlEmmetParser.java | 5 ++++- .../codeInsight/template/emmet/ZenCodingTemplate.java | 10 +++++----- .../template/emmet/generators/ZenCodingGenerator.java | 7 +++++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/XmlEmmetParser.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/XmlEmmetParser.java index 25d7ddd9c673..4b770f103bd1 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/XmlEmmetParser.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/XmlEmmetParser.java @@ -75,10 +75,13 @@ public class XmlEmmetParser extends EmmetParser { public XmlEmmetParser(List tokens, CustomTemplateCallback callback, - ZenCodingGenerator generator) { + ZenCodingGenerator generator, boolean surroundWithTemplate) { super(tokens, callback, generator); PsiElement context = callback.getContext(); XmlTag parentTag = PsiTreeUtil.getParentOfType(context, XmlTag.class); + if (surroundWithTemplate && parentTag != null) { + parentTag = PsiTreeUtil.getParentOfType(parentTag, XmlTag.class); + } if (parentTag != null) { hasTagContext = true; tagLevel.push(parentTag.getName()); diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java index 5d3ab8730412..3e2280e1de13 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java @@ -67,7 +67,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate { @Nullable private static ZenCodingNode parse(@NotNull String text, @NotNull CustomTemplateCallback callback, - @NotNull ZenCodingGenerator generator) { + @NotNull ZenCodingGenerator generator, @Nullable String surroundedText) { List tokens = new EmmetLexer().lex(text); if (tokens == null) { return null; @@ -75,7 +75,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate { if (!validate(tokens, generator)) { return null; } - EmmetParser parser = generator.createParser(tokens, callback, generator); + EmmetParser parser = generator.createParser(tokens, callback, generator, surroundedText != null); ZenCodingNode node = parser.parse(); if (parser.getIndex() != tokens.size() || node instanceof TextNode) { return null; @@ -93,7 +93,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate { } public static boolean checkTemplateKey(@NotNull String key, CustomTemplateCallback callback, @NotNull ZenCodingGenerator generator) { - return parse(key, callback, generator) != null; + return parse(key, callback, generator, null) != null; } public void expand(String key, @NotNull CustomTemplateCallback callback) { @@ -158,7 +158,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate { @NotNull CustomTemplateCallback callback, String surroundedText, @NotNull ZenCodingGenerator defaultGenerator) { - ZenCodingNode node = parse(key, callback, defaultGenerator); + ZenCodingNode node = parse(key, callback, defaultGenerator, surroundedText); assert node != null; if (surroundedText == null) { if (node instanceof TemplateNode) { @@ -298,7 +298,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate { CommandProcessor.getInstance().executeCommand(callback.getProject(), new Runnable() { public void run() { callback.fixInitialState(true); - ZenCodingNode node = parse(abbreviation, callback, defaultGenerator); + ZenCodingNode node = parse(abbreviation, callback, defaultGenerator, selection); assert node != null; PsiElement context = callback.getContext(); ZenCodingGenerator generator = findApplicableGenerator(node, context, true); diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java index f4a53d740bf9..2323619d10fb 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java @@ -159,7 +159,10 @@ public abstract class ZenCodingGenerator { } @NotNull - public EmmetParser createParser(List tokens, CustomTemplateCallback callback, ZenCodingGenerator generator) { - return new XmlEmmetParser(tokens, callback, generator); + public EmmetParser createParser(List tokens, + CustomTemplateCallback callback, + ZenCodingGenerator generator, + boolean surroundWithTemplate) { + return new XmlEmmetParser(tokens, callback, generator, surroundWithTemplate); } }