# Interface Diagnostic<S>

Type Parameters:
  `S` - the type of source object used by this diagnostic

public interface Diagnostic<S>
Interface for diagnostics from tools. A diagnostic usually reports a problem at a specific position in a source file. However, not all diagnostics are associated with a position or a file.

A position is a zero-based character offset from the beginning of a file. Negative values (except `NOPOS`) are not valid positions.

Line and column numbers begin at 1. Negative values (except `NOPOS`) and 0 are not valid line or column numbers.

Since:
  1.6

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Interface
  Description
  `static enum`
  `Diagnostic.Kind`
  Kinds of diagnostics, for example, error or warning.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final long`
  `NOPOS`
  Used to signal that no position is available.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `String`
  `getCode()`
  Returns a diagnostic code indicating the type of diagnostic.
  `long`
  `getColumnNumber()`
  Returns the column number of the character offset returned by getPosition().
  `long`
  `getEndPosition()`
  Returns the character offset from the beginning of the file associated with this diagnostic that indicates the end of the problem.
  `Diagnostic.Kind`
  `getKind()`
  Returns the kind of this diagnostic, for example, error or warning.
  `long`
  `getLineNumber()`
  Returns the line number of the character offset returned by getPosition().
  `String`
  `getMessage(Locale locale)`
  Returns a localized message for the given locale.
  `long`
  `getPosition()`
  Returns a character offset from the beginning of the source object associated with this diagnostic that indicates the location of the problem.
  `S`
  `getSource()`
  Returns the source object associated with this diagnostic.
  `long`
  `getStartPosition()`
  Returns the character offset from the beginning of the file associated with this diagnostic that indicates the start of the problem.

- ## Field Details

  - ### NOPOS

    static final long NOPOS
    Used to signal that no position is available.
    See Also:
      - Constant Field Values

- ## Method Details

  - ### getKind

    Diagnostic.Kind getKind()
    Returns the kind of this diagnostic, for example, error or warning.
    Returns:
      the kind of this diagnostic

  - ### getSource

    S getSource()
    Returns the source object associated with this diagnostic.
    Returns:
      the source object associated with this diagnostic. `null` if no source object is associated with the diagnostic.

  - ### getPosition

    long getPosition()
    Returns a character offset from the beginning of the source object associated with this diagnostic that indicates the location of the problem. In addition, the following must be true:

    `getStartPosition() <= getPosition()`

    `getPosition() <= getEndPosition()`

    Returns:
      character offset from beginning of source; `NOPOS` if `getSource()` would return `null` or if no location is suitable

  - ### getStartPosition

    long getStartPosition()
    Returns the character offset from the beginning of the file associated with this diagnostic that indicates the start of the problem.
    Returns:
      offset from beginning of file; `NOPOS` if and only if `getPosition()` returns `NOPOS`

  - ### getEndPosition

    long getEndPosition()
    Returns the character offset from the beginning of the file associated with this diagnostic that indicates the end of the problem.
    Returns:
      offset from beginning of file; `NOPOS` if and only if `getPosition()` returns `NOPOS`

  - ### getLineNumber

    long getLineNumber()
    Returns the line number of the character offset returned by getPosition().
    Returns:
      a line number or `NOPOS` if and only if `getPosition()` returns `NOPOS`

  - ### getColumnNumber

    long getColumnNumber()
    Returns the column number of the character offset returned by getPosition().
    Returns:
      a column number or `NOPOS` if and only if `getPosition()` returns `NOPOS`

  - ### getCode

    String getCode()
    Returns a diagnostic code indicating the type of diagnostic. The code is implementation-dependent and might be `null`.
    Returns:
      a diagnostic code

  - ### getMessage

    String getMessage(Locale locale)
    Returns a localized message for the given locale. The actual message is implementation-dependent. If the locale is `null` use the default locale.
    Parameters:
      `locale` - a locale; might be `null`
    Returns:
      a localized message