1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 import java.util.SortedSet; 18 import java.util.TreeSet; 19 20 public class Errors 21 { 22 public static boolean hadError = false; 23 private static boolean warningsAreErrors = false; 24 private static TreeSet<Message> allErrors = new TreeSet<Message>(); 25 26 private static class Message implements Comparable { 27 SourcePositionInfo pos; 28 int level; 29 String msg; 30 Message(SourcePositionInfo p, int l, String m)31 Message(SourcePositionInfo p, int l, String m) { 32 pos = p; 33 level = l; 34 msg = m; 35 } 36 compareTo(Object o)37 public int compareTo(Object o) { 38 Message that = (Message)o; 39 int r = this.pos.compareTo(that.pos); 40 if (r != 0) return r; 41 return this.msg.compareTo(that.msg); 42 } 43 44 @Override toString()45 public String toString() { 46 String whereText = this.pos == null ? "unknown: " : this.pos.toString() + ':'; 47 return whereText + this.msg; 48 } 49 } 50 error(Error error, SourcePositionInfo where, String text)51 public static void error(Error error, SourcePositionInfo where, String text) { 52 if (error.level == HIDDEN) { 53 return; 54 } 55 56 int level = (!warningsAreErrors && error.level == WARNING) ? WARNING : ERROR; 57 String which = level == WARNING ? " warning " : " error "; 58 String message = which + error.code + ": " + text; 59 60 if (where == null) { 61 where = new SourcePositionInfo("unknown", 0, 0); 62 } 63 64 allErrors.add(new Message(where, level, message)); 65 66 if (error.level == ERROR || (warningsAreErrors && error.level == WARNING)) { 67 hadError = true; 68 } 69 } 70 printErrors()71 public static void printErrors() { 72 for (Message m: allErrors) { 73 if (m.level == WARNING) { 74 System.err.println(m.toString()); 75 } 76 } 77 for (Message m: allErrors) { 78 if (m.level == ERROR) { 79 System.err.println(m.toString()); 80 } 81 } 82 } 83 84 public static int HIDDEN = 0; 85 public static int WARNING = 1; 86 public static int ERROR = 2; 87 setWarningsAreErrors(boolean val)88 public static void setWarningsAreErrors(boolean val) { 89 warningsAreErrors = val; 90 } 91 92 public static class Error { 93 public int code; 94 public int level; 95 Error(int code, int level)96 public Error(int code, int level) 97 { 98 this.code = code; 99 this.level = level; 100 } 101 } 102 103 public static Error UNRESOLVED_LINK = new Error(1, WARNING); 104 public static Error BAD_INCLUDE_TAG = new Error(2, WARNING); 105 public static Error UNKNOWN_TAG = new Error(3, WARNING); 106 public static Error UNKNOWN_PARAM_TAG_NAME = new Error(4, WARNING); 107 public static Error UNDOCUMENTED_PARAMETER = new Error(5, HIDDEN); 108 public static Error BAD_ATTR_TAG = new Error(6, ERROR); 109 public static Error BAD_INHERITDOC = new Error(7, HIDDEN); 110 public static Error HIDDEN_LINK = new Error(8, WARNING); 111 public static Error HIDDEN_CONSTRUCTOR = new Error(9, WARNING); 112 public static Error UNAVAILABLE_SYMBOL = new Error(10, ERROR); 113 public static Error HIDDEN_SUPERCLASS = new Error(11, WARNING); 114 public static Error DEPRECATED = new Error(12, HIDDEN); 115 public static Error DEPRECATION_MISMATCH = new Error(13, WARNING); 116 public static Error MISSING_COMMENT = new Error(14, WARNING); 117 public static Error IO_ERROR = new Error(15, HIDDEN); 118 public static Error NO_SINCE_DATA = new Error(16, HIDDEN); 119 120 public static Error[] ERRORS = { 121 UNRESOLVED_LINK, 122 BAD_INCLUDE_TAG, 123 UNKNOWN_TAG, 124 UNKNOWN_PARAM_TAG_NAME, 125 UNDOCUMENTED_PARAMETER, 126 BAD_ATTR_TAG, 127 BAD_INHERITDOC, 128 HIDDEN_LINK, 129 HIDDEN_CONSTRUCTOR, 130 UNAVAILABLE_SYMBOL, 131 HIDDEN_SUPERCLASS, 132 DEPRECATED, 133 DEPRECATION_MISMATCH, 134 MISSING_COMMENT, 135 IO_ERROR, 136 NO_SINCE_DATA, 137 }; 138 setErrorLevel(int code, int level)139 public static boolean setErrorLevel(int code, int level) { 140 for (Error e: ERRORS) { 141 if (e.code == code) { 142 e.level = level; 143 return true; 144 } 145 } 146 return false; 147 } 148 } 149