boolean (PsiBuilder builder, boolean isAbsolute, PsiBuilder.Marker... m) { assert m.length <= 1; PsiBuilder.Marker marker = m.length == 1 ? m[0] : builder.mark(); if (isAbsolute) { // root step makeToken(builder); if (builder.getTokenType() == null) { marker.done(XPathElementTypes.STEP); return true; } } if (!parseStep(builder)) { marker.drop(); return false; } marker.done(XPathElementTypes.STEP); marker = marker.precede(); if (XPathTokenTypes.PATH_OPS.contains(builder.getTokenType())) { do { makeToken(builder); if (!parseStep(builder)) { builder.error(XPathBundle.message("parsing.error.location.step.expected")); } marker.done(XPathElementTypes.STEP); marker = marker.precede(); } while (XPathTokenTypes.PATH_OPS.contains(builder.getTokenType())); } marker.drop(); return true; }