mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-194155 "Collapse empty tag" quickfix deletes non-empty inner tags in XML file
This commit is contained in:
@@ -15,9 +15,11 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.daemon.quickFix;
|
||||
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.ide.highlighter.XmlFileType;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase;
|
||||
import com.intellij.xml.util.CheckTagEmptyBodyInspection;
|
||||
import com.intellij.xml.util.CollapseTagIntention;
|
||||
|
||||
/**
|
||||
@@ -39,4 +41,18 @@ public class CollapseTagTest extends LightPlatformCodeInsightFixtureTestCase{
|
||||
PsiFile file = myFixture.configureByText(XmlFileType.INSTANCE, "<a/>");
|
||||
assertFalse(new CollapseTagIntention().isAvailable(getProject(), myFixture.getEditor(), file));
|
||||
}
|
||||
|
||||
public void testCollapseInnerTag() {
|
||||
myFixture.enableInspections(new CheckTagEmptyBodyInspection());
|
||||
PsiFile file = myFixture.configureByText(XmlFileType.INSTANCE, "<a>\n" +
|
||||
" <b></b><caret>\n" +
|
||||
"</a>");
|
||||
assertFalse(new CollapseTagIntention().isAvailable(getProject(), myFixture.getEditor(), file));
|
||||
IntentionAction action = myFixture.findSingleIntention("Collapse");
|
||||
assertNotNull(action);
|
||||
action.invoke(getProject(), myFixture.getEditor(), file);
|
||||
myFixture.checkResult("<a>\n" +
|
||||
" <b/>\n" +
|
||||
"</a>");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.intellij.xml.util;
|
||||
|
||||
import com.intellij.codeInspection.LocalQuickFix;
|
||||
import com.intellij.codeInspection.ProblemsHolder;
|
||||
import com.intellij.codeInspection.XmlInspectionGroupNames;
|
||||
import com.intellij.codeInspection.XmlSuppressableInspectionTool;
|
||||
@@ -24,12 +23,11 @@ import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.xml.XMLLanguage;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiElementVisitor;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.XmlElementVisitor;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.xml.XmlChildRole;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.psi.xml.XmlTokenType;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.xml.XmlBundle;
|
||||
import com.intellij.xml.XmlExtension;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -57,11 +55,10 @@ public class CheckTagEmptyBodyInspection extends XmlSuppressableInspectionTool {
|
||||
|
||||
if (node != null &&
|
||||
node.getElementType() == XmlTokenType.XML_END_TAG_START) {
|
||||
final LocalQuickFix localQuickFix = new Fix();
|
||||
holder.registerProblem(
|
||||
tag,
|
||||
XmlBundle.message("xml.inspections.tag.empty.body"),
|
||||
isCollapsibleTag(tag) ? localQuickFix : null
|
||||
isCollapsibleTag(tag) ? new Fix(tag) : null
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -96,8 +93,22 @@ public class CheckTagEmptyBodyInspection extends XmlSuppressableInspectionTool {
|
||||
return "CheckTagEmptyBody";
|
||||
}
|
||||
|
||||
@SuppressWarnings("IntentionDescriptionNotFoundInspection")
|
||||
public static class Fix extends CollapseTagIntention {
|
||||
private final SmartPsiElementPointer<XmlTag> myPointer;
|
||||
|
||||
public Fix(XmlTag tag) {
|
||||
myPointer = SmartPointerManager.getInstance(tag.getProject()).createSmartPsiElementPointer(tag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
XmlTag tag = myPointer.getElement();
|
||||
if (tag == null) {
|
||||
return;
|
||||
}
|
||||
applyFix(project, tag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
|
||||
return true;
|
||||
|
||||
@@ -97,7 +97,7 @@ public class CollapseTagIntention implements LocalQuickFix, IntentionAction {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void applyFix(@NotNull final Project project, @NotNull final PsiElement tag) {
|
||||
protected static void applyFix(@NotNull final Project project, @NotNull final PsiElement tag) {
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(tag.getContainingFile())) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user