private static boolean reportError()

in sources/frontend/plain/parserutil-stub/src/com/intellij/lang/parser/GeneratedParserUtilBase.java [748:795]


  private static boolean reportError(PsiBuilder builder,
                                     ErrorState state,
                                     Frame frame,
                                     boolean inner,
                                     boolean force,
                                     boolean advance) {
    int position = builder.rawTokenIndex();
    String expected = state.getExpected(position, true);
    if (!force && expected.isEmpty() && !advance) return false;

    String actual = trim(builder.getTokenText());
    String message;
    if (expected.isEmpty()) {
      if (isEmpty(actual)) {
        message = AnalysisBundle.message("parsing.error.unmatched.input");
      }
      else {
        message = AnalysisBundle.message("parsing.error.unexpected", first(actual, MAX_ERROR_TOKEN_TEXT, true));
      }
    } else {
      if (isEmpty(actual)) {
        message = AnalysisBundle.message("parsing.error.expected", expected);
      }
      else {
        message = AnalysisBundle.message("parsing.error.expected.got", expected, first(actual, MAX_ERROR_TOKEN_TEXT, true));
      }
    }
    if (advance) {
      PsiBuilder.Marker mark = builder.mark();
      state.tokenAdvancer.parse(builder, frame.level + 1);
      mark.error(message);
    }
    else if (inner) {
      PsiBuilder.Marker latestDoneMarker = getLatestExtensibleDoneMarker(builder);
      builder.error(message);
      if (latestDoneMarker != null &&
          frame.position >= latestDoneMarker.getStartIndex() &&
          frame.position <= latestDoneMarker.getEndIndex()) {
        extend_marker_impl(latestDoneMarker);
      }
    }
    else {
      builder.error(message);
    }
    builder.eof(); // skip whitespaces
    frame.errorReportedAt = builder.rawTokenIndex();
    return true;
  }