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) {