ignore ext resource works properly for urls inside xsi:schemaLocation and xsi:noNamespaceSchemaLocation

This commit is contained in:
Maxim Mossienko
2005-03-14 21:06:14 +03:00
parent e74b9c4999
commit 6b756f9a37
3 changed files with 7 additions and 29 deletions
@@ -583,6 +583,8 @@ public class XmlHighlightVisitor extends PsiElementVisitor implements Validator.
String location = attribute.getValue();
if (attribute.getLocalName().equals("noNamespaceSchemaLocation")) {
if(ExternalResourceManagerEx.getInstanceEx().isIgnoredResource(location)) return;
if(XmlUtil.findXmlFile(attribute.getContainingFile(),location) == null) {
final int start = attribute.getValueElement().getTextOffset();
reportURIProblem(start,start + location.length());
@@ -592,11 +594,11 @@ public class XmlHighlightVisitor extends PsiElementVisitor implements Validator.
XmlFile file = null;
while(tokenizer.hasMoreElements()) {
String namespace = tokenizer.nextToken(); // skip namespace
tokenizer.nextToken(); // skip namespace
if (!tokenizer.hasMoreElements()) return;
String url = tokenizer.nextToken();
if(ExternalResourceManagerEx.getInstanceEx().isIgnoredResource(namespace)) continue;
if(ExternalResourceManagerEx.getInstanceEx().isIgnoredResource(url)) continue;
if (file == null) {
file = (XmlFile)attribute.getContainingFile();
}
@@ -59,7 +59,7 @@ public class FetchExtResourceAction extends BaseIntentionAction {
return "Fetch External Resource";
}
private String findUri(PsiFile file, int offset) {
static String findUri(PsiFile file, int offset) {
final PsiElement currentElement = file.findElementAt(offset);
PsiElement element = PsiTreeUtil.getParentOfType(currentElement, XmlDoctype.class);
if (element != null) {
@@ -5,13 +5,8 @@ import com.intellij.j2ee.openapi.ex.ExternalResourceManagerEx;
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.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlDoctype;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.xml.util.XmlUtil;
/**
@@ -22,7 +17,7 @@ public class IgnoreExtResourceAction extends BaseIntentionAction {
if (!(file instanceof XmlFile)) return false;
int offset = editor.getCaretModel().getOffset();
String uri = findUri(file, offset);
String uri = FetchExtResourceAction.findUri(file, offset);
if (uri == null) return false;
@@ -39,31 +34,12 @@ public class IgnoreExtResourceAction extends BaseIntentionAction {
return "Ignore External Resource";
}
private String findUri(PsiFile file, int offset) {
final PsiElement currentElement = file.findElementAt(offset);
PsiElement element = PsiTreeUtil.getParentOfType(currentElement, XmlDoctype.class);
if (element != null) {
return ((XmlDoctype)element).getDtdUri();
}
final XmlAttribute attribute = PsiTreeUtil.getParentOfType(currentElement, XmlAttribute.class);
if(attribute != null && attribute.isNamespaceDeclaration()){
final String uri = attribute.getValue();
final PsiElement parent = attribute.getParent();
if(uri != null && parent instanceof XmlTag && ((XmlTag)parent).getNSDescriptor(uri, true) == null){
return uri;
}
}
return null;
}
public void invoke(final Project project, final Editor editor, PsiFile file) {
int offset = editor.getCaretModel().getOffset();
PsiDocumentManager.getInstance(project).commitAllDocuments();
final String uri = findUri(file, offset);
final String uri = FetchExtResourceAction.findUri(file, offset);
if (uri == null) return;
ExternalResourceManagerEx.getInstanceEx().addIgnoredResource(uri);