aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/java_tools
diff options
context:
space:
mode:
authorGravatar cnsun <cnsun@google.com>2018-04-27 14:26:10 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-27 14:27:18 -0700
commite551f0de710ad4bc3ff6805e51f4ef1594044061 (patch)
treec65fc1a4aab2686933d9a4ff8c344a9d37a414a7 /src/java_tools
parent88bf978d53fbd18bd135c83aaea2abc51ec5eb07 (diff)
Add a silence mode to the deps checker. Now the checker can be used to dump
jdeps proto without emitting any warning or error. RELNOTES: none. PiperOrigin-RevId: 194593178
Diffstat (limited to 'src/java_tools')
-rw-r--r--src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps/Main.java50
-rw-r--r--src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/BUILD29
-rw-r--r--src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ImportDepsCheckerTest.java1
-rw-r--r--src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/MainTest.java9
-rw-r--r--src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/tests.bzl4
5 files changed, 78 insertions, 15 deletions
diff --git a/src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps/Main.java b/src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps/Main.java
index 5df2eaa04d..3726caed30 100644
--- a/src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps/Main.java
+++ b/src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps/Main.java
@@ -21,6 +21,7 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.view.proto.Deps.Dependencies;
import com.google.devtools.common.options.Converter;
+import com.google.devtools.common.options.EnumConverter;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionDocumentationCategory;
import com.google.devtools.common.options.OptionEffectTag;
@@ -116,14 +117,26 @@ public class Main {
help = "The rule label of the current target under analysis.")
public String ruleLabel;
+ // TODO (cnsun): remove this flag.
@Option(
name = "fail_on_errors",
- defaultValue = "true",
+ defaultValue = "false",
documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
effectTags = {OptionEffectTag.UNKNOWN},
+ deprecationWarning = "This will be replaced with --checking_mode.",
help = "Fail on incomplete dependencies, otherwise emit warnings."
)
public boolean failOnErrors;
+
+ @Option(
+ name = "checking_mode",
+ defaultValue = "null",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ converter = CheckingModeConverter.class,
+ help = "Controls the behavior of the checker."
+ )
+ public CheckingMode checkingMode;
}
/** A randomly picked large exit code to avoid collision with other common exit codes. */
@@ -147,10 +160,10 @@ public class Main {
ImmutableList.copyOf(options.bootclasspath),
ImmutableList.copyOf(options.classpath),
ImmutableList.copyOf(options.inputJars))) {
- if (!checker.check()) {
+ if (!checker.check() && options.checkingMode != CheckingMode.SILENCE) {
String result = checker.computeResultOutput();
checkState(!result.isEmpty(), "The result should NOT be empty.");
- exitCode = options.failOnErrors ? DEPS_ERROR_EXIT_CODE : 0;
+ exitCode = options.checkingMode == CheckingMode.ERROR ? DEPS_ERROR_EXIT_CODE : 0;
printErrorMessage(result, options);
asCharSink(options.output, StandardCharsets.UTF_8).write(result);
}
@@ -166,7 +179,9 @@ public class Main {
}
private static void printErrorMessage(String detailedErrorMessage, Options options) {
- System.err.print(options.failOnErrors ? "ERROR" : "WARNING");
+ checkArgument(
+ options.checkingMode == CheckingMode.ERROR || options.checkingMode == CheckingMode.WARNING);
+ System.err.print(options.checkingMode == CheckingMode.ERROR ? "ERROR" : "WARNING");
System.err.printf(
": The dependencies for the following %d jar(s) are not complete.\n",
options.inputJars.size());
@@ -194,6 +209,11 @@ public class Main {
options.jdepsOutput == null || !Files.isDirectory(options.jdepsOutput),
"Invalid value of --jdeps_output: '%s'",
options.jdepsOutput);
+ if (options.checkingMode == null) {
+ // Convert --fail_on_errors to --checking_mode
+ options.checkingMode = options.failOnErrors ? CheckingMode.ERROR : CheckingMode.WARNING;
+ }
+
return options;
}
@@ -239,4 +259,26 @@ public class Main {
super(true);
}
}
+
+ /** Converter for {@link CheckingMode} */
+ public static class CheckingModeConverter extends EnumConverter<CheckingMode> {
+ public CheckingModeConverter() {
+ super(CheckingMode.class, "The checking mode for the dependency checker.");
+ }
+ }
+
+ /**
+ * The checking mode of the dependency checker.
+ */
+ public enum CheckingMode {
+ /** Emit 'errors' on missing or incomplete dependencies. */
+ ERROR,
+ /** Emit 'warnings' on missing or incomplete dependencies. */
+ WARNING,
+ /**
+ * Emit 'nothing' on missing or incomplete dependencies. This is mainly used to dump jdeps
+ * protos.
+ */
+ SILENCE
+ }
}
diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/BUILD b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/BUILD
index a874588626..629647b143 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/BUILD
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/BUILD
@@ -131,8 +131,8 @@ create_golden_test(
create_golden_test(
name = "warn_on_bootclasspath_missing_golden_test",
+ checking_mode = "warning",
expect_errors = False,
- fail_on_errors = False,
golden_output_file = "golden_bootclasspath_missing.txt",
golden_stderr_file = "golden_bootclasspath_missing.stderr.warningtxt",
has_bootclasspath = False,
@@ -143,9 +143,22 @@ create_golden_test(
)
create_golden_test(
+ name = "silent_on_bootclasspath_missing_golden_test",
+ checking_mode = "silence",
+ expect_errors = False,
+ golden_output_file = "golden_complete_classpath.txt",
+ golden_stderr_file = "golden_complete_classpath.stderr.txt",
+ has_bootclasspath = False,
+ import_deps_checker = "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker",
+ missing_jar = None,
+ rt_jar = "@local_jdk//:jre/lib/rt.jar",
+ testdata_pkg = "//src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/testdata",
+)
+
+create_golden_test(
name = "library_exception_missing_golden_test",
+ checking_mode = "error",
expect_errors = True,
- fail_on_errors = True,
golden_output_file = "golden_library_exception_missing.txt",
golden_stderr_file = "golden_library_exception_missing.stderr.txt",
has_bootclasspath = True,
@@ -157,8 +170,8 @@ create_golden_test(
create_golden_test(
name = "library_annotation_missing_golden_test",
+ checking_mode = "error",
expect_errors = True,
- fail_on_errors = True,
golden_output_file = "golden_library_annotation_missing.txt",
golden_stderr_file = "golden_library_annotation_missing.stderr.txt",
has_bootclasspath = True,
@@ -170,8 +183,8 @@ create_golden_test(
create_golden_test(
name = "library_missing_golden_test",
+ checking_mode = "error",
expect_errors = True,
- fail_on_errors = True,
golden_output_file = "golden_library_missing.txt",
golden_stderr_file = "golden_library_missing.stderr.txt",
has_bootclasspath = True,
@@ -183,8 +196,8 @@ create_golden_test(
create_golden_test(
name = "library_interface_missing_golden_test",
+ checking_mode = "error",
expect_errors = True,
- fail_on_errors = True,
golden_output_file = "golden_library_interface_missing.txt",
golden_stderr_file = "golden_library_interface_missing.stderr.txt",
has_bootclasspath = True,
@@ -196,8 +209,8 @@ create_golden_test(
create_golden_test(
name = "library_members_missing_golden_test",
+ checking_mode = "error",
expect_errors = True,
- fail_on_errors = True,
golden_output_file = "golden_library_members_missing.txt",
golden_stderr_file = "golden_library_members_missing.stderr.txt",
has_bootclasspath = True,
@@ -210,8 +223,8 @@ create_golden_test(
create_golden_test(
name = "complete_classpath_golden_test",
+ checking_mode = "error",
expect_errors = False,
- fail_on_errors = True,
golden_output_file = "golden_complete_classpath.txt",
golden_stderr_file = "golden_complete_classpath.stderr.txt",
has_bootclasspath = True,
@@ -246,7 +259,7 @@ sh_test(
"$(location golden_string_annotation_value_test.stderr.txt)",
"199",
"$(location //third_party/bazel/src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker)",
- "--fail_on_errors",
+ "--checking_mode=error",
"--bootclasspath_entry",
"$(location :libempty.jar)",
"--classpath_entry",
diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ImportDepsCheckerTest.java b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ImportDepsCheckerTest.java
index 8d92a8fe19..a42b860623 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ImportDepsCheckerTest.java
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ImportDepsCheckerTest.java
@@ -134,6 +134,7 @@ public class ImportDepsCheckerTest extends AbstractClassCacheTest {
args.add("--output");
args.add(Files.createTempFile("temp_output", ".txt").toString());
+ args.add("--checking_mode=silence");
Main.checkDeps(args.toArray(new String[0]));
try (InputStream inputStream = Files.newInputStream(jdepsFile)) {
diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/MainTest.java b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/MainTest.java
index e5bcb446e1..2bd7dc5411 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/MainTest.java
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/MainTest.java
@@ -38,7 +38,14 @@ public final class MainTest {
IllegalArgumentException.class,
() ->
Main.parseCommandLineOptions(
- new String[] {"--classpath_entry", lib.toString(), "--input", in.toString()}));
+ new String[] {
+ "--bootclasspath_entry",
+ lib.toString(),
+ "--classpath_entry",
+ lib.toString(),
+ "--input",
+ in.toString()
+ }));
assertThat(thrown).hasMessageThat().contains("--output");
}
}
diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/tests.bzl b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/tests.bzl
index 1d045fc52a..a777bcfc66 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/tests.bzl
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/tests.bzl
@@ -13,7 +13,7 @@
# limitations under the License.
'''Helpers to create golden tests, to minimize code duplication.'''
-def create_golden_test(name, golden_output_file, golden_stderr_file, expect_errors, fail_on_errors,
+def create_golden_test(name, golden_output_file, golden_stderr_file, expect_errors, checking_mode,
has_bootclasspath, testdata_pkg, import_deps_checker, rt_jar,
missing_jar = None, replacing_jar = None):
'''Create a golden test for the dependency checker.'''
@@ -40,7 +40,7 @@ def create_golden_test(name, golden_output_file, golden_stderr_file, expect_erro
# The exit code 199 means the checker emits errors on dependency issues.
"199" if expect_errors else "0",
"$(location %s)" % import_deps_checker,
- "--fail_on_errors" if fail_on_errors else "--nofail_on_errors"
+ "--checking_mode=%s" % checking_mode,
]
args.append("--bootclasspath_entry")
if has_bootclasspath: