@Override
 public void parserProblem(
     Severity problemSeverity,
     String problemMessage,
     String processingContext,
     int startOffset,
     int endOffset) {
   IPrsStream prsStream = getIPrsStream();
   int leftToken = prsStream.getTokenIndexAtCharacter(startOffset);
   int rightToken = prsStream.getTokenIndexAtCharacter(endOffset);
   int leftTokenLoc = (leftToken > rightToken ? rightToken : leftToken);
   int rightTokenLoc = rightToken;
   int line = prsStream.getLine(leftTokenLoc) + getErrorReportLineOffset();
   CustomDiagnostic diagnostic =
       new CustomDiagnostic(
           problemSeverity.getDiagnosticSeverity(),
           "org.eclipse.ocl",
           1,
           problemMessage,
           new Object[] {processingContext});
   if (line > 0) {
     diagnostic.setStartLine(prsStream.getLine(leftTokenLoc) + getErrorReportLineOffset());
     diagnostic.setStartPosition(prsStream.getColumn(leftTokenLoc));
     diagnostic.setEndPosition(prsStream.getEndColumn(rightTokenLoc));
     diagnostic.setEndLine(prsStream.getEndLine(rightTokenLoc) + getErrorReportLineOffset());
   }
   if (diagnostics == null) {
     diagnostics = diagnostic;
   } else {
     diagnostics.add(diagnostic);
   }
 }