summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Hansson <hansson@google.com>2023-10-04 16:13:39 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-10-04 16:13:39 +0000
commitec565d222fb31a4e4dc5d84ff1c5bb9fe6621e9f (patch)
tree89a7e72e62a8cf7f2f4bff3b4d5c220a94cdba36
parentab17cce4a2717d0c8201e73e43fea1bd97d3ebb3 (diff)
parent462a79f857eedba89aee7a5364df55f4ccf759f8 (diff)
downloaddoclava-tmp_amf_298295554.tar.gz
Merge "Make doclava support baselining of lint issues" into main am: 462a79f857tmp_amf_298295554
Original change: https://android-review.googlesource.com/c/platform/external/doclava/+/2768058 Change-Id: Ie9f02c07f33a64df4a35fcb410cebef5e3d7f982 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--src/com/google/doclava/Doclava.java53
-rw-r--r--src/com/google/doclava/Errors.java23
2 files changed, 75 insertions, 1 deletions
diff --git a/src/com/google/doclava/Doclava.java b/src/com/google/doclava/Doclava.java
index dfdc428..5ab2b65 100644
--- a/src/com/google/doclava/Doclava.java
+++ b/src/com/google/doclava/Doclava.java
@@ -16,12 +16,15 @@
package com.google.doclava;
+import static java.util.stream.Collectors.toList;
+
import com.google.clearsilver.jsilver.JSilver;
import com.google.clearsilver.jsilver.data.Data;
import com.google.clearsilver.jsilver.resourceloader.ClassResourceLoader;
import com.google.clearsilver.jsilver.resourceloader.CompositeResourceLoader;
import com.google.clearsilver.jsilver.resourceloader.FileSystemResourceLoader;
import com.google.clearsilver.jsilver.resourceloader.ResourceLoader;
+import com.google.doclava.Errors.ErrorMessage;
import com.google.doclava.javadoc.RootDocImpl;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.Doc;
@@ -60,6 +63,7 @@ import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
+import java.util.function.Function;
import java.util.jar.JarFile;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -175,6 +179,7 @@ public class Doclava implements Doclet {
private static String proguardFile;
private static String proofreadFile;
private static String todoFile;
+ private static String lintBaselineFile;
private static String stubsDir;
private static HashSet<String> stubPackages;
private static HashSet<String> stubImportPackages;
@@ -547,6 +552,21 @@ public class Doclava implements Doclet {
options.add(
new Option() {
+ private final List<String> names = List.of("-lintbaseline");
+ @Override public int getArgumentCount() { return 1; }
+ @Override public String getDescription() { return "Allowed lint errors"; }
+ @Override public Option.Kind getKind() { return Option.Kind.STANDARD; }
+ @Override public List<String> getNames() { return names; }
+ @Override public String getParameters() { return "<file>"; }
+ @Override public boolean process(String opt, List<String> arguments) {
+ lintBaselineFile = arguments.get(0);
+ return true;
+ }
+ }
+ );
+
+ options.add(
+ new Option() {
private final List<String> names = List.of("-error");
@Override public int getArgumentCount() { return 1; }
@Override public String getDescription() { return ""; }
@@ -1564,6 +1584,9 @@ public class Doclava implements Doclet {
if (!readManifest()) {
return false;
}
+ if (!readLintBaselineFile(lintBaselineFile)) {
+ return false;
+ }
// Set up the data structures
Converter.makeInfo(root);
@@ -1815,6 +1838,36 @@ public class Doclava implements Doclet {
return true;
}
+ private static boolean readLintBaselineFile(String lintBaselineFile) {
+ if (lintBaselineFile == null) {
+ return true;
+ }
+
+ Function<String, SourcePositionInfo> mapper = (line) -> {
+ if (line.trim().length() == 0) {
+ return null;
+ }
+ String[] words = line.split(" ");
+ String[] cols = words[0].split(":");
+ if (cols.length != 2) {
+ System.err.println("ignored baseline entry: " + line);
+ return null;
+ }
+ int row = Integer.parseInt(cols[1]);
+ return new SourcePositionInfo(cols[0], row, 0);
+
+ };
+ try (BufferedReader reader = new BufferedReader(new FileReader(lintBaselineFile))) {
+ List<SourcePositionInfo> baseline =
+ reader.lines().map(mapper).filter(line -> line != null).collect(toList());
+ Errors.setLintBaseline(baseline);
+ return true;
+ } catch (IOException exception) {
+ exception.printStackTrace(System.err);
+ return false;
+ }
+ }
+
private static boolean readManifest() {
manifestPermissions.clear();
if (manifestFile == null) {
diff --git a/src/com/google/doclava/Errors.java b/src/com/google/doclava/Errors.java
index 05ac006..2a40716 100644
--- a/src/com/google/doclava/Errors.java
+++ b/src/com/google/doclava/Errors.java
@@ -25,6 +25,7 @@ public class Errors {
public static boolean hadError = false;
private static boolean lintsAreErrors = false;
private static boolean warningsAreErrors = false;
+ private static List<SourcePositionInfo> baseline;
private static TreeSet<ErrorMessage> allErrors = new TreeSet<ErrorMessage>();
public static class ErrorMessage implements Comparable<ErrorMessage> {
@@ -108,7 +109,7 @@ public class Errors {
int resolvedLevel = error.getLevel();
if (resolvedLevel == LINT && lintsAreErrors) {
- resolvedLevel = ERROR;
+ resolvedLevel = isBaselined(where) ? LINT : ERROR;
}
if (resolvedLevel == WARNING && warningsAreErrors) {
resolvedLevel = ERROR;
@@ -174,6 +175,26 @@ public class Errors {
warningsAreErrors = val;
}
+ public static void setLintBaseline(List<SourcePositionInfo> val) {
+ baseline = val;
+ }
+
+ private static boolean isBaselined(SourcePositionInfo errorPosition) {
+ if (baseline == null) {
+ return false;
+ }
+ for (SourcePositionInfo baselinedPosition : baseline) {
+ if (errorPosition.file.endsWith(baselinedPosition.file)) {
+ // The line number information
+ // 1) seems to be wrong, at least for broken link/see tags
+ // 2) will lead to baselines not working when files are edited
+ // So we ignore that information and just allow all lint errors in the file
+ return true;
+ }
+ }
+ return false;
+ }
+
public static class Error {
public int code;