Specific ns descriptor for jsp validation

This commit is contained in:
Maxim Mossienko
2005-01-21 17:06:39 +03:00
parent 41dc29b1cf
commit 7a41c5724b
2 changed files with 61 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
package com.intellij.psi.filters.position;
import com.intellij.psi.filters.TextFilter;
import com.intellij.psi.PsiElement;
import com.intellij.psi.xml.XmlTag;
import com.intellij.psi.xml.XmlDocument;
/**
* Created by IntelliJ IDEA.
* User: ik
* Date: 07.05.2003
* Time: 4:13:57
* To change this template use Options | File Templates.
*/
public class TargetNamespaceFilter extends TextFilter{
public TargetNamespaceFilter(String str){
super(str);
}
public TargetNamespaceFilter(String[] strs){
super(strs);
}
public boolean isClassAcceptable(Class hintClass){
return XmlTag.class.isAssignableFrom(hintClass) || XmlDocument.class.isAssignableFrom(hintClass);
}
public boolean isAcceptable(Object element, PsiElement context){
if(element instanceof XmlTag){
final String attributeValue = ((XmlTag)element).getAttributeValue("targetNamespace");
if(attributeValue != null){
for(int i = 0; i < myValue.length; i++){
if(myValue[i].equals(attributeValue)) return true;
}
}
}
else if(element instanceof XmlDocument){
return isAcceptable(((XmlDocument) element).getRootTag(), context);
}
return false;
}
}

View File

@@ -8,6 +8,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.filters.*;
import com.intellij.psi.filters.position.NamespaceFilter;
import com.intellij.psi.filters.position.RootTagFilter;
import com.intellij.psi.filters.position.TargetNamespaceFilter;
import com.intellij.psi.impl.source.jsp.tagLibrary.JspTagAttributeInfoImpl;
import com.intellij.psi.impl.source.jsp.tagLibrary.JspTagInfoImpl;
import com.intellij.psi.impl.source.jsp.tagLibrary.JspTagLibraryInfoImpl;
@@ -20,6 +21,7 @@ import com.intellij.psi.xml.XmlElementDecl;
import com.intellij.psi.xml.XmlMarkupDecl;
import com.intellij.xml.util.XmlUtil;
import com.intellij.jsp.impl.TldDescriptor;
import com.intellij.jsp.impl.JspNsDescriptor;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
@@ -38,6 +40,13 @@ public class MetaRegistry {
private static final List<MyBinding> ourBindings = new ArrayList<MyBinding>();
private static final String[] TAGLIB_URIS = new String[]{XmlUtil.TAGLIB_1_1_URI, XmlUtil.TAGLIB_1_2_a_URI, XmlUtil.TAGLIB_1_2_URI, XmlUtil.TAGLIB_2_0_URI, XmlUtil.TAGLIB_1_2_b_URI,};
private static final String[] SCHEMA_URIS = { XmlUtil.XML_SCHEMA_URI, XmlUtil.XML_SCHEMA_URI2, XmlUtil.XML_SCHEMA_URI3 };
private static final String[] JSP_URIS = {
XmlUtil.JSP_NAMESPACE,
"http://java.sun.com/products/jsp/dtd/jsp_1_0.dtd",
"http://java.sun.com/xml/ns/j2ee/jsp_2_0.xsd",
"http://java.sun.com/dtd/jspxml.xsd",
"http://java.sun.com/dtd/jspxml.dtd"
};
static {
{
@@ -77,6 +86,16 @@ public class MetaRegistry {
);
}
{
addMetadataBinding(
new AndFilter(
new ClassFilter(XmlDocument.class),
new TargetNamespaceFilter(JSP_URIS)
),
JspNsDescriptor.class
);
}
{
addMetadataBinding(
new AndFilter(