This commit is contained in:
Dmitry Avdeev
2012-07-18 13:16:59 +04:00
parent dc53a53ddb
commit af13d2a99e
4 changed files with 40 additions and 14 deletions
@@ -1 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=<spot>"http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"</spot>>
</schema>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=<spot>"http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"</spot>>
</schema>
@@ -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;
}
}
@@ -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) {