diff --git a/platform/platform-resources/src/META-INF/XmlPlugin.xml b/platform/platform-resources/src/META-INF/XmlPlugin.xml
index f0ce976e2508..6340ee08e1d9 100644
--- a/platform/platform-resources/src/META-INF/XmlPlugin.xml
+++ b/platform/platform-resources/src/META-INF/XmlPlugin.xml
@@ -372,10 +372,16 @@
XML
com.intellij.codeInsight.daemon.impl.analysis.AddSchemaPrefixIntention
+
XML
com.intellij.codeInsight.daemon.impl.quickfix.AddXsiSchemaLocationForExtResourceAction
+
+ XML
+ com.intellij.codeInsight.daemon.impl.quickfix.ManuallySetupExtResourceAction
+
+
XML
com.intellij.codeInsight.daemon.impl.analysis.ConvertSchemaPrefixToDefaultIntention
diff --git a/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/after.xml.template b/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/after.xml.template
new file mode 100644
index 000000000000..8b137891791f
--- /dev/null
+++ b/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/after.xml.template
@@ -0,0 +1 @@
+
diff --git a/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/before.xml.template b/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/before.xml.template
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/description.html b/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/description.html
new file mode 100644
index 000000000000..960e034ddc43
--- /dev/null
+++ b/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/description.html
@@ -0,0 +1,5 @@
+
+
+Allows to map given namespace to an XML schema file (DTD or XSD).
+
+
diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddXsiSchemaLocationForExtResourceAction.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddXsiSchemaLocationForExtResourceAction.java
index 7a6752a79b04..e168ca417bf0 100644
--- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddXsiSchemaLocationForExtResourceAction.java
+++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddXsiSchemaLocationForExtResourceAction.java
@@ -19,20 +19,15 @@ import com.intellij.codeInsight.CodeInsightUtilBase;
import com.intellij.codeInsight.daemon.XmlErrorMessages;
import com.intellij.codeInsight.daemon.impl.analysis.CreateNSDeclarationIntentionFix;
import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.XmlElementFactory;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlAttribute;
-import com.intellij.psi.xml.XmlAttributeValue;
-import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
-import com.intellij.xml.XmlBundle;
import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -98,19 +93,4 @@ public class AddXsiSchemaLocationForExtResourceAction extends BaseExtResourceAct
final TextRange textRange = new TextRange(range.getEndOffset() - offset - 1, range.getEndOffset() - 1);
editor.getCaretModel().moveToOffset(textRange.getStartOffset());
}
-
- @Override
- public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
- if (!(file instanceof XmlFile)) return false;
-
- PsiElement element = file.findElementAt(editor.getCaretModel().getOffset());
- XmlAttributeValue value = PsiTreeUtil.getParentOfType(element, XmlAttributeValue.class);
- if (value == null) return false;
- XmlAttribute attribute = PsiTreeUtil.getParentOfType(value, XmlAttribute.class);
- if (attribute != null && attribute.isNamespaceDeclaration()) {
- setText(XmlBundle.message(getQuickFixKeyId()));
- return true;
- }
- return false;
- }
}
\ No newline at end of file
diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/quickfix/BaseExtResourceAction.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/quickfix/BaseExtResourceAction.java
index f41a9f6a5158..1d53262b8cbe 100644
--- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/quickfix/BaseExtResourceAction.java
+++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/quickfix/BaseExtResourceAction.java
@@ -19,14 +19,17 @@ import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.URIReferenceProvider;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.URLReference;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.psi.xml.XmlAttribute;
+import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.psi.xml.XmlFile;
import com.intellij.util.IncorrectOperationException;
import com.intellij.xml.XmlBundle;
-import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -40,14 +43,17 @@ abstract class BaseExtResourceAction extends BaseIntentionAction {
int offset = editor.getCaretModel().getOffset();
String uri = findUri(file, offset);
+ if (uri == null || !isAcceptableUri(uri)) return false;
- if (uri == null) return false;
-
- XmlFile xmlFile = XmlUtil.findNamespaceByLocation(file, uri);
- if (xmlFile != null) return false;
- if (!isAcceptableUri(uri)) return false;
- setText(XmlBundle.message(getQuickFixKeyId()));
- return true;
+ PsiElement element = file.findElementAt(offset);
+ XmlAttributeValue value = PsiTreeUtil.getParentOfType(element, XmlAttributeValue.class);
+ if (value == null) return false;
+ XmlAttribute attribute = PsiTreeUtil.getParentOfType(value, XmlAttribute.class);
+ if (attribute != null && attribute.isNamespaceDeclaration()) {
+ setText(XmlBundle.message(getQuickFixKeyId()));
+ return true;
+ }
+ return false;
}
protected boolean isAcceptableUri(final String uri) {
@@ -85,4 +91,9 @@ abstract class BaseExtResourceAction extends BaseIntentionAction {
}
return null;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ return obj instanceof ManuallySetupExtResourceAction;
+ }
}
\ No newline at end of file
diff --git a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URLReference.java b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URLReference.java
index 0278e76e25d6..f5821112427f 100644
--- a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URLReference.java
+++ b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URLReference.java
@@ -1,4 +1,3 @@
-
package com.intellij.psi.impl.source.resolve.reference.impl.providers;
import com.intellij.codeInsight.daemon.EmptyResolveMessageProvider;
@@ -219,8 +218,8 @@ public class URLReference implements PsiReference, QuickFixProvider, EmptyResolv
QuickFixAction.registerQuickFixAction(info, new FetchExtResourceAction());
QuickFixAction.registerQuickFixAction(info, new ManuallySetupExtResourceAction());
QuickFixAction.registerQuickFixAction(info, new IgnoreExtResourceAction());
- final PsiElement parentElement = reference.getElement().getParent();
+ final PsiElement parentElement = reference.getElement().getParent();
if (parentElement instanceof XmlAttribute && ((XmlAttribute)parentElement).isNamespaceDeclaration()) {
QuickFixAction.registerQuickFixAction(info, new AddXsiSchemaLocationForExtResourceAction());
}