Replace --experimental_android_enforce_strict_deps_for_binaries_under_test with a package whitelist

PiperOrigin-RevId: 196688645
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 9f193c8..5281e04 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -622,6 +622,7 @@
         "//src/main/java/com/google/devtools/build/lib:util",
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/analysis/platform",
+        "//src/main/java/com/google/devtools/build/lib/analysis/whitelisting",
         "//src/main/java/com/google/devtools/build/lib/buildeventstream",
         "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
index d378373..7e91cdc 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
@@ -15,6 +15,7 @@
 
 import com.google.devtools.build.lib.analysis.RuleDefinition;
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
+import com.google.devtools.build.lib.analysis.whitelisting.Whitelist;
 import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppRuleClasses;
 import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses;
 import com.google.devtools.build.lib.packages.RuleClass;
@@ -66,6 +67,9 @@
         </ul>
         <!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS --> */
         .setImplicitOutputsFunction(AndroidRuleClasses.ANDROID_BINARY_IMPLICIT_OUTPUTS)
+        .add(
+            Whitelist.getAttributeFromWhitelistName("export_deps")
+                .value(environment.getToolsLabel("//tools/android:export_deps_whitelist")))
         .cfg(
             new ConfigFeatureFlagTransitionFactory(AndroidFeatureFlagSetProvider.FEATURE_FLAG_ATTR))
         .addRequiredToolchains(CppRuleClasses.ccToolchainTypeAttribute(environment))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index 0b77069..5ab5c81 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -50,6 +50,7 @@
 import com.google.devtools.build.lib.analysis.actions.SpawnAction;
 import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
+import com.google.devtools.build.lib.analysis.whitelisting.Whitelist;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -117,8 +118,7 @@
         new AndroidCommon(
             javaCommon,
             /* asNeverLink= */ true,
-            /* exportDeps= */ !AndroidCommon.getAndroidConfig(ruleContext)
-                .getEnforceStrictDepsForBinariesUnderTest());
+            /* exportDeps= */ Whitelist.isAvailable(ruleContext, "export_deps"));
     ResourceDependencies resourceDeps =
         ResourceDependencies.fromRuleDeps(ruleContext, /* neverlink= */ false);
     RuleConfiguredTargetBuilder builder =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index 421afdb..9f9b442 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -817,16 +817,6 @@
                 + "when possible. Otherwise, they will all be processed together.")
     public boolean decoupleDataProcessing;
 
-    // TODO(cushon): make this the default, and delete it
-    @Option(
-      name = "experimental_android_enforce_strict_deps_for_binaries_under_test",
-      defaultValue = "false",
-      documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
-      effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
-      help = "If enabled, strict dependencies are enforced for android_test.binary_under_test"
-    )
-    public boolean enforceStrictDepsForBinariesUnderTest;
-
     @Option(
       name = "android_migration_tag_check",
       defaultValue = "false",
@@ -875,7 +865,6 @@
       host.manifestMerger = manifestMerger;
       host.androidAaptVersion = androidAaptVersion;
       host.allowAndroidLibraryDepsWithoutSrcs = allowAndroidLibraryDepsWithoutSrcs;
-      host.enforceStrictDepsForBinariesUnderTest = enforceStrictDepsForBinariesUnderTest;
       host.oneVersionEnforcementUseTransitiveJarsForBinaryUnderTest =
           oneVersionEnforcementUseTransitiveJarsForBinaryUnderTest;
       return host;
@@ -935,7 +924,6 @@
   private final boolean fixedResourceNeverlinking;
   private final AndroidRobolectricTestDeprecationLevel robolectricTestDeprecationLevel;
   private final boolean decoupleDataProcessing;
-  private final boolean enforceStrictDepsForBinariesUnderTest;
   private final boolean checkForMigrationTag;
   private final boolean oneVersionEnforcementUseTransitiveJarsForBinaryUnderTest;
 
@@ -977,7 +965,6 @@
     this.fixedResourceNeverlinking = options.fixedResourceNeverlinking;
     this.robolectricTestDeprecationLevel = options.robolectricTestDeprecationLevel;
     this.decoupleDataProcessing = options.decoupleDataProcessing;
-    this.enforceStrictDepsForBinariesUnderTest = options.enforceStrictDepsForBinariesUnderTest;
     this.checkForMigrationTag = options.checkForMigrationTag;
     this.oneVersionEnforcementUseTransitiveJarsForBinaryUnderTest =
         options.oneVersionEnforcementUseTransitiveJarsForBinaryUnderTest;
@@ -1033,7 +1020,6 @@
       boolean fixedResourceNeverlinking,
       AndroidRobolectricTestDeprecationLevel robolectricTestDeprecationLevel,
       boolean decoupleDataProcessing,
-      boolean enforceStrictDepsForBinariesUnderTest,
       boolean checkForMigrationTag,
       boolean oneVersionEnforcementUseTransitiveJarsForBinaryUnderTest) {
     this.enableAndroidCpuMakeVariable = enableAndroidCpuMakeVariable;
@@ -1070,7 +1056,6 @@
     this.fixedResourceNeverlinking = fixedResourceNeverlinking;
     this.robolectricTestDeprecationLevel = robolectricTestDeprecationLevel;
     this.decoupleDataProcessing = decoupleDataProcessing;
-    this.enforceStrictDepsForBinariesUnderTest = enforceStrictDepsForBinariesUnderTest;
     this.checkForMigrationTag = checkForMigrationTag;
     this.oneVersionEnforcementUseTransitiveJarsForBinaryUnderTest =
         oneVersionEnforcementUseTransitiveJarsForBinaryUnderTest;
@@ -1225,10 +1210,6 @@
     return decoupleDataProcessing;
   }
 
-  public boolean getEnforceStrictDepsForBinariesUnderTest() {
-    return enforceStrictDepsForBinariesUnderTest;
-  }
-
   public boolean checkForMigrationTag() {
     return checkForMigrationTag;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index 27e33db..af2220d 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -153,6 +153,10 @@
         "package_group(name='config_feature_flag', packages=['//...'])");
 
     config.create(
+        "tools/whitelists/config_feature_flag/BUILD",
+        "package_group(name='config_feature_flag', packages=['//...'])");
+
+    config.create(
         "/bazel_tools_workspace/tools/zip/BUILD",
         "package(default_visibility=['//visibility:public'])",
         "exports_files(['precompile.py'])",
@@ -267,6 +271,7 @@
         .add("sh_binary(name = 'jarjar_bin', srcs = ['empty.sh'])")
         .add("sh_binary(name = 'instrumentation_test_check', srcs = ['empty.sh'])")
         .add("package_group(name = 'android_device_whitelist', packages = ['//...'])")
+        .add("package_group(name = 'export_deps_whitelist', packages = ['//...'])")
         .add("android_tools_defaults_jar(name = 'android_jar')");
 
     return androidBuildContents.build();
diff --git a/tools/android/BUILD.tools b/tools/android/BUILD.tools
index d96fbb7..592e6dc 100644
--- a/tools/android/BUILD.tools
+++ b/tools/android/BUILD.tools
@@ -434,3 +434,8 @@
     name = "android_device_whitelist",
     packages = ["//..."],
 )
+
+package_group(
+    name = "export_deps_whitelist",
+    packages = ["//..."],
+)