DiagnosticFormatter.java revision 2571:10fc81ac75b4
1/* 2 * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25package com.sun.tools.javac.api; 26 27import java.util.Locale; 28import java.util.Set; 29import javax.tools.Diagnostic; 30import com.sun.tools.javac.api.DiagnosticFormatter.*; 31 32/** 33 * Provides simple functionalities for javac diagnostic formatting. 34 * @param <D> type of diagnostic handled by this formatter 35 * 36 * <p><b>This is NOT part of any supported API. 37 * If you write code that depends on this, you do so at your own risk. 38 * This code and its internal interfaces are subject to change or 39 * deletion without notice.</b> 40 */ 41public interface DiagnosticFormatter<D extends Diagnostic<?>> { 42 43 /** 44 * Whether the source code output for this diagnostic is to be displayed. 45 * 46 * @param diag diagnostic to be formatted 47 * @return true if the source line this diagnostic refers to is to be displayed 48 */ 49 boolean displaySource(D diag); 50 51 /** 52 * Format the contents of a diagnostics. 53 * 54 * @param diag the diagnostic to be formatted 55 * @param l locale object to be used for i18n 56 * @return a string representing the diagnostic 57 */ 58 public String format(D diag, Locale l); 59 60 /** 61 * Controls the way in which a diagnostic message is displayed. 62 * 63 * @param diag diagnostic to be formatted 64 * @param l locale object to be used for i18n 65 * @return string representation of the diagnostic message 66 */ 67 public String formatMessage(D diag,Locale l); 68 69 /** 70 * Controls the way in which a diagnostic kind is displayed. 71 * 72 * @param diag diagnostic to be formatted 73 * @param l locale object to be used for i18n 74 * @return string representation of the diagnostic prefix 75 */ 76 public String formatKind(D diag, Locale l); 77 78 /** 79 * Controls the way in which a diagnostic source is displayed. 80 * 81 * @param diag diagnostic to be formatted 82 * @param l locale object to be used for i18n 83 * @param fullname whether the source fullname should be printed 84 * @return string representation of the diagnostic source 85 */ 86 public String formatSource(D diag, boolean fullname, Locale l); 87 88 /** 89 * Controls the way in which a diagnostic position is displayed. 90 * 91 * @param diag diagnostic to be formatted 92 * @param pk enum constant representing the position kind 93 * @param l locale object to be used for i18n 94 * @return string representation of the diagnostic position 95 */ 96 public String formatPosition(D diag, PositionKind pk, Locale l); 97 //where 98 /** 99 * This enum defines a set of constants for all the kinds of position 100 * that a diagnostic can be asked for. All positions are intended to be 101 * relative to a given diagnostic source. 102 */ 103 public enum PositionKind { 104 /** 105 * Start position 106 */ 107 START, 108 /** 109 * End position 110 */ 111 END, 112 /** 113 * Line number 114 */ 115 LINE, 116 /** 117 * Column number 118 */ 119 COLUMN, 120 /** 121 * Offset position 122 */ 123 OFFSET 124 } 125 126 /** 127 * Get a list of all the enabled verbosity options. 128 * @return verbosity options 129 */ 130 public Configuration getConfiguration(); 131 //where 132 133 /** 134 * This interface provides functionalities for tuning the output of a 135 * diagnostic formatter in multiple ways. 136 */ 137 interface Configuration { 138 /** 139 * Configure the set of diagnostic parts that should be displayed 140 * by the formatter. 141 * @param visibleParts the parts to be set 142 */ 143 public void setVisible(Set<DiagnosticPart> visibleParts); 144 145 /** 146 * Retrieve the set of diagnostic parts that should be displayed 147 * by the formatter. 148 * @return verbosity options 149 */ 150 public Set<DiagnosticPart> getVisible(); 151 152 //where 153 /** 154 * A given diagnostic message can be divided into sub-parts each of which 155 * might/might not be displayed by the formatter, according to the 156 * current configuration settings. 157 */ 158 public enum DiagnosticPart { 159 /** 160 * Short description of the diagnostic - usually one line long. 161 */ 162 SUMMARY, 163 /** 164 * Longer description that provides additional details w.r.t. the ones 165 * in the diagnostic's description. 166 */ 167 DETAILS, 168 /** 169 * Source line the diagnostic refers to (if applicable). 170 */ 171 SOURCE, 172 /** 173 * Subdiagnostics attached to a given multiline diagnostic. 174 */ 175 SUBDIAGNOSTICS, 176 /** 177 * JLS paragraph this diagnostic might refer to (if applicable). 178 */ 179 JLS 180 } 181 182 /** 183 * Set a limit for multiline diagnostics. 184 * Note: Setting a limit has no effect if multiline diagnostics are either 185 * fully enabled or disabled. 186 * 187 * @param limit the kind of limit to be set 188 * @param value the limit value 189 */ 190 public void setMultilineLimit(MultilineLimit limit, int value); 191 192 /** 193 * Get a multiline diagnostic limit. 194 * 195 * @param limit the kind of limit to be retrieved 196 * @return limit value or -1 if no limit is set 197 */ 198 public int getMultilineLimit(MultilineLimit limit); 199 //where 200 /** 201 * A multiline limit control the verbosity of multiline diagnostics 202 * either by setting a maximum depth of nested multidiagnostics, 203 * or by limiting the amount of subdiagnostics attached to a given 204 * diagnostic (or both). 205 */ 206 public enum MultilineLimit { 207 /** 208 * Controls the maximum depth of nested multiline diagnostics. 209 */ 210 DEPTH, 211 /** 212 * Controls the maximum amount of subdiagnostics that are part of a 213 * given multiline diagnostic. 214 */ 215 LENGTH 216 } 217 } 218} 219