001 /* Diagnostic.java --
002 Copyright (C) 2008 Free Software Foundation, Inc.
003
004 This file is part of GNU Classpath.
005
006 GNU Classpath is free software; you can redistribute it and/or modify
007 it under the terms of the GNU General Public License as published by
008 the Free Software Foundation; either version 2, or (at your option)
009 any later version.
010
011 GNU Classpath is distributed in the hope that it will be useful, but
012 WITHOUT ANY WARRANTY; without even the implied warranty of
013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 General Public License for more details.
015
016 You should have received a copy of the GNU General Public License
017 along with GNU Classpath; see the file COPYING. If not, write to the
018 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
019 02110-1301 USA.
020
021 Linking this library statically or dynamically with other modules is
022 making a combined work based on this library. Thus, the terms and
023 conditions of the GNU General Public License cover the whole
024 combination.
025
026 As a special exception, the copyright holders of this library give you
027 permission to link this library with independent modules to produce an
028 executable, regardless of the license terms of these independent
029 modules, and to copy and distribute the resulting executable under
030 terms of your choice, provided that you also meet, for each linked
031 independent module, the terms and conditions of the license of that
032 module. An independent module is a module which is not derived from
033 or based on this library. If you modify this library, you may extend
034 this exception to your version of the library, but you are not
035 obligated to do so. If you do not wish to do so, delete this
036 exception statement from your version. */
037
038 package javax.tools;
039
040 import 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 */
053 public 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 }