boolean (PsiBuilder builder) { final PsiBuilder.Marker marker = builder.mark(); final IElementType tokenType = builder.getTokenType(); if (XPathTokenTypes.AXIS.contains(tokenType)) { builder.advanceLexer(); checkMatches(builder, XPathTokenTypes.COLCOL, XPathBundle.message("parsing.error.double.colon.expected")); } else { if (tokenType == XPathTokenTypes.AT) { builder.advanceLexer(); } else if (tokenType == XPathTokenTypes.DOT || tokenType == XPathTokenTypes.DOTDOT) { marker.drop(); return false; } else { final PsiBuilder.Marker m = builder.mark(); final boolean b = parseNodeTest(builder); m.rollbackTo(); if (!b) { marker.drop(); return false; } } } marker.done(XPathElementTypes.AXIS_SPECIFIER); return true; }