From c90e60b0bda1b4fe1cb66f8796d3091c410a4be1 Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Thu, 14 Jun 2018 14:39:37 -0700 Subject: [PATCH] add all closing tag variants (WEB-5082) --- .../TagNameReferenceCompletionProvider.java | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/xml/impl/src/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java b/xml/impl/src/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java index e8ec1c0b6a47..7220a0b90567 100644 --- a/xml/impl/src/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java +++ b/xml/impl/src/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java @@ -21,6 +21,7 @@ import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.impl.source.xml.SchemaPrefixReference; import com.intellij.psi.impl.source.xml.TagNameReference; +import com.intellij.psi.xml.XmlChildRole; import com.intellij.psi.xml.XmlTag; import com.intellij.util.Consumer; import com.intellij.util.ProcessingContext; @@ -53,7 +54,7 @@ public class TagNameReferenceCompletionProvider extends CompletionProvider')), - XmlClosingTagInsertHandler.INSTANCE); + public static List createClosingTagLookupElements(XmlTag tag, boolean includePrefix, ASTNode nameElement) { + List result = new ArrayList<>(); + while (tag != null) { + LookupElementBuilder + builder = LookupElementBuilder.create(includePrefix || !nameElement.getText().contains(":") ? tag.getName() : tag.getLocalName()); + result.add(LookupElementDecorator.withInsertHandler( + TailTypeDecorator.withTail(AutoCompletionPolicy.GIVE_CHANCE_TO_OVERWRITE.applyPolicy(builder), + TailType.createSimpleTailType('>')), + XmlClosingTagInsertHandler.INSTANCE)); + if (includePrefix) break; + tag = tag.getParentTag(); + if (tag != null && + (XmlChildRole.CLOSING_TAG_NAME_FINDER.findChild(tag.getNode()) != null || + XmlChildRole.START_TAG_START_FINDER.findChild(tag.getNode()) == null)) { + break; + } + } + return result; } }