diff --git a/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/after.xml.template b/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/after.xml.template
index 8b137891791f..731cb77e7629 100644
--- a/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/after.xml.template
+++ b/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/after.xml.template
@@ -1 +1,6 @@
+
+"http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd">
+
diff --git a/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/before.xml.template b/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/before.xml.template
index e69de29bb2d1..8cf142ff7382 100644
--- a/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/before.xml.template
+++ b/xml/impl/resources/intentionDescriptions/ManuallySetupExtResourceAction/before.xml.template
@@ -0,0 +1,6 @@
+
+"http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd">
+
+
\ No newline at end of file
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 e168ca417bf0..7a6752a79b04 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,15 +19,20 @@ 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;
@@ -93,4 +98,19 @@ 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 1d53262b8cbe..b08ccd2fb287 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,17 +19,14 @@ 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;
@@ -43,17 +40,15 @@ abstract class BaseExtResourceAction extends BaseIntentionAction {
int offset = editor.getCaretModel().getOffset();
String uri = findUri(file, offset);
- if (uri == null || !isAcceptableUri(uri)) return false;
- 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;
+
+ 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;
}
protected boolean isAcceptableUri(final String uri) {