1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
/* * @(#)Diagnostic.java 1.5 06/09/25 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ 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. * * <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é * @author Jonathan Gibbons * @since 1.6 */ public interface Diagnostic<S> { /** * Kinds of diagnostics, for example, error or warning. */ enum Kind { /** * Problem which prevents the tool's normal completion. */ ERROR, /** * 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, 3rd Ed. mandates warnings on certain * unchecked operations and the use of deprecated methods. */ MANDATORY_WARNING, /** * Informative message from the tool. */ NOTE, /** * Diagnostic which does not fit within the other kinds. */ OTHER, } /** * Used to signal that no position is available. */ public final static long NOPOS = -1; /** * Gets the kind of this diagnostic, for example, error or * warning. * @return the kind of this diagnostic */ Kind getKind(); /** * Gets 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(); /** * Gets 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(); /** * Gets 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(); /** * Gets 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(); /** * Gets 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(); /** * Gets 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(); /** * Gets a diagnostic code indicating the type of diagnostic. The * code is implementation-dependent and might be {@code null}. * * @return a diagnostic code */ String getCode(); /** * Gets 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); }