mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-111176 Invalid Inspection - Element PUBLIC/PROTECTED/STATIC is not allowed here
This commit is contained in:
@@ -670,6 +670,15 @@ public class XmlParsingTest extends ParsingTestCase {
|
||||
doTest("<script type=\"application/custom\">Custom Script</script>", "test.html");
|
||||
}
|
||||
|
||||
public void testKeywordsAsName() throws Exception {
|
||||
doTestDtd("<!ELEMENT FIELD ANY>\n" +
|
||||
"<!ELEMENT PUBLIC ANY>\n" +
|
||||
"<!ELEMENT EMPTY ANY>\n" +
|
||||
"<!ELEMENT ANY ANY>\n" +
|
||||
"<!ELEMENT AND (FIELD|PUBLIC|EMPTY|ANY)*>");
|
||||
|
||||
}
|
||||
|
||||
static class MyLanguage extends Language implements InjectableLanguage {
|
||||
protected MyLanguage() {
|
||||
super("MyLanguage", "application/custom");
|
||||
|
||||
@@ -4,7 +4,7 @@ XmlFile:test.dtd
|
||||
<empty list>
|
||||
PsiElement(XML_ELEMENT_DECL)
|
||||
XmlToken:XML_ELEMENT_DECL_START('<!ELEMENT')
|
||||
PsiErrorElement:xml name expected
|
||||
PsiErrorElement:XML name expected
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
@@ -17,14 +17,14 @@ XmlFile:test.dtd
|
||||
PsiElement(XML_ELEMENT_CONTENT_SPEC)
|
||||
PsiElement(XML_ELEMENT_CONTENT_GROUP)
|
||||
XmlToken:XML_LEFT_PAREN('(')
|
||||
PsiErrorElement:Xml name or entity ref expected
|
||||
PsiErrorElement:XML name or entity ref expected
|
||||
<empty list>
|
||||
XmlToken:XML_COMMA(',')
|
||||
XmlToken:XML_RIGHT_PAREN(')')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(XML_ATTLIST_DECL)
|
||||
XmlToken:XML_ATTLIST_DECL_START('<!ATTLIST')
|
||||
PsiErrorElement:xml name expected
|
||||
PsiErrorElement:XML name expected
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
@@ -57,7 +57,7 @@ XmlFile:test.dtd
|
||||
XmlToken:XML_LEFT_PAREN('(')
|
||||
XmlToken:XML_NAME('aaa')
|
||||
XmlToken:XML_COMMA(',')
|
||||
PsiErrorElement:Xml name or entity ref expected
|
||||
PsiErrorElement:XML name or entity ref expected
|
||||
<empty list>
|
||||
XmlToken:XML_RIGHT_PAREN(')')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
|
||||
@@ -13,7 +13,7 @@ XmlFile:test.dtd
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ENTITY_DECL)
|
||||
XmlToken:XML_ENTITY_DECL_START('<!ENTITY')
|
||||
PsiErrorElement:xml name expected
|
||||
PsiErrorElement:XML name expected
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
@@ -0,0 +1,58 @@
|
||||
XmlFile:test.dtd
|
||||
PsiElement(XML_DOCUMENT)
|
||||
PsiElement(XML_PROLOG)
|
||||
<empty list>
|
||||
PsiElement(XML_ELEMENT_DECL)
|
||||
XmlToken:XML_ELEMENT_DECL_START('<!ELEMENT')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_NAME('FIELD')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ELEMENT_CONTENT_SPEC)
|
||||
XmlToken:XML_CONTENT_ANY('ANY')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(XML_ELEMENT_DECL)
|
||||
XmlToken:XML_ELEMENT_DECL_START('<!ELEMENT')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_NAME('PUBLIC')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ELEMENT_CONTENT_SPEC)
|
||||
XmlToken:XML_CONTENT_ANY('ANY')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(XML_ELEMENT_DECL)
|
||||
XmlToken:XML_ELEMENT_DECL_START('<!ELEMENT')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_NAME('EMPTY')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ELEMENT_CONTENT_SPEC)
|
||||
XmlToken:XML_CONTENT_ANY('ANY')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(XML_ELEMENT_DECL)
|
||||
XmlToken:XML_ELEMENT_DECL_START('<!ELEMENT')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_NAME('ANY')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ELEMENT_CONTENT_SPEC)
|
||||
XmlToken:XML_CONTENT_ANY('ANY')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(XML_ELEMENT_DECL)
|
||||
XmlToken:XML_ELEMENT_DECL_START('<!ELEMENT')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_NAME('AND')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ELEMENT_CONTENT_SPEC)
|
||||
PsiElement(XML_ELEMENT_CONTENT_GROUP)
|
||||
XmlToken:XML_LEFT_PAREN('(')
|
||||
XmlToken:XML_NAME('FIELD')
|
||||
XmlToken:XML_BAR('|')
|
||||
XmlToken:XML_NAME('PUBLIC')
|
||||
XmlToken:XML_BAR('|')
|
||||
XmlToken:XML_CONTENT_EMPTY('EMPTY')
|
||||
XmlToken:XML_BAR('|')
|
||||
XmlToken:XML_CONTENT_ANY('ANY')
|
||||
XmlToken:XML_RIGHT_PAREN(')')
|
||||
XmlToken:XML_STAR('*')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
@@ -79,15 +79,15 @@ xml.declaration.should.precede.all.document.content=Xml declaration should prece
|
||||
|
||||
dtd.parser.message.whitespace.expected=Whitespace expected
|
||||
dtd.parser.message.left.paren.or.entityref.or.empty.or.any.expected=( or entity ref or EMPTY or ANY expected
|
||||
dtd.parser.message.name.expected=xml name expected
|
||||
dtd.parser.message.name.expected=XML name expected
|
||||
dtd.parser.message.literal.public.system.expected=Literal, PUBLIC or SYSTEM expected
|
||||
dtd.parser.message.name.or.entity.ref.expected=Xml name or entity ref expected
|
||||
dtd.parser.message.name.or.entity.ref.expected=XML name or entity ref expected
|
||||
dtd.parser.message.rbrace.expected=) expected
|
||||
|
||||
duplicate.declaration=Nonunique declaration name {0}
|
||||
duplicate.declaration=Non-unique declaration name {0}
|
||||
xml.validate.external.resource.is.not.registered=External resource {0} is not registered
|
||||
|
||||
xml.schema.validation.attr.not.allowed.with.ref=Attribute {0} is not allowed here when element reference is used
|
||||
xml.schema.validation.max.occurs.should.be.not.less.than.min.occurs=maxOccurs value should be greater than minOccurs value
|
||||
xml.schema.validation.name.or.ref.should.present=Either 'name' or 'ref' attribute should present
|
||||
xml.schema.validation.default.or.fixed.should.be.specified.but.not.both='default' and 'fixed' attributes should not bepresent in the same time
|
||||
xml.schema.validation.default.or.fixed.should.be.specified.but.not.both='default' and 'fixed' attributes should not be present in the same time
|
||||
|
||||
@@ -94,7 +94,7 @@ public class DtdParsing extends XmlParsing implements XmlElementType {
|
||||
parseGenericXml();
|
||||
break;
|
||||
case ELEMENT_CONTENT_SPEC:
|
||||
parseElementContentSpec();
|
||||
doParseContentSpec(true);
|
||||
break;
|
||||
case ATTLIST_SPEC:
|
||||
parseAttlistContent();
|
||||
@@ -492,22 +492,28 @@ public class DtdParsing extends XmlParsing implements XmlElementType {
|
||||
}
|
||||
|
||||
private boolean parseName() {
|
||||
if (myBuilder.getTokenType() == XML_NAME) {
|
||||
IElementType type = myBuilder.getTokenType();
|
||||
if (type == XML_NAME) {
|
||||
addToken();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (myBuilder.getTokenType() == XML_ENTITY_REF_TOKEN) {
|
||||
if (type == XML_ENTITY_REF_TOKEN) {
|
||||
parseEntityRef();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return consumeKeywordAsName(type);
|
||||
}
|
||||
|
||||
private void parseElementContentSpec() {
|
||||
doParseContentSpec(true);
|
||||
private boolean consumeKeywordAsName(IElementType type) {
|
||||
if (type == XML_DOCTYPE_PUBLIC || type == XML_DOCTYPE_SYSTEM || type == XML_CONTENT_EMPTY || type == XML_CONTENT_ANY) {
|
||||
myBuilder.remapCurrentToken(XML_NAME);
|
||||
addToken();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void doParseContentSpec(boolean topLevel) {
|
||||
@@ -569,6 +575,9 @@ public class DtdParsing extends XmlParsing implements XmlElementType {
|
||||
addToken();
|
||||
endedWithDelimiter = false;
|
||||
}
|
||||
else if (consumeKeywordAsName(tokenType)) {
|
||||
endedWithDelimiter = false;
|
||||
}
|
||||
else {
|
||||
myBuilder.error(XmlErrorMessages.message("dtd.parser.message.name.or.entity.ref.expected"));
|
||||
return false;
|
||||
|
||||
@@ -142,4 +142,9 @@ public abstract class BaseXmlElementDescriptorImpl implements XmlElementDescript
|
||||
public final XmlAttributeDescriptor getAttributeDescriptor(XmlAttribute attr){
|
||||
return getAttributeDescriptor(attr.getName(), attr.getParent());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getQualifiedName();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user