diff --git a/rules/attrs.bzl b/rules/attrs.bzl index 1945a4e..3e84256 100644 --- a/rules/attrs.bzl +++ b/rules/attrs.bzl @@ -77,5 +77,8 @@ ATTRS = dict( default = [], doc = "Custom lint rules to run.", ), + _javabase = attr.label( + default = "@bazel_tools//tools/jdk:current_java_runtime", + ), _use_auto_exec_groups = attr.bool(default = True), ) diff --git a/rules/impl.bzl b/rules/impl.bzl index b2d9289..691f43f 100644 --- a/rules/impl.bzl +++ b/rules/impl.bzl @@ -5,10 +5,7 @@ load( "@rules_android//providers:providers.bzl", "AndroidLibraryResourceClassJarProvider", ) -load( - "@rules_java//java:defs.bzl", - "JavaInfo", -) +load("@rules_java//java:defs.bzl", "JavaInfo", "java_common") load( ":collect_aar_outputs_aspect.bzl", _AndroidLintAARInfo = "AndroidLintAARInfo", @@ -45,7 +42,9 @@ def _run_android_lint( autofix, regenerate, android_lint_enable_check_dependencies, - android_lint_skip_bytecode_verifier): + android_lint_skip_bytecode_verifier, + android_lint_toolchain, + java_runtime_info): """Constructs the Android Lint actions Args: @@ -71,6 +70,8 @@ def _run_android_lint( regenerate: Whether to regenerate the baseline files android_lint_enable_check_dependencies: Enables dependency checking during analysis android_lint_skip_bytecode_verifier: Disables bytecode verification + android_lint_toolchain: The android lint toolchain + java_runtime_info: The java runtime toolchain info """ inputs = [] outputs = [output] @@ -135,9 +136,12 @@ def _run_android_lint( args.add("--output", output) outputs.append(output) - toolchain = _utils.get_android_lint_toolchain(ctx) - if toolchain.android_home != None: - args.add("--android-home", toolchain.android_home.label.workspace_root) + if android_lint_toolchain.android_home != None: + args.add("--android-home", android_lint_toolchain.android_home.label.workspace_root) + + if java_runtime_info: + args.add("--jdk-home", java_runtime_info.java_home) + inputs.extend(java_runtime_info.files.to_list()) ctx.actions.run( mnemonic = "AndroidLint", @@ -248,6 +252,8 @@ def process_android_lint_issues(ctx, regenerate): regenerate = regenerate, android_lint_enable_check_dependencies = _utils.get_android_lint_toolchain(ctx).android_lint_enable_check_dependencies, android_lint_skip_bytecode_verifier = _utils.get_android_lint_toolchain(ctx).android_lint_skip_bytecode_verifier, + android_lint_toolchain = _utils.get_android_lint_toolchain(ctx), + java_runtime_info = ctx.attr._javabase[java_common.JavaRuntimeInfo], ) return struct( diff --git a/src/cli/AndroidLintActionArgs.kt b/src/cli/AndroidLintActionArgs.kt index f71e9e2..574f1bc 100644 --- a/src/cli/AndroidLintActionArgs.kt +++ b/src/cli/AndroidLintActionArgs.kt @@ -35,6 +35,13 @@ internal class AndroidLintActionArgs( help = "The relative location of Android home", ).default { null } + val jdkHome: Path? by parser + .storing( + names = arrayOf("--jdk-home"), + help = "The relative location of JDK home", + transform = argsParserPathTransformer, + ).default { null } + val srcs: List by parser.adding( names = arrayOf("--src"), help = "", diff --git a/src/cli/AndroidLintRunner.kt b/src/cli/AndroidLintRunner.kt index e0d992f..eff01ea 100644 --- a/src/cli/AndroidLintRunner.kt +++ b/src/cli/AndroidLintRunner.kt @@ -129,6 +129,12 @@ internal class AndroidLintRunner { args.add(androidHomePath) } + if (actionArgs.jdkHome != null) { + val jdkHome = actionArgs.jdkHome!! + args.add("--jdk-home") + args.add(jdkHome.absolutePathString()) + } + invoker.setCheckDependencies(actionArgs.enableCheckDependencies) return invoker.invoke(args.toTypedArray()) }