Fix incorrect assumption of desugar persistent worker conditional

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

Needs to be cherry-picked into 3.3.0.

Closes #11620.

PiperOrigin-RevId: 318428300
diff --git a/WORKSPACE b/WORKSPACE
index 43991c2..1359f00 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -156,7 +156,7 @@
         "1.25.0.zip",
         # rules_nodejs
         "rules_nodejs-1.3.0.tar.gz",
-        "android_tools_pkg-0.17.0.tar.gz",
+        "android_tools_pkg-0.19.0rc1.tar.gz",
         # bazelbuild/bazel-skylib
         "2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz",
         # bazelbuild/platforms
@@ -193,7 +193,7 @@
         "1.25.0.zip": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
         # rules_nodejs
         "rules_nodejs-1.3.0.tar.gz": "b6670f9f43faa66e3009488bbd909bc7bc46a5a9661a33f6bc578068d1837f37",
-        "android_tools_pkg-0.17.0.tar.gz": "8d0bf8ab83c9e38ec6ed5ce7bf425dbdc6469cec9e078559d4e8da42b705410f",
+        "android_tools_pkg-0.19.0rc1.tar.gz": "761e997a9055fe5e2b70aba8d64e78d4c2113feafaa8ac81909cb63e403f3087",
         # bazelbuild/bazel-skylib
         "2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz": "c00ceec469dbcf7929972e3c79f20c14033824538038a554952f5c31d8832f96",
         # bazelbuild/platforms
@@ -246,8 +246,8 @@
             "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/1.3.0/rules_nodejs-1.3.0.tar.gz",
             "https://github.com/bazelbuild/rules_nodejs/releases/download/1.3.0/rules_nodejs-1.3.0.tar.gz",
         ],
-        "android_tools_pkg-0.17.0.tar.gz": [
-            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.17.0.tar.gz",
+        "android_tools_pkg-0.19.0rc1.tar.gz": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.19.0rc1.tar.gz",
         ],
         # bazelbuild/bazel-skylib
         "2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz": [
@@ -525,7 +525,7 @@
         "zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz",
         "zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz",
         "zulu11.37.17-ca-jdk11.0.6-win_x64.zip",
-        "android_tools_pkg-0.17.0.tar.gz",
+        "android_tools_pkg-0.19.0rc1.tar.gz",
         # bazelbuild/bazel-skylib
         "2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz",
         # bazelbuild/platforms
@@ -555,7 +555,7 @@
         "zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
         "zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
         "zulu11.37.17-ca-jdk11.0.6-win_x64.zip": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
-        "android_tools_pkg-0.17.0.tar.gz": "8d0bf8ab83c9e38ec6ed5ce7bf425dbdc6469cec9e078559d4e8da42b705410f",
+        "android_tools_pkg-0.19.0rc1.tar.gz": "761e997a9055fe5e2b70aba8d64e78d4c2113feafaa8ac81909cb63e403f3087",
         # bazelbuild/bazel-skylib
         "2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz": "c00ceec469dbcf7929972e3c79f20c14033824538038a554952f5c31d8832f96",
         # bazelbuild/platforms
@@ -584,8 +584,8 @@
         "zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz": ["https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"],
         "zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz": ["https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"],
         "zulu11.37.17-ca-jdk11.0.6-win_x64.zip": ["https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"],
-        "android_tools_pkg-0.17.0.tar.gz": [
-            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.17.0.tar.gz",
+        "android_tools_pkg-0.19.0rc1.tar.gz": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.19.0rc1.tar.gz",
         ],
         # bazelbuild/bazel-skylib
         "2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz": [
@@ -714,8 +714,8 @@
     name = "android_tools_for_testing",
     patch_cmds = EXPORT_WORKSPACE_IN_BUILD_FILE,
     patch_cmds_win = EXPORT_WORKSPACE_IN_BUILD_FILE_WIN,
-    sha256 = "8d0bf8ab83c9e38ec6ed5ce7bf425dbdc6469cec9e078559d4e8da42b705410f", # DO_NOT_REMOVE_THIS_ANDROID_TOOLS_UPDATE_MARKER
-    url = "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.17.0.tar.gz",
+    sha256 = "761e997a9055fe5e2b70aba8d64e78d4c2113feafaa8ac81909cb63e403f3087", # DO_NOT_REMOVE_THIS_ANDROID_TOOLS_UPDATE_MARKER
+    url = "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.19.0rc1.tar.gz",
 )
 
 # This must be kept in sync with src/main/java/com/google/devtools/build/lib/bazel/rules/coverage.WORKSPACE.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_remote_tools.WORKSPACE b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_remote_tools.WORKSPACE
index ea11b2a..623cdc5 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_remote_tools.WORKSPACE
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_remote_tools.WORKSPACE
@@ -3,6 +3,6 @@
 # This must be kept in sync with the top-level WORKSPACE file.
 http_archive(
     name = "android_tools",
-    sha256 = "8d0bf8ab83c9e38ec6ed5ce7bf425dbdc6469cec9e078559d4e8da42b705410f",
-    url = "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.17.0.tar.gz",
+    sha256 = "761e997a9055fe5e2b70aba8d64e78d4c2113feafaa8ac81909cb63e403f3087",
+    url = "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.19.0rc1.tar.gz",
 )
diff --git a/src/test/shell/bazel/android/desugarer_integration_test.sh b/src/test/shell/bazel/android/desugarer_integration_test.sh
index 81b27aa..2a9f5e1 100755
--- a/src/test/shell/bazel/android/desugarer_integration_test.sh
+++ b/src/test/shell/bazel/android/desugarer_integration_test.sh
@@ -75,6 +75,9 @@
   cat > java/bazel/MainActivity.java <<EOF
 package bazel;
 import android.app.Activity;
+import java.util.stream.Stream;
+import java.util.Arrays;
+
 public class MainActivity extends Activity {
   interface A {
     int foo(int x, int y);
@@ -83,6 +86,21 @@
   A bar() {
     return (a, b) -> a * b;
   }
+
+  int someHashcode() {
+    // JDK 8 language feature depending on primitives desugar
+    return java.lang.Long.hashCode(42L);
+  }
+
+  int getSumOfInts() {
+    // JDK 8 language feature depending on streams desugar
+    return Arrays
+      .asList("x1", "x2", "x3")
+      .stream()
+      .map(s -> s.substring(1))
+      .mapToInt(Integer::parseInt)
+      .sum();
+  }
 }
 EOF
 }
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/BUILD b/src/tools/android/java/com/google/devtools/build/android/desugar/BUILD
index 144d4b6..f0d45b8 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/BUILD
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/BUILD
@@ -35,6 +35,7 @@
     ],
     runtime_deps = [
         "//src/tools/android/java/com/google/devtools/build/android/desugar/dependencies",
+        "//src/tools/android/java/com/google/devtools/build/android/desugar/runtime:primitives",
         "//src/tools/android/java/com/google/devtools/build/android/desugar/runtime:string_concats",
         "//src/tools/android/java/com/google/devtools/build/android/desugar/runtime:throwable_extension",
     ],
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
index 26f1705..cf45226 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
@@ -943,9 +943,15 @@
   public static void main(String[] args) throws Exception {
     verifyLambdaDumpDirectoryRegistered(DUMP_DIRECTORY);
 
-    if (args.length == 1 && "--persistent_worker".equals(args[0])) {
+    // In persistent worker mode, Bazel sends the list of arguments
+    // both over argv to the Java process, and over stdin as a serialized
+    // proto. We check that it's running in the persistent worker mode
+    // by checking the first arg of the list, and parse it into DesugarOptions
+    // from the proto in runPersistentWorker later.
+    if (args.length > 0 && "--persistent_worker".equals(args[0])) {
       runPersistentWorker(DUMP_DIRECTORY);
     } else {
+      // If not, parse it regularly from argv.
       DesugarOptions options = DesugarOptions.parseCommandLineOptions(args);
       processRequest(options, DUMP_DIRECTORY);
     }
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/runtime/BUILD b/src/tools/android/java/com/google/devtools/build/android/desugar/runtime/BUILD
index f34fd3d..bf1f779 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/runtime/BUILD
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/runtime/BUILD
@@ -20,6 +20,19 @@
 )
 
 java_library(
+    name = "primitives",
+    srcs = [
+        "PrimitiveHashcode.java",
+        "UnsignedLongs.java",
+    ],
+    # This library must be compiled with java7, as we directly copy it to the desugared jar.
+    javacopts = [
+        "-source 7",
+        "-target 7",
+    ],
+)
+
+java_library(
     name = "string_concats",
     srcs = ["StringConcats.java"],
     # This library must be compiled with java7, as we directly copy it to the desugared jar.
diff --git a/tools/android/runtime_deps/upload_android_tools.sh b/tools/android/runtime_deps/upload_android_tools.sh
index cb134c8..2128cc5 100755
--- a/tools/android/runtime_deps/upload_android_tools.sh
+++ b/tools/android/runtime_deps/upload_android_tools.sh
@@ -31,7 +31,7 @@
 set -euo pipefail
 
 # The version of android_tools.tar.gz
-VERSION="0.17.0"
+VERSION="0.19.0rc1"
 VERSIONED_FILENAME="android_tools_pkg-$VERSION.tar.gz"
 
 # Create a temp directory to hold the versioned tarball, and clean it up when the script exits.
@@ -48,7 +48,7 @@
 
 # Upload the tarball to GCS.
 # -n for no-clobber, so we don't overwrite existing files
-gsutil cp $versioned_android_tools_archive \
+gsutil cp -n $versioned_android_tools_archive \
   gs://bazel-mirror/bazel_android_tools/$VERSIONED_FILENAME
 
 checksum=$(sha256sum $versioned_android_tools_archive | cut -f 1 -d ' ')