boolean (PsiBuilder builder) { final PsiBuilder.Marker marker = builder.mark(); if (!parseLocationPath(builder, false) && !parseAbsoluteLocationPath(builder)) { final PsiBuilder.Marker m2 = builder.mark(); if (!parseFilterExpression(builder)) { m2.drop(); marker.drop(); return false; } if (XPathTokenTypes.PATH_OPS.contains(builder.getTokenType())) { makeToken(builder); if (!parseLocationPath(builder, false, m2)) { builder.error(XPathBundle.message("parsing.error.location.path.expected")); } marker.done(XPathElementTypes.LOCATION_PATH); } else { m2.drop(); marker.drop(); } } else { marker.done(XPathElementTypes.LOCATION_PATH); } return true; }