/**
   * Creates an IMessage from an IProblem
   *
   * @param problem
   * @param f
   * @param translation
   * @param textDoc
   * @return message representation of the problem, or null if it could not create one
   */
  private IMessage createMessageFromProblem(
      IProblem problem, IFile f, IJsTranslation translation, IDocument textDoc) {
    int sourceStart = problem.getSourceStart();
    int sourceEnd = problem.getSourceEnd();
    if (sourceStart == -1) {
      return null;
    }
    sourceStart = translation.getWebPageOffset(sourceStart);
    sourceEnd = translation.getWebPageOffset(sourceEnd);
    /*
     * Bug 241794 - Validation shows errors when using JSP Expressions
     * inside JavaScript code
     */
    IStructuredDocument doc = (IStructuredDocument) textDoc;
    IStructuredDocumentRegion documentRegion = doc.getRegionAtCharacterOffset(sourceStart);
    if (documentRegion != null) {
      ITextRegion textRegion = documentRegion.getRegionAtCharacterOffset(sourceStart);
      /*
       * Filter out problems from areas that aren't simple JavaScript,
       * e.g. JSP.
       */
      if (textRegion != null && textRegion instanceof ITextRegionCollection) return null;
    }

    int sev =
        problem.isError()
            ? IMessage.HIGH_SEVERITY
            : (problem.isWarning() ? IMessage.NORMAL_SEVERITY : IMessage.LOW_SEVERITY);
    IMessage m = new LocalizedMessage(sev, problem.getMessage(), f);
    // line numbers for marker starts @ 1
    // line numbers from document starts @ 0
    try {
      int lineNo = textDoc.getLineOfOffset(sourceStart) + 1;
      m.setLineNo(lineNo);
      m.setOffset(sourceStart);
      m.setLength(sourceEnd - sourceStart + 1);
    } catch (BadLocationException e) {
      Logger.logException(e);
    }
    return m;
  }