diff --git a/xml/tests/src/com/intellij/codeInsight/daemon/quickFix/CollapseTagTest.java b/xml/tests/src/com/intellij/codeInsight/daemon/quickFix/CollapseTagTest.java
index 0b0e6d5b08fe..4131af0c17c5 100644
--- a/xml/tests/src/com/intellij/codeInsight/daemon/quickFix/CollapseTagTest.java
+++ b/xml/tests/src/com/intellij/codeInsight/daemon/quickFix/CollapseTagTest.java
@@ -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, "");
assertFalse(new CollapseTagIntention().isAvailable(getProject(), myFixture.getEditor(), file));
}
+
+ public void testCollapseInnerTag() {
+ myFixture.enableInspections(new CheckTagEmptyBodyInspection());
+ PsiFile file = myFixture.configureByText(XmlFileType.INSTANCE, "\n" +
+ " \n" +
+ "");
+ assertFalse(new CollapseTagIntention().isAvailable(getProject(), myFixture.getEditor(), file));
+ IntentionAction action = myFixture.findSingleIntention("Collapse");
+ assertNotNull(action);
+ action.invoke(getProject(), myFixture.getEditor(), file);
+ myFixture.checkResult("\n" +
+ " \n" +
+ "");
+ }
}
diff --git a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckTagEmptyBodyInspection.java b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckTagEmptyBodyInspection.java
index aacf90df3848..622200a439f4 100644
--- a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckTagEmptyBodyInspection.java
+++ b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckTagEmptyBodyInspection.java
@@ -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 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;
diff --git a/xml/xml-analysis-impl/src/com/intellij/xml/util/CollapseTagIntention.java b/xml/xml-analysis-impl/src/com/intellij/xml/util/CollapseTagIntention.java
index ab4810993ab5..ef8a2cc47871 100644
--- a/xml/xml-analysis-impl/src/com/intellij/xml/util/CollapseTagIntention.java
+++ b/xml/xml-analysis-impl/src/com/intellij/xml/util/CollapseTagIntention.java
@@ -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;
}