• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 Google Inc.
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 package com.google.doclava;
18 
19 import java.util.Set;
20 import java.util.TreeSet;
21 
22 public class Errors {
23   public static boolean hadError = false;
24   private static boolean warningsAreErrors = false;
25   private static TreeSet<ErrorMessage> allErrors = new TreeSet<ErrorMessage>();
26 
27   public static class ErrorMessage implements Comparable {
28     Error error;
29     SourcePositionInfo pos;
30     String msg;
31 
ErrorMessage(Error e, SourcePositionInfo p, String m)32     ErrorMessage(Error e, SourcePositionInfo p, String m) {
33       error = e;
34       pos = p;
35       msg = m;
36     }
37 
compareTo(Object o)38     public int compareTo(Object o) {
39       ErrorMessage that = (ErrorMessage) o;
40       int r = this.pos.compareTo(that.pos);
41       if (r != 0) return r;
42       return this.msg.compareTo(that.msg);
43     }
44 
45     @Override
toString()46     public String toString() {
47       String whereText = this.pos == null ? "unknown: " : this.pos.toString() + ':';
48       return whereText + this.msg;
49     }
50 
error()51     public Error error() {
52       return error;
53     }
54   }
55 
error(Error error, SourcePositionInfo where, String text)56   public static void error(Error error, SourcePositionInfo where, String text) {
57     if (error.level == HIDDEN) {
58       return;
59     }
60 
61     int level = (!warningsAreErrors && error.level == WARNING) ? WARNING : ERROR;
62     String which = level == WARNING ? " warning " : " error ";
63     String message = which + error.code + ": " + text;
64 
65     if (where == null) {
66       where = new SourcePositionInfo("unknown", 0, 0);
67     }
68 
69     allErrors.add(new ErrorMessage(error, where, message));
70 
71     if (error.level == ERROR || (warningsAreErrors && error.level == WARNING)) {
72       hadError = true;
73     }
74   }
75 
clearErrors()76   public static void clearErrors() {
77     hadError = false;
78     allErrors.clear();
79   }
80 
printErrors()81   public static void printErrors() {
82     printErrors(allErrors);
83   }
84 
printErrors(Set<ErrorMessage> errors)85   public static void printErrors(Set<ErrorMessage> errors) {
86     for (ErrorMessage m : errors) {
87       if (m.error.level == WARNING) {
88         System.err.println(m.toString());
89       }
90     }
91     for (ErrorMessage m : errors) {
92       if (m.error.level == ERROR) {
93         System.err.println(m.toString());
94       }
95     }
96   }
97 
getErrors()98   public static Set<ErrorMessage> getErrors() {
99     return allErrors;
100   }
101 
102   public static int HIDDEN = 0;
103   public static int WARNING = 1;
104   public static int ERROR = 2;
105 
setWarningsAreErrors(boolean val)106   public static void setWarningsAreErrors(boolean val) {
107     warningsAreErrors = val;
108   }
109 
110   public static class Error {
111     public int code;
112     public int level;
113 
Error(int code, int level)114     public Error(int code, int level) {
115       this.code = code;
116       this.level = level;
117     }
118 
toString()119     public String toString() {
120       return "Error #" + this.code;
121     }
122   }
123 
124   // Errors for API verification
125   public static Error PARSE_ERROR = new Error(1, ERROR);
126   public static Error ADDED_PACKAGE = new Error(2, WARNING);
127   public static Error ADDED_CLASS = new Error(3, WARNING);
128   public static Error ADDED_METHOD = new Error(4, WARNING);
129   public static Error ADDED_FIELD = new Error(5, WARNING);
130   public static Error ADDED_INTERFACE = new Error(6, WARNING);
131   public static Error REMOVED_PACKAGE = new Error(7, WARNING);
132   public static Error REMOVED_CLASS = new Error(8, WARNING);
133   public static Error REMOVED_METHOD = new Error(9, WARNING);
134   public static Error REMOVED_FIELD = new Error(10, WARNING);
135   public static Error REMOVED_INTERFACE = new Error(11, WARNING);
136   public static Error CHANGED_STATIC = new Error(12, WARNING);
137   public static Error ADDED_FINAL = new Error(13, WARNING);
138   public static Error CHANGED_TRANSIENT = new Error(14, WARNING);
139   public static Error CHANGED_VOLATILE = new Error(15, WARNING);
140   public static Error CHANGED_TYPE = new Error(16, WARNING);
141   public static Error CHANGED_VALUE = new Error(17, WARNING);
142   public static Error CHANGED_SUPERCLASS = new Error(18, WARNING);
143   public static Error CHANGED_SCOPE = new Error(19, WARNING);
144   public static Error CHANGED_ABSTRACT = new Error(20, WARNING);
145   public static Error CHANGED_THROWS = new Error(21, WARNING);
146   public static Error CHANGED_NATIVE = new Error(22, HIDDEN);
147   public static Error CHANGED_CLASS = new Error(23, WARNING);
148   public static Error CHANGED_DEPRECATED = new Error(24, WARNING);
149   public static Error CHANGED_SYNCHRONIZED = new Error(25, ERROR);
150   public static Error ADDED_FINAL_UNINSTANTIABLE = new Error(26, WARNING);
151   public static Error REMOVED_FINAL = new Error(27, WARNING);
152 
153   // Errors in javadoc generation
154   public static final Error UNRESOLVED_LINK = new Error(101, WARNING);
155   public static final Error BAD_INCLUDE_TAG = new Error(102, WARNING);
156   public static final Error UNKNOWN_TAG = new Error(103, WARNING);
157   public static final Error UNKNOWN_PARAM_TAG_NAME = new Error(104, WARNING);
158   public static final Error UNDOCUMENTED_PARAMETER = new Error(105, HIDDEN);
159   public static final Error BAD_ATTR_TAG = new Error(106, ERROR);
160   public static final Error BAD_INHERITDOC = new Error(107, HIDDEN);
161   public static final Error HIDDEN_LINK = new Error(108, WARNING);
162   public static final Error HIDDEN_CONSTRUCTOR = new Error(109, WARNING);
163   public static final Error UNAVAILABLE_SYMBOL = new Error(110, ERROR);
164   public static final Error HIDDEN_SUPERCLASS = new Error(111, WARNING);
165   public static final Error DEPRECATED = new Error(112, HIDDEN);
166   public static final Error DEPRECATION_MISMATCH = new Error(113, WARNING);
167   public static final Error MISSING_COMMENT = new Error(114, WARNING);
168   public static final Error IO_ERROR = new Error(115, HIDDEN);
169   public static final Error NO_SINCE_DATA = new Error(116, HIDDEN);
170   public static final Error NO_FEDERATION_DATA = new Error(117, WARNING);
171   public static final Error BROKEN_SINCE_FILE = new Error(118, ERROR);
172   public static final Error INVALID_CONTENT_TYPE = new Error(119, ERROR);
173 
174   public static final Error[] ERRORS =
175       {UNRESOLVED_LINK, BAD_INCLUDE_TAG, UNKNOWN_TAG, UNKNOWN_PARAM_TAG_NAME,
176           UNDOCUMENTED_PARAMETER, BAD_ATTR_TAG, BAD_INHERITDOC, HIDDEN_LINK, HIDDEN_CONSTRUCTOR,
177           UNAVAILABLE_SYMBOL, HIDDEN_SUPERCLASS, DEPRECATED, DEPRECATION_MISMATCH, MISSING_COMMENT,
178           IO_ERROR, NO_SINCE_DATA, NO_FEDERATION_DATA, PARSE_ERROR, ADDED_PACKAGE, ADDED_CLASS,
179           ADDED_METHOD, ADDED_FIELD, ADDED_INTERFACE, REMOVED_PACKAGE, REMOVED_CLASS,
180           REMOVED_METHOD, REMOVED_FIELD, REMOVED_INTERFACE, CHANGED_STATIC, ADDED_FINAL,
181           CHANGED_TRANSIENT, CHANGED_VOLATILE, CHANGED_TYPE, CHANGED_VALUE, CHANGED_SUPERCLASS,
182           CHANGED_SCOPE, CHANGED_ABSTRACT, CHANGED_THROWS, CHANGED_NATIVE, CHANGED_CLASS,
183           CHANGED_DEPRECATED, CHANGED_SYNCHRONIZED, ADDED_FINAL_UNINSTANTIABLE, REMOVED_FINAL,
184           BROKEN_SINCE_FILE, INVALID_CONTENT_TYPE};
185 
setErrorLevel(int code, int level)186   public static boolean setErrorLevel(int code, int level) {
187     for (Error e : ERRORS) {
188       if (e.code == code) {
189         e.level = level;
190         return true;
191       }
192     }
193     return false;
194   }
195 }
196