Add test coverage for `--experimental_run_android_lint_on_java_rules` and implement it in Starlark

PiperOrigin-RevId: 440900201
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
index f7b1685..0543e88 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
@@ -386,6 +386,7 @@
     return addTestSupportToCompileTimeDeps;
   }
 
+  @Override
   public boolean runAndroidLint() {
     return runAndroidLint;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java
index ab69217..9989c24 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java
@@ -55,6 +55,12 @@
   String starlarkOneVersionEnforcementLevel();
 
   @StarlarkMethod(
+      name = "run_android_lint",
+      structField = true,
+      doc = "The value of the --experimental_run_android_lint_on_java_rules flag.")
+  boolean runAndroidLint();
+
+  @StarlarkMethod(
       name = "multi_release_deploy_jars",
       structField = true,
       doc = "The value of the --incompatible_multi_release_deploy_jars flag.")
diff --git a/src/main/starlark/builtins_bzl/common/java/android_lint.bzl b/src/main/starlark/builtins_bzl/common/java/android_lint.bzl
index 702808b..551728f 100644
--- a/src/main/starlark/builtins_bzl/common/java/android_lint.bzl
+++ b/src/main/starlark/builtins_bzl/common/java/android_lint.bzl
@@ -45,9 +45,10 @@
     """
 
     # assuming that linting is enabled for all java rules i.e.
-    # --experimental_run_android_lint_on_java_rules=true and
     # --experimental_limit_android_lint_to_android_constrained_java=false
 
+    # --experimental_run_android_lint_on_java_rules= is checked in java_common.bzl
+
     if not (source_files or source_jars):
         return None
 
diff --git a/src/main/starlark/builtins_bzl/common/java/java_common.bzl b/src/main/starlark/builtins_bzl/common/java/java_common.bzl
index d657ae1..2d158c4 100644
--- a/src/main/starlark/builtins_bzl/common/java/java_common.bzl
+++ b/src/main/starlark/builtins_bzl/common/java/java_common.bzl
@@ -147,10 +147,7 @@
         _direct_source_jars = java_info.source_jars,
     )
 
-    # TODO(b/131760365): This is a hack, since the Starlark APIs don't have
-    # an explicit test for "host" or "tool" configuration.
-    if not (ctx.configuration == ctx.host_configuration or
-            ctx.bin_dir.path.find("-exec-") >= 0) and not neverlink:
+    if ctx.fragments.java.run_android_lint:
         generated_source_jars = [
             output.generated_source_jar
             for output in java_info.java_outputs