/*
 * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package javax.tools;

import java.util.Locale;

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 Diagnostic<S>.NOPOS) are not valid positions.

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

Author:Peter von der Ahé, Jonathan Gibbons
Type parameters:
  • <S> – the type of source object used by this diagnostic
Since:1.6
/** * 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. * * <p>A position is a zero-based character offset from the beginning of * a file. Negative values (except {@link #NOPOS}) are not valid * positions. * * <p>Line and column numbers begin at 1. Negative values (except * {@link #NOPOS}) and 0 are not valid line or column numbers. * * @param <S> the type of source object used by this diagnostic * * @author Peter von der Ah&eacute; * @author Jonathan Gibbons * @since 1.6 */
public interface Diagnostic<S> {
Kinds of diagnostics, for example, error or warning. The kind of a diagnostic can be used to determine how the diagnostic should be presented to the user. For example, errors might be colored red or prefixed with the word "Error", while warnings might be colored yellow or prefixed with the word "Warning". There is no requirement that the Kind should imply any inherent semantic meaning to the message of the diagnostic: for example, a tool might provide an option to report all warnings as errors.
/** * Kinds of diagnostics, for example, error or warning. * * The kind of a diagnostic can be used to determine how the * diagnostic should be presented to the user. For example, * errors might be colored red or prefixed with the word "Error", * while warnings might be colored yellow or prefixed with the * word "Warning". There is no requirement that the Kind * should imply any inherent semantic meaning to the message * of the diagnostic: for example, a tool might provide an * option to report all warnings as errors. */
enum Kind {
Problem which prevents the tool's normal completion.
/** * Problem which prevents the tool's normal completion. */
ERROR,
Problem which does not usually prevent the tool from completing normally.
/** * Problem which does not usually prevent the tool from * completing normally. */
WARNING,
Problem similar to a warning, but is mandated by the tool's specification. For example, the Java™ Language Specification mandates warnings on certain unchecked operations and the use of deprecated methods.
/** * Problem similar to a warning, but is mandated by the tool's * specification. For example, the Java&trade; Language * Specification mandates warnings on certain * unchecked operations and the use of deprecated methods. */
MANDATORY_WARNING,
Informative message from the tool.
/** * Informative message from the tool. */
NOTE,
Diagnostic which does not fit within the other kinds.
/** * Diagnostic which does not fit within the other kinds. */
OTHER, }
Used to signal that no position is available.
/** * Used to signal that no position is available. */
public final static long NOPOS = -1;
Returns the kind of this diagnostic, for example, error or warning.
Returns:the kind of this diagnostic
/** * Returns the kind of this diagnostic, for example, error or * warning. * @return the kind of this diagnostic */
Kind getKind();
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.
/** * Returns the source object associated with this diagnostic. * * @return the source object associated with this diagnostic. * {@code null} if no source object is associated with the * diagnostic. */
S getSource();
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:

getStartPostion() <= getPosition()

getPosition() <= getEndPosition()

Returns:character offset from beginning of source; Diagnostic<S>.NOPOS if getSource() would return null or if no location is suitable
/** * 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: * * <p>{@code getStartPostion() <= getPosition()} * <p>{@code getPosition() <= getEndPosition()} * * @return character offset from beginning of source; {@link * #NOPOS} if {@link #getSource()} would return {@code null} or if * no location is suitable */
long getPosition();
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; Diagnostic<S>.NOPOS if and only if getPosition() returns Diagnostic<S>.NOPOS
/** * Returns the character offset from the beginning of the file * associated with this diagnostic that indicates the start of the * problem. * * @return offset from beginning of file; {@link #NOPOS} if and * only if {@link #getPosition()} returns {@link #NOPOS} */
long getStartPosition();
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; Diagnostic<S>.NOPOS if and only if getPosition() returns Diagnostic<S>.NOPOS
/** * Returns the character offset from the beginning of the file * associated with this diagnostic that indicates the end of the * problem. * * @return offset from beginning of file; {@link #NOPOS} if and * only if {@link #getPosition()} returns {@link #NOPOS} */
long getEndPosition();
Returns the line number of the character offset returned by getPosition().
Returns:a line number or Diagnostic<S>.NOPOS if and only if getPosition() returns Diagnostic<S>.NOPOS
/** * Returns the line number of the character offset returned by * {@linkplain #getPosition()}. * * @return a line number or {@link #NOPOS} if and only if {@link * #getPosition()} returns {@link #NOPOS} */
long getLineNumber();
Returns the column number of the character offset returned by getPosition().
Returns:a column number or Diagnostic<S>.NOPOS if and only if getPosition() returns Diagnostic<S>.NOPOS
/** * Returns the column number of the character offset returned by * {@linkplain #getPosition()}. * * @return a column number or {@link #NOPOS} if and only if {@link * #getPosition()} returns {@link #NOPOS} */
long getColumnNumber();
Returns a diagnostic code indicating the type of diagnostic. The code is implementation-dependent and might be null.
Returns:a diagnostic code
/** * Returns a diagnostic code indicating the type of diagnostic. The * code is implementation-dependent and might be {@code null}. * * @return a diagnostic code */
String getCode();
Returns a localized message for the given locale. The actual message is implementation-dependent. If the locale is null use the default locale.
Params:
  • locale – a locale; might be null
Returns:a localized message
/** * Returns a localized message for the given locale. The actual * message is implementation-dependent. If the locale is {@code * null} use the default locale. * * @param locale a locale; might be {@code null} * @return a localized message */
String getMessage(Locale locale); }