IDEA-68394 XPath 2: wildcard in form of *:NCName in name test is red

This commit is contained in:
sweinreuter
2011-04-18 19:38:41 +02:00
parent 8af4dc4fe6
commit 7b976b1e80
5 changed files with 32 additions and 3 deletions
@@ -515,6 +515,21 @@ public class XPath2Parser extends XPathParser {
return true;
}
@Override
protected boolean parseWildcard(PsiBuilder builder) {
builder.advanceLexer();
if (builder.getTokenType() == XPathTokenTypes.COL) {
builder.advanceLexer();
if (builder.getTokenType() != XPathTokenTypes.NCNAME) {
builder.error("NCName expected");
builder.advanceLexer();
}
}
return true;
}
@Override
protected TokenSet unionOps() {
return XPath2TokenTypes.UNION_OPS;
@@ -453,10 +453,9 @@ public class XPathParser implements PsiParser {
/**
* [37] NameTest ::= '*' | NCName ':' '*' | QName
*/
private static boolean parseNameTest(PsiBuilder builder) {
protected boolean parseNameTest(PsiBuilder builder) {
if (builder.getTokenType() == XPathTokenTypes.STAR) {
builder.advanceLexer();
return true;
return parseWildcard(builder);
} else if (builder.getTokenType() == XPathTokenTypes.NCNAME) {
builder.advanceLexer();
@@ -477,6 +476,11 @@ public class XPathParser implements PsiParser {
return false;
}
protected boolean parseWildcard(PsiBuilder builder) {
builder.advanceLexer();
return true;
}
/**
* [5] AxisSpecifier ::= AxisName '::' | AbbreviatedAxisSpecifier
* <p/>
@@ -67,6 +67,14 @@ public class XPath2ParsingTest extends TestBase {
doXPathHighlighting();
}
public void testWildcardNamespace() throws Throwable {
doXPathHighlighting();
}
public void testInvalidWildcard() throws Throwable {
doXPathHighlighting();
}
private void doXPathHighlighting(String... moreFiles) throws Throwable {
final String name = getTestFileName();
myFixture.testHighlighting(false, false, false, ArrayUtil.append(moreFiles, name + ".xpath2"));
@@ -0,0 +1 @@
*:<error descr="NCName expected">*</error>
@@ -0,0 +1 @@
./*:root/*:container[1]