ManuallySetupExtResourceAction becomes an intention

This commit is contained in:
Dmitry Avdeev
2012-07-17 18:07:00 +04:00
parent f751a0a382
commit 85733c22fe
7 changed files with 32 additions and 30 deletions
@@ -372,10 +372,16 @@
<category>XML</category>
<className>com.intellij.codeInsight.daemon.impl.analysis.AddSchemaPrefixIntention</className>
</intentionAction>
<intentionAction>
<category>XML</category>
<className>com.intellij.codeInsight.daemon.impl.quickfix.AddXsiSchemaLocationForExtResourceAction</className>
</intentionAction>
<intentionAction>
<category>XML</category>
<className>com.intellij.codeInsight.daemon.impl.quickfix.ManuallySetupExtResourceAction</className>
</intentionAction>
<intentionAction>
<category>XML</category>
<className>com.intellij.codeInsight.daemon.impl.analysis.ConvertSchemaPrefixToDefaultIntention</className>
@@ -0,0 +1,5 @@
<html>
<body>
Allows to map given namespace to an XML schema file (DTD or XSD).
</body>
</html>
@@ -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;
}
}
@@ -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;
}
}
@@ -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());
}