• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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