Add support for reporting an error if android_test.binary_under_test contains incompatible versions of deps

RELNOTES: Add support for reporting an error if android_test.binary_under_test contains incompatible versions of deps
PiperOrigin-RevId: 194857840
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 69f8452..6721304 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
@@ -59,6 +59,7 @@
 import com.google.devtools.build.lib.rules.android.AndroidBinaryMobileInstall.MobileInstallResourceApks;
 import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion;
 import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.MultidexMode;
+import com.google.devtools.build.lib.rules.android.ZipFilterBuilder.CheckHashMismatchMode;
 import com.google.devtools.build.lib.rules.cpp.CppSemantics;
 import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder;
 import com.google.devtools.build.lib.rules.java.JavaCommon;
@@ -1761,7 +1762,7 @@
     Artifact filteredDeployJar =
         ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_TEST_FILTERED_JAR);
     AndroidCommon.createZipFilterAction(
-        ruleContext, deployJar, filterJar, filteredDeployJar, /* checkHashMismatch */ false);
+        ruleContext, deployJar, filterJar, filteredDeployJar, CheckHashMismatchMode.NONE);
     return filteredDeployJar;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index a899108..49dd128 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -43,6 +43,7 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
 import com.google.devtools.build.lib.packages.TriState;
+import com.google.devtools.build.lib.rules.android.ZipFilterBuilder.CheckHashMismatchMode;
 import com.google.devtools.build.lib.rules.cpp.CcLinkParams;
 import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo;
 import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore;
@@ -918,13 +919,13 @@
       Artifact in,
       Artifact filter,
       Artifact out,
-      boolean checkHashMismatch) {
+      CheckHashMismatchMode checkHashMismatch) {
     new ZipFilterBuilder(ruleContext)
         .setInputZip(in)
         .addFilterZips(ImmutableList.of(filter))
         .setOutputZip(out)
         .addFileTypeToFilter(".class")
-        .setCheckHashMismatch(checkHashMismatch)
+        .setCheckHashMismatchMode(checkHashMismatch)
         .addExplicitFilter("R\\.class")
         .addExplicitFilter("R\\$.*\\.class")
         // These files are generated by databinding in both the target and the instrumentation app
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ZipFilterBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ZipFilterBuilder.java
index 37d5718..0368dbf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ZipFilterBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ZipFilterBuilder.java
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.android;
 
+
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.RuleContext;
@@ -33,6 +34,13 @@
     DONT_CHANGE;
   }
 
+  /** Modes of performing content hash checking during zip filtering. */
+  public enum CheckHashMismatchMode {
+    NONE,
+    WARN,
+    ERROR;
+  }
+
   private final RuleContext ruleContext;
   private Artifact inputZip;
   private Artifact outputZip;
@@ -40,7 +48,7 @@
   private final ImmutableSet.Builder<String> filterFileTypesBuilder;
   private final ImmutableSet.Builder<String> explicitFilterBuilder;
   private Compression outputMode = Compression.DONT_CHANGE;
-  private boolean checkHashMismatch = true;
+  private CheckHashMismatchMode checkHashMismatch = CheckHashMismatchMode.WARN;
 
   /** Creates a builder using the configuration of the rule as the action configuration. */
   public ZipFilterBuilder(RuleContext ruleContext) {
@@ -87,8 +95,8 @@
   }
 
   /** Enable checking of hash mismatches for files with the same name. */
-  public ZipFilterBuilder setCheckHashMismatch(boolean enabled) {
-    this.checkHashMismatch = enabled;
+  public ZipFilterBuilder setCheckHashMismatchMode(CheckHashMismatchMode mode) {
+    this.checkHashMismatch = mode;
     return this;
   }
 
@@ -110,8 +118,16 @@
     if (!explicitFilters.isEmpty()) {
       args.addAll("--explicitFilters", VectorArg.join(",").each(explicitFilters));
     }
-    if (!checkHashMismatch) {
-      args.add("--checkHashMismatch").add("IGNORE");
+    switch (checkHashMismatch) {
+      case WARN:
+        args.add("--checkHashMismatch").add("WARN");
+        break;
+      case ERROR:
+        args.add("--checkHashMismatch").add("ERROR");
+        break;
+      case NONE:
+        args.add("--checkHashMismatch").add("IGNORE");
+        break;
     }
     args.add("--outputMode");
     switch (outputMode) {