Support disable_lint_checks in java_library PiperOrigin-RevId: 901279874 Change-Id: Icfebb038e6974b6d9dfc091cfd9e88a27de6aa68
diff --git a/java/common/rules/android_lint.bzl b/java/common/rules/android_lint.bzl index 032e06b..7152990 100644 --- a/java/common/rules/android_lint.bzl +++ b/java/common/rules/android_lint.bzl
@@ -22,7 +22,18 @@ opts = reversed(opts_depset.to_list()) return semantics.tokenize_javacopts(opts) -def _android_lint_action(ctx, source_files, source_jars, compilation_info, is_library): +def _flags_from_disable_lint_checks(args, disable_lint_checks): + invalid_ids = [check for check in disable_lint_checks if not _check_id_is_valid(check)] + if invalid_ids: + fail("Found not allowed character in disabled check ID(s) %s" % str(invalid_ids)) + args.add_joined("--disable", disable_lint_checks, join_with = ",") + +# Returns whether the passed Android Lint check ID is valid +def _check_id_is_valid(check): + # We want to prevent whitespace so that extra flags can't be 'injected' into Android Lint + return check.replace(".", "").replace("_", "").isalnum() + +def _android_lint_action(ctx, source_files, source_jars, compilation_info, is_library, disable_lint_checks = []): """ Creates an action that runs Android lint against Java source files. @@ -43,6 +54,7 @@ source files. It should also include generated source jars. compilation_info: (struct) Information about compilation. is_library: (bool) Whether the target is a library. + disable_lint_checks: (list[str]) A list of AndroidLint checks to be skipped. Returns: (None|File) The Android lint output file or None if no source files were @@ -112,6 +124,7 @@ args.add("--lintopts") args.add_all(linter.lint_opts) + _flags_from_disable_lint_checks(args, disable_lint_checks) for package_config in linter.package_config: if package_config.matches(package_config.package_specs, ctx.label):
diff --git a/java/common/rules/impl/basic_java_library_impl.bzl b/java/common/rules/impl/basic_java_library_impl.bzl index affd222..e2e2744 100644 --- a/java/common/rules/impl/basic_java_library_impl.bzl +++ b/java/common/rules/impl/basic_java_library_impl.bzl
@@ -72,7 +72,8 @@ add_opens = [], bootclasspath = None, javabuilder_jvm_flags = None, - is_library = True): + is_library = True, + disable_lint_checks = []): """ Creates actions that compile and lint Java sources, sets up coverage and returns JavaInfo, InstrumentedFilesInfo and output groups. @@ -109,6 +110,7 @@ bootclasspath: (Target) The JDK APIs to compile this library against. javabuilder_jvm_flags: (list[str]) Additional JVM flags to pass to JavaBuilder. is_library: (bool) Whether the target is a library. Primarily for static analysis purposes. + disable_lint_checks: (list[str]) A list of AndroidLint checks to be skipped. Returns: (dict[str, Provider], {files_to_build: list[File], @@ -172,6 +174,7 @@ source_jars + generated_source_jars, compilation_info, is_library, + disable_lint_checks, ) if lint_output: validation_outputs.append(depset([lint_output]))
diff --git a/java/common/rules/impl/bazel_java_library_impl.bzl b/java/common/rules/impl/bazel_java_library_impl.bzl index 5c7fc5c..3ee1deb 100644 --- a/java/common/rules/impl/bazel_java_library_impl.bzl +++ b/java/common/rules/impl/bazel_java_library_impl.bzl
@@ -35,7 +35,8 @@ add_exports = [], add_opens = [], bootclasspath = None, - javabuilder_jvm_flags = None): + javabuilder_jvm_flags = None, + disable_lint_checks = []): """Implements java_library. Use this call when you need to produce a fully fledged java_library from @@ -58,6 +59,7 @@ add_opens: (list[str]) Allow this library to reflectively access the given <module>/<package>. bootclasspath: (Target) The JDK APIs to compile this library against. javabuilder_jvm_flags: (list[str]) Additional JVM flags to pass to JavaBuilder. + disable_lint_checks: (list[str]) A list of AndroidLint checks to be skipped. Returns: (dict[str, provider]) A list containing DefaultInfo, JavaInfo, InstrumentedFilesInfo, OutputGroupsInfo, ProguardSpecProvider providers. @@ -83,6 +85,7 @@ add_opens = add_opens, bootclasspath = bootclasspath, javabuilder_jvm_flags = javabuilder_jvm_flags, + disable_lint_checks = disable_lint_checks, ) target["DefaultInfo"] = construct_defaultinfo(