001/* Diagnostic.java --
002   Copyright (C) 2008  Free Software Foundation, Inc.
003
004This file is part of GNU Classpath.
005
006GNU Classpath is free software; you can redistribute it and/or modify
007it under the terms of the GNU General Public License as published by
008the Free Software Foundation; either version 2, or (at your option)
009any later version.
010
011GNU Classpath is distributed in the hope that it will be useful, but
012WITHOUT ANY WARRANTY; without even the implied warranty of
013MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014General Public License for more details.
015
016You should have received a copy of the GNU General Public License
017along with GNU Classpath; see the file COPYING.  If not, write to the
018Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
01902110-1301 USA.
020
021Linking this library statically or dynamically with other modules is
022making a combined work based on this library.  Thus, the terms and
023conditions of the GNU General Public License cover the whole
024combination.
025
026As a special exception, the copyright holders of this library give you
027permission to link this library with independent modules to produce an
028executable, regardless of the license terms of these independent
029modules, and to copy and distribute the resulting executable under
030terms of your choice, provided that you also meet, for each linked
031independent module, the terms and conditions of the license of that
032module.  An independent module is a module which is not derived from
033or based on this library.  If you modify this library, you may extend
034this exception to your version of the library, but you are not
035obligated to do so.  If you do not wish to do so, delete this
036exception statement from your version. */
037
038package javax.tools;
039
040import java.util.Locale;
041
042/**
043 * Encapsulates diagnostic information from a tool. This usually includes
044 * (but is not required) a position in a source file, line and column number
045 * information and a message.
046 *
047 * @author Roman Kennke (roman@kennke.org)
048 *
049 * @param <S> the type of the source object
050 *
051 * @since 1.6
052 */
053public interface Diagnostic<S>
054{
055  /**
056   * The kind of diagnostic information.
057   */
058  public static enum Kind
059  {
060    /**
061     * Indicates and error.
062     */
063    ERROR,
064
065    /**
066     * Indicates a warning.
067     */
068    WARNING,
069
070    /**
071     * Indicates a mandatory warning.
072     */
073    MANDATORY_WARNING,
074
075    /**
076     * Indicates a note.
077     */
078    NOTE,
079
080    /**
081     * Indicates something else.
082     */
083    OTHER
084  }
085
086  /**
087   * Indicates that this diagnostic object doesn't carry position information.
088   */
089  public static final long NOPOS = -1L;
090
091  /**
092   * Returns the kind of this diagnostic object.
093   *
094   * @return the kind of this diagnostic object
095   */
096  Kind getKind();
097
098  /**
099   * Returns the source of this diagnostic object.
100   *
101   * @return the source of this diagnostic object
102   */
103  S getSource();
104
105  /**
106   * Returns the position in the source object. This is a zero based value,
107   * or {@link # NOPOS}, indicating that this doesn't carry position
108   * information.
109   *
110   * @return the position in the source object
111   */
112  long getPosition();
113
114  /**
115   * Returns the start position in the source object. This is a zero based
116   * value, or {@link #NOPOS}, indicating that this doesn't carry position
117   * information.
118   *
119   * @return the start position in the source object
120   */
121  long getStartPosition();
122
123  /*
124  * Returns the end position in the source object. This is a zero based
125  * value, or {@link #NOPOS}, indicating that this doesn't carry position
126  * information.
127  *
128  * @return the end position in the source object
129  */
130  long getEndPosition();
131
132  /**
133   * Returns the line number or {@link #NOPOS}, indicating that this doesn't
134   * carry position information. This is a 1-based value indicating the line
135   * in the source object.
136   *
137   * @return the line number
138   */
139  long getLineNumber();
140
141  /**
142   * Returns the column number or {@link #NOPOS}, indicating that this doesn't
143   * carry position information. This is a 1-based value indicating the column
144   * in the source object.
145   *
146   * @return the column number
147   */
148  long getColumnNumber();
149
150  /**
151   * Return a diagnostic code. This is implementation dependend and might
152   * be <code>null</code>.
153   *
154   * @return a diagnostic code or <code>null</code>
155   */
156  String getCode();
157
158  /**
159   * Returns a localized message. This is implementation dependend. If
160   * <code>locale</code> is <code>null</code> this uses the default locale.
161   *
162   * @param locale the locale, or <code>null</code>
163   *
164   * @return a localized message
165   */
166  String getMessage(Locale locale);
167}