From 3eb2b73df20529849f460913b3fc1fca7bbae40a Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 25 Jul 2017 21:59:49 +0200 Subject: [PATCH] disable "remove extra closing tag" intention when it would do nothing --- .../RemoveExtraClosingTagIntentionAction.java | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/RemoveExtraClosingTagIntentionAction.java b/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/RemoveExtraClosingTagIntentionAction.java index 757d090038e9..9f0cbb917b1c 100644 --- a/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/RemoveExtraClosingTagIntentionAction.java +++ b/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/RemoveExtraClosingTagIntentionAction.java @@ -34,6 +34,8 @@ import com.intellij.psi.xml.XmlToken; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; +import java.util.Objects; + /** * @author spleaner */ @@ -53,18 +55,14 @@ public class RemoveExtraClosingTagIntentionAction implements LocalQuickFix, Inte @Override public boolean isAvailable(@NotNull final Project project, final Editor editor, final PsiFile file) { - return true; + PsiElement psiElement = file.findElementAt(editor.getCaretModel().getOffset()); + return psiElement instanceof XmlToken && + (psiElement.getParent() instanceof XmlTag || psiElement.getParent() instanceof PsiErrorElement); } @Override public void invoke(@NotNull final Project project, final Editor editor, final PsiFile file) throws IncorrectOperationException { - final int offset = editor.getCaretModel().getOffset(); - final PsiElement psiElement = file.findElementAt(offset); - if (psiElement == null || !psiElement.isValid() || !(psiElement instanceof XmlToken)) { - return; - } - - doFix(psiElement); + doFix(Objects.requireNonNull(file.findElementAt(editor.getCaretModel().getOffset())).getParent()); } @Override @@ -72,11 +70,7 @@ public class RemoveExtraClosingTagIntentionAction implements LocalQuickFix, Inte return true; } - private static void doFix(@NotNull final PsiElement element) throws IncorrectOperationException { - final XmlToken endNameToken = (XmlToken)element; - final PsiElement tagElement = endNameToken.getParent(); - if (!(tagElement instanceof XmlTag) && !(tagElement instanceof PsiErrorElement)) return; - + private static void doFix(@NotNull PsiElement tagElement) throws IncorrectOperationException { if (tagElement instanceof PsiErrorElement) { tagElement.delete(); } @@ -85,7 +79,7 @@ public class RemoveExtraClosingTagIntentionAction implements LocalQuickFix, Inte if (astNode != null) { final ASTNode endTagStart = XmlChildRole.CLOSING_TAG_START_FINDER.findChild(astNode); if (endTagStart != null) { - final Document document = PsiDocumentManager.getInstance(element.getProject()).getDocument(tagElement.getContainingFile()); + final Document document = PsiDocumentManager.getInstance(tagElement.getProject()).getDocument(tagElement.getContainingFile()); if (document != null) { document.deleteString(endTagStart.getStartOffset(), tagElement.getLastChild().getTextRange().getEndOffset()); }