Fail loudly when there's an error parsing an API XML file.
We were previously using the same error code for a missing
version on a member (shouldn't be fatal) and a broken XML file
(should be fatal).
This makes the broken XML case fatal, and includes the reason
why.
Change-Id: Ia65d07544b8cb8ac95896cd451930ed37d69ee57
diff --git a/src/com/google/doclava/Errors.java b/src/com/google/doclava/Errors.java
index 15921d2..ddcfafb 100644
--- a/src/com/google/doclava/Errors.java
+++ b/src/com/google/doclava/Errors.java
@@ -166,6 +166,7 @@
public static final Error IO_ERROR = new Error(115, HIDDEN);
public static final Error NO_SINCE_DATA = new Error(116, HIDDEN);
public static final Error NO_FEDERATION_DATA = new Error(117, WARNING);
+ public static final Error BROKEN_SINCE_FILE = new Error(118, ERROR);
public static final Error[] ERRORS =
{UNRESOLVED_LINK, BAD_INCLUDE_TAG, UNKNOWN_TAG, UNKNOWN_PARAM_TAG_NAME,
@@ -176,7 +177,7 @@
REMOVED_METHOD, REMOVED_FIELD, REMOVED_INTERFACE, CHANGED_STATIC, CHANGED_FINAL,
CHANGED_TRANSIENT, CHANGED_VOLATILE, CHANGED_TYPE, CHANGED_VALUE, CHANGED_SUPERCLASS,
CHANGED_SCOPE, CHANGED_ABSTRACT, CHANGED_THROWS, CHANGED_NATIVE, CHANGED_CLASS,
- CHANGED_DEPRECATED, CHANGED_SYNCHRONIZED};
+ CHANGED_DEPRECATED, CHANGED_SYNCHRONIZED, BROKEN_SINCE_FILE};
public static boolean setErrorLevel(int code, int level) {
for (Error e : ERRORS) {
diff --git a/src/com/google/doclava/SinceTagger.java b/src/com/google/doclava/SinceTagger.java
index 4832499..e324e95 100644
--- a/src/com/google/doclava/SinceTagger.java
+++ b/src/com/google/doclava/SinceTagger.java
@@ -20,11 +20,11 @@
import com.google.doclava.apicheck.ApiCheck;
import com.google.doclava.apicheck.ApiInfo;
import com.google.doclava.apicheck.ApiParseException;
-
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -64,7 +64,10 @@
try {
specApi = new ApiCheck().parseApi(xmlFile);
} catch (ApiParseException e) {
- Errors.error(Errors.NO_SINCE_DATA, null, "Could not add since data for " + versionName);
+ StringWriter stackTraceWriter = new StringWriter();
+ e.printStackTrace(new PrintWriter(stackTraceWriter));
+ Errors.error(Errors.BROKEN_SINCE_FILE, null, "Failed to parse " + xmlFile
+ + " for " + versionName + " since data.\n" + stackTraceWriter.toString());
continue;
}