diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/InsertRequiredAttributeFix.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/InsertRequiredAttributeFix.java
index 06f71c74c5b3..1a4a5842443d 100644
--- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/InsertRequiredAttributeFix.java
+++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/InsertRequiredAttributeFix.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,12 +18,10 @@ package com.intellij.codeInsight.daemon.impl.analysis;
import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.daemon.XmlErrorMessages;
import com.intellij.codeInsight.intention.HighPriorityAction;
-import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.codeInsight.template.*;
-import com.intellij.codeInspection.LocalQuickFix;
-import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
@@ -39,20 +37,20 @@ import com.intellij.xml.XmlElementDescriptor;
import com.intellij.xml.XmlExtension;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
/**
* User: anna
* Date: 18-Nov-2005
*/
-public class InsertRequiredAttributeFix implements IntentionAction, LocalQuickFix, HighPriorityAction {
- private final XmlTag myTag;
+public class InsertRequiredAttributeFix extends LocalQuickFixAndIntentionActionOnPsiElement implements HighPriorityAction {
private final String myAttrName;
private final String[] myValues;
@NonNls
private static final String NAME_TEMPLATE_VARIABLE = "name";
public InsertRequiredAttributeFix(@NotNull XmlTag tag, @NotNull String attrName,@NotNull String... values) {
- myTag = tag;
+ super(tag);
myAttrName = attrName;
myValues = values;
}
@@ -63,12 +61,6 @@ public class InsertRequiredAttributeFix implements IntentionAction, LocalQuickFi
return XmlErrorMessages.message("insert.required.attribute.quickfix.text", myAttrName);
}
- @Override
- @NotNull
- public String getName() {
- return getText();
- }
-
@Override
@NotNull
public String getFamilyName() {
@@ -76,18 +68,13 @@ public class InsertRequiredAttributeFix implements IntentionAction, LocalQuickFi
}
@Override
- public void applyFix(@NotNull final Project project, @NotNull final ProblemDescriptor descriptor) {
- invoke(project, null, myTag.getContainingFile());
- }
-
- @Override
- public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
- return myTag.isValid();
- }
-
- @Override
- public void invoke(@NotNull final Project project, final Editor editor, PsiFile file) {
+ public void invoke(@NotNull final Project project,
+ @NotNull PsiFile file,
+ @Nullable("is null when called from inspection") final Editor editor,
+ @NotNull PsiElement startElement,
+ @NotNull PsiElement endElement) {
if (!FileModificationService.getInstance().prepareFileForWrite(file)) return;
+ XmlTag myTag = (XmlTag)startElement;
ASTNode treeElement = SourceTreeToPsiMap.psiElementToTree(myTag);
final XmlElementDescriptor descriptor = myTag.getDescriptor();
diff --git a/xml/impl/src/com/intellij/codeInspection/XmlQuickFixFactoryImpl.java b/xml/impl/src/com/intellij/codeInspection/XmlQuickFixFactoryImpl.java
index 8065ebf5221f..c095bd1cf49f 100644
--- a/xml/impl/src/com/intellij/codeInspection/XmlQuickFixFactoryImpl.java
+++ b/xml/impl/src/com/intellij/codeInspection/XmlQuickFixFactoryImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,7 +17,6 @@ package com.intellij.codeInspection;
import com.intellij.codeInsight.daemon.impl.analysis.CreateNSDeclarationIntentionFix;
import com.intellij.codeInsight.daemon.impl.analysis.InsertRequiredAttributeFix;
-import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.psi.PsiElement;
import com.intellij.psi.xml.XmlTag;
import com.intellij.psi.xml.XmlToken;
@@ -27,7 +26,7 @@ import org.jetbrains.annotations.Nullable;
public class XmlQuickFixFactoryImpl extends XmlQuickFixFactory {
@NotNull
@Override
- public IntentionAction insertRequiredAttributeFix(@NotNull XmlTag tag, @NotNull String attrName, @NotNull String... values) {
+ public LocalQuickFixAndIntentionActionOnPsiElement insertRequiredAttributeFix(@NotNull XmlTag tag, @NotNull String attrName, @NotNull String... values) {
return new InsertRequiredAttributeFix(tag, attrName, values);
}
diff --git a/xml/openapi/xml-openapi.iml b/xml/openapi/xml-openapi.iml
index 934360bb80c9..d6d222394004 100644
--- a/xml/openapi/xml-openapi.iml
+++ b/xml/openapi/xml-openapi.iml
@@ -9,6 +9,7 @@
+
diff --git a/xml/xml-analysis-api/src/com/intellij/codeInspection/XmlQuickFixFactory.java b/xml/xml-analysis-api/src/com/intellij/codeInspection/XmlQuickFixFactory.java
index e99bbab3d48a..c0c5b1081785 100644
--- a/xml/xml-analysis-api/src/com/intellij/codeInspection/XmlQuickFixFactory.java
+++ b/xml/xml-analysis-api/src/com/intellij/codeInspection/XmlQuickFixFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,6 @@
*/
package com.intellij.codeInspection;
-import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.xml.XmlTag;
@@ -29,7 +28,7 @@ public abstract class XmlQuickFixFactory {
}
@NotNull
- public abstract IntentionAction insertRequiredAttributeFix(@NotNull XmlTag tag, @NotNull String attrName,@NotNull String... values);
+ public abstract LocalQuickFixAndIntentionActionOnPsiElement insertRequiredAttributeFix(@NotNull XmlTag tag, @NotNull String attrName,@NotNull String... values);
@NotNull
public abstract LocalQuickFix createNSDeclarationIntentionFix(@NotNull final PsiElement element,
diff --git a/xml/openapi/src/com/intellij/xml/XmlTagRuleProvider.java b/xml/xml-analysis-api/src/com/intellij/xml/XmlTagRuleProvider.java
similarity index 91%
rename from xml/openapi/src/com/intellij/xml/XmlTagRuleProvider.java
rename to xml/xml-analysis-api/src/com/intellij/xml/XmlTagRuleProvider.java
index 69d3bbef1951..b81172014831 100644
--- a/xml/openapi/src/com/intellij/xml/XmlTagRuleProvider.java
+++ b/xml/xml-analysis-api/src/com/intellij/xml/XmlTagRuleProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@ public abstract class XmlTagRuleProvider {
public static final Rule[] EMPTY_ARRAY = new Rule[0];
- public void annotate(@NotNull XmlTag tag, ProblemsHolder holder) {
+ public void annotate(@NotNull XmlTag tag, @NotNull ProblemsHolder holder) {
}
diff --git a/xml/impl/src/com/intellij/xml/util/TagSetRuleProvider.java b/xml/xml-analysis-impl/src/com/intellij/xml/util/TagSetRuleProvider.java
similarity index 98%
rename from xml/impl/src/com/intellij/xml/util/TagSetRuleProvider.java
rename to xml/xml-analysis-impl/src/com/intellij/xml/util/TagSetRuleProvider.java
index e4e20b9ac570..a3bef9d3ca2e 100644
--- a/xml/impl/src/com/intellij/xml/util/TagSetRuleProvider.java
+++ b/xml/xml-analysis-impl/src/com/intellij/xml/util/TagSetRuleProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/xml/impl/src/com/intellij/xml/util/XmlTagRuleProviderBase.java b/xml/xml-analysis-impl/src/com/intellij/xml/util/XmlTagRuleProviderBase.java
similarity index 92%
rename from xml/impl/src/com/intellij/xml/util/XmlTagRuleProviderBase.java
rename to xml/xml-analysis-impl/src/com/intellij/xml/util/XmlTagRuleProviderBase.java
index 66aed47b71d3..6f93f029bbbe 100644
--- a/xml/impl/src/com/intellij/xml/util/XmlTagRuleProviderBase.java
+++ b/xml/xml-analysis-impl/src/com/intellij/xml/util/XmlTagRuleProviderBase.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,10 +15,10 @@
*/
package com.intellij.xml.util;
-import com.intellij.codeInsight.daemon.impl.analysis.InsertRequiredAttributeFix;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.codeInspection.ProblemsHolder;
+import com.intellij.codeInspection.XmlQuickFixFactory;
import com.intellij.codeInspection.htmlInspections.RemoveAttributeIntentionAction;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.Condition;
@@ -117,7 +117,7 @@ public abstract class XmlTagRuleProviderBase extends XmlTagRuleProvider {
// ---=== Classes ===---
public abstract static class Effect {
- public abstract void annotate(@NotNull XmlTag tag, ProblemsHolder holder);
+ public abstract void annotate(@NotNull XmlTag tag, @NotNull ProblemsHolder holder);
}
public static class InvalidAttrEffect extends Effect {
@@ -132,7 +132,7 @@ public abstract class XmlTagRuleProviderBase extends XmlTagRuleProvider {
}
@Override
- public void annotate(@NotNull XmlTag tag, ProblemsHolder holder) {
+ public void annotate(@NotNull XmlTag tag, @NotNull ProblemsHolder holder) {
XmlAttribute attribute = tag.getAttribute(myAttrName);
if (attribute != null) {
PsiElement attributeNameElement = getAttributeNameElement(attribute);
@@ -155,7 +155,7 @@ public abstract class XmlTagRuleProviderBase extends XmlTagRuleProvider {
}
@Override
- public void annotate(@NotNull XmlTag tag, ProblemsHolder holder) {
+ public void annotate(@NotNull XmlTag tag, @NotNull ProblemsHolder holder) {
for (XmlAttribute xmlAttribute : tag.getAttributes()) {
String attrName = xmlAttribute.getName();
if (!ArrayUtil.contains(attrName, myAttrNames)) {
@@ -178,7 +178,7 @@ public abstract class XmlTagRuleProviderBase extends XmlTagRuleProvider {
}
@Override
- public void annotate(@NotNull XmlTag tag, ProblemsHolder holder) {
+ public void annotate(@NotNull XmlTag tag, @NotNull ProblemsHolder holder) {
if (myCondition.value(tag)) {
for (Effect effect : myEffect) {
effect.annotate(tag, holder);
@@ -214,7 +214,7 @@ public abstract class XmlTagRuleProviderBase extends XmlTagRuleProvider {
}
@Override
- public void annotate(@NotNull XmlTag tag, ProblemsHolder holder) {
+ public void annotate(@NotNull XmlTag tag, @NotNull ProblemsHolder holder) {
for (String attributeName : myAttributeNames) {
if (tag.getAttribute(attributeName) != null) {
return;
@@ -228,7 +228,7 @@ public abstract class XmlTagRuleProviderBase extends XmlTagRuleProvider {
LocalQuickFix[] fixes = new LocalQuickFix[myAttributeNames.length];
for (int i = 0; i < myAttributeNames.length; i++) {
- fixes[i] = new InsertRequiredAttributeFix(tag, myAttributeNames[i]);
+ fixes[i] = XmlQuickFixFactory.getInstance().insertRequiredAttributeFix(tag, myAttributeNames[i]);
}
holder.registerProblem(tagNameElement, "Tag should have one of following attributes: " + StringUtil.join(myAttributeNames, ", "),