Desugar all the Android builds!

Also, promote --experimental_desugar_for_android to --desugar_for_android.

Fixes https://github.com/bazelbuild/bazel/issues/2871

RELNOTES: All Android builds now use the desugar tool to support some Java 8 features by default. To disable, use the --nodesugar_for_android flag.
PiperOrigin-RevId: 165606988
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 9d24812..6def707 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
@@ -382,8 +382,9 @@
     // The idea is that once this option works, we'll flip the default value in a config file, then
     // once it is proven that it works, remove it from Bazel and said config file.
     @Option(
-      name = "experimental_desugar_for_android",
-      defaultValue = "false",
+      name = "desugar_for_android",
+      oldName = "experimental_desugar_for_android",
+      defaultValue = "true",
       documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
       effectTags = {OptionEffectTag.UNKNOWN},
       help = "Whether to desugar Java 8 bytecode before dexing."
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
index 200798d..862111a 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
@@ -896,12 +896,13 @@
         actionsTestUtil().artifactClosureOf(getFilesToBuild(b1)), "b1_deploy.jar");
     List<String> b1Inputs = ActionsTestUtil.prettyArtifactNames(b1DeployAction.getInputs());
 
-    assertThat(b1Inputs).containsNoneOf("java/com/google/android/neversayneveragain/libl1.jar",
-        "java/com/google/android/neversayneveragain/libl2.jar",
-        "java/com/google/android/neversayneveragain/libl3.jar",
-        "java/com/google/android/neversayneveragain/libl4.jar");
+    assertThat(b1Inputs).containsNoneOf(
+        "java/com/google/android/neversayneveragain/libl1.jar_desugared.jar",
+        "java/com/google/android/neversayneveragain/libl2.jar_desugared.jar",
+        "java/com/google/android/neversayneveragain/libl3.jar_desugared.jar",
+        "java/com/google/android/neversayneveragain/libl4.jar_desugared.jar");
     assertThat(b1Inputs).contains(
-        "java/com/google/android/neversayneveragain/libb1.jar");
+        "java/com/google/android/neversayneveragain/libb1.jar_desugared.jar");
 
     ConfiguredTarget b2 = getConfiguredTarget("//java/com/google/android/neversayneveragain:b2");
     Action b2DeployAction = actionsTestUtil().getActionForArtifactEndingWith(
@@ -909,23 +910,25 @@
     List<String> b2Inputs = ActionsTestUtil.prettyArtifactNames(b2DeployAction.getInputs());
 
     assertThat(b2Inputs).containsNoneOf(
-        "java/com/google/android/neversayneveragain/libl1.jar",
-        "java/com/google/android/neversayneveragain/libl2.jar",
-        "java/com/google/android/neversayneveragain/libl4.jar");
+        "java/com/google/android/neversayneveragain/libl1.jar_desugared.jar",
+        "java/com/google/android/neversayneveragain/libl2.jar_desugared.jar",
+        "java/com/google/android/neversayneveragain/libl4.jar_desugared.jar");
     assertThat(b2Inputs).containsAllOf(
-        "java/com/google/android/neversayneveragain/libl3.jar",
-        "java/com/google/android/neversayneveragain/libb2.jar");
+        "java/com/google/android/neversayneveragain/_dx/l3/libl3.jar_desugared.jar",
+        "java/com/google/android/neversayneveragain/libb2.jar_desugared.jar");
 
     ConfiguredTarget b3 = getConfiguredTarget("//java/com/google/android/neversayneveragain:b3");
     Action b3DeployAction = actionsTestUtil().getActionForArtifactEndingWith(
         actionsTestUtil().artifactClosureOf(getFilesToBuild(b3)), "b3_deploy.jar");
     List<String> b3Inputs = ActionsTestUtil.prettyArtifactNames(b3DeployAction.getInputs());
 
-    assertThat(b3Inputs).containsAllOf("java/com/google/android/neversayneveragain/libl1.jar",
-        "java/com/google/android/neversayneveragain/libl3.jar",
-        "java/com/google/android/neversayneveragain/libl4.jar",
-        "java/com/google/android/neversayneveragain/libb3.jar");
-    assertThat(b3Inputs).doesNotContain("java/com/google/android/neversayneveragain/libl2.jar");
+    assertThat(b3Inputs).containsAllOf(
+        "java/com/google/android/neversayneveragain/_dx/l1/libl1.jar_desugared.jar",
+        "java/com/google/android/neversayneveragain/_dx/l3/libl3.jar_desugared.jar",
+        "java/com/google/android/neversayneveragain/_dx/l4/libl4.jar_desugared.jar",
+        "java/com/google/android/neversayneveragain/libb3.jar_desugared.jar");
+    assertThat(b3Inputs)
+        .doesNotContain("java/com/google/android/neversayneveragain/libl2.jar_desugared.jar");
   }
 
   @Test
@@ -1732,15 +1735,16 @@
     Action deployJarAction =
         getGeneratingAction(
             getFileConfiguredTarget("//java/r/android:bin_deploy.jar").getArtifact());
-    List<String> inputs = ActionsTestUtil.prettyArtifactNames(deployJarAction.getInputs());
+    List<String> inputs = ActionsTestUtil.baseArtifactNames(deployJarAction.getInputs());
 
     assertThat(inputs)
         .containsAllOf(
-            dir + "libsublib.jar",
-            dir + "liblib.jar",
-            dir + "libbin.jar",
-            dir + "bin_resources.jar");
-    assertThat(inputs).containsNoneOf(dir + "lib_resources.jar", dir + "sublib_resources.jar");
+            "libsublib.jar_desugared.jar",
+            "liblib.jar_desugared.jar",
+            "libbin.jar_desugared.jar",
+            "bin_resources.jar_desugared.jar");
+    assertThat(inputs)
+        .containsNoneOf("lib_resources.jar_desugared.jar", "sublib_resources.jar_desugared.jar");
   }
 
   @Test
@@ -1771,16 +1775,16 @@
     Action deployJarAction =
         getGeneratingAction(
             getFileConfiguredTarget("//java/r/android:bin_deploy.jar").getArtifact());
-    List<String> inputs = ActionsTestUtil.prettyArtifactNames(deployJarAction.getInputs());
+    List<String> inputs = ActionsTestUtil.baseArtifactNames(deployJarAction.getInputs());
 
     assertThat(inputs)
         .containsAllOf(
-            dir + "libsublib.jar",
-            dir + "liblib.jar",
-            dir + "libbin.jar",
-            dir + "bin_resources.jar",
-            dir + "lib_resources.jar",
-            dir + "sublib_resources.jar");
+            "libsublib.jar_desugared.jar",
+            "liblib.jar_desugared.jar",
+            "libbin.jar_desugared.jar",
+            "bin_resources.jar_desugared.jar",
+            "lib_resources.jar_desugared.jar",
+            "sublib_resources.jar_desugared.jar");
   }
 
   @Test
@@ -2089,7 +2093,21 @@
         "    multidex='legacy',",
         "    manifest='AndroidManifest.xml')");
 
-    internalTestDexShardStructure(MultidexMode.LEGACY, false, "");
+    internalTestDexShardStructure(MultidexMode.LEGACY, false, "_desugared.jar");
+  }
+
+  @Test
+  public void testDexShardingNativeStructure_withNoDesugaring() throws Exception {
+    useConfiguration("--noexperimental_desugar_for_android", "--noincremental_dexing");
+    scratch.file("java/a/BUILD",
+        "android_binary(",
+        "    name='a',",
+        "    srcs=['A.java'],",
+        "    dex_shards=2,",
+        "    multidex='native',",
+        "    manifest='AndroidManifest.xml')");
+
+    internalTestDexShardStructure(MultidexMode.NATIVE, false, "");
   }
 
   @Test
@@ -2103,26 +2121,12 @@
         "    multidex='native',",
         "    manifest='AndroidManifest.xml')");
 
-    internalTestDexShardStructure(MultidexMode.NATIVE, false, "");
-  }
-
-  @Test
-  public void testDexShardingNativeStructure_withDesugaring() throws Exception {
-    useConfiguration("--experimental_desugar_for_android", "--noincremental_dexing");
-
-    scratch.file("java/a/BUILD",
-        "android_binary(",
-        "    name='a',",
-        "    srcs=['A.java'],",
-        "    dex_shards=2,",
-        "    multidex='native',",
-        "    manifest='AndroidManifest.xml')");
-
     internalTestDexShardStructure(MultidexMode.NATIVE, false, "_desugared.jar");
   }
 
   @Test
-  public void testDexShardingLegacyAndProguardStructure() throws Exception {
+  public void testDexShardingLegacyAndProguardStructure_withNoDesugaring() throws Exception {
+    useConfiguration("--noexperimental_desugar_for_android");
     scratch.file("java/a/BUILD",
         "android_binary(",
         "    name='a',",
@@ -2136,8 +2140,7 @@
   }
 
   @Test
-  public void testDexShardingLegacyAndProguardStructure_withDesugaring() throws Exception {
-    useConfiguration("--experimental_desugar_for_android");
+  public void testDexShardingLegacyAndProguardStructure() throws Exception {
     scratch.file("java/a/BUILD",
         "android_binary(",
         "    name='a',",