Add support for API level 36 (Baklava)

  * Android SDK files from Baklava SDK Developer Preview 1
  * Update API database based on Baklava SDK Developer Preview 1

Change-Id: Ice3e35f5148853613347f1ba8ccef2aef98c0bad
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index 2c639c2..d8c3eff 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -817,7 +817,8 @@
     "lib-v32",
     "lib-v33",
     "lib-v34",
-    "lib-v35"
+    "lib-v35",
+    "lib-v36"
   ).map(::getThirdPartyAndroidJar)
 }
 
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
index d512ac1..2f83503c 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
@@ -45,14 +45,15 @@
   T(33),
   U(34),
   V(35),
-  MAIN(36), // API level for main is tentative.
+  BAKLAVA(36),
+  MAIN(37), // API level for main is tentative.
   EXTENSION(Integer.MAX_VALUE); // Used for API modeling of Android extension APIs.
 
   // When updating LATEST and a new version goes public, add a new api-versions.xml to third_party
   // and update the version and generated jar in AndroidApiDatabaseBuilderGeneratorTest. Together
   // with that update third_party/android_jar/libcore_latest/core-oj.jar and run
   // GenerateCovariantReturnTypeMethodsTest.
-  public static final AndroidApiLevel LATEST = V;
+  public static final AndroidApiLevel LATEST = BAKLAVA;
 
   public static final AndroidApiLevel API_DATABASE_LEVEL = LATEST;
 
@@ -116,7 +117,7 @@
 
   public static AndroidApiLevel getAndroidApiLevel(int apiLevel) {
     assert apiLevel > 0;
-    assert V == LATEST; // This has to be updated when we add new api levels.
+    assert BAKLAVA == LATEST; // This has to be updated when we add new api levels.
     assert UNKNOWN.isGreaterThan(LATEST);
     switch (apiLevel) {
       case 1:
@@ -189,6 +190,8 @@
         return U;
       case 35:
         return V;
+      case 36:
+        return BAKLAVA;
       default:
         return MAIN;
     }
diff --git a/src/main/java/com/android/tools/r8/utils/DexVersion.java b/src/main/java/com/android/tools/r8/utils/DexVersion.java
index f3e1670..269b85c 100644
--- a/src/main/java/com/android/tools/r8/utils/DexVersion.java
+++ b/src/main/java/com/android/tools/r8/utils/DexVersion.java
@@ -68,6 +68,7 @@
     switch (androidApiLevel) {
         // MAIN is an unknown higher api version we therefore choose the highest known version.
       case MAIN:
+      case BAKLAVA:
       case V:
       case U:
       case T:
diff --git a/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java b/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
index 76c0cde..469b5cd 100644
--- a/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
@@ -75,7 +75,7 @@
       Paths.get(ToolHelper.MAIN_SOURCE_DIR)
           .resolve(PACKAGE_NAME.replace('.', '/'))
           .resolve(CLASS_NAME + ".java");
-  private static final AndroidApiLevel GENERATED_FOR_API_LEVEL = AndroidApiLevel.V;
+  private static final AndroidApiLevel GENERATED_FOR_API_LEVEL = AndroidApiLevel.BAKLAVA;
 
   @Parameter public TestParameters parameters;
 
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGenerator.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGenerator.java
index 58a8ac6..9325826 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGenerator.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGenerator.java
@@ -200,19 +200,6 @@
     expectedMissingMembers.add(factory.createType("Landroid/nfc/tech/NfcB;"));
     expectedMissingMembers.add(factory.createType("Landroid/nfc/tech/Ndef;"));
     expectedMissingMembers.add(factory.createType("Landroid/webkit/CookieSyncManager;"));
-    expectedMissingMembers.add(
-        factory.createType("Landroid/adservices/customaudience/CustomAudienceManager;"));
-    expectedMissingMembers.add(
-        factory.createType("Landroid/adservices/customaudience/PartialCustomAudience$Builder;"));
-    expectedMissingMembers.add(
-        factory.createType("Landroid/adservices/customaudience/PartialCustomAudience;"));
-    expectedMissingMembers.add(
-        factory.createType(
-            "Landroid/adservices/customaudience/ScheduleCustomAudienceUpdateRequest$Builder;"));
-    expectedMissingMembers.add(
-        factory.createType(
-            "Landroid/adservices/customaudience/ScheduleCustomAudienceUpdateRequest;"));
-    expectedMissingMembers.add(factory.createType("Landroid/app/appsearch/AppSearchResult;"));
     assertEquals(
         expectedMissingMembers.stream()
                 .map(DexType::toDescriptorString)
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
index 0dda84b2..5d93f88 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
@@ -120,9 +120,9 @@
                   methodReferences.forEach(field -> numberOfMethods.increment())));
         });
     // These numbers will change when updating api-versions.xml
-    assertEquals(5972, parsedApiClasses.size());
-    assertEquals(30341, numberOfFields.get());
-    assertEquals(46576, numberOfMethods.get());
+    assertEquals(6031, parsedApiClasses.size());
+    assertEquals(30501, numberOfFields.get());
+    assertEquals(46885, numberOfMethods.get());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
index 2d09844..071d6cb 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
@@ -89,7 +89,8 @@
   private Set<String> getDeletedTypesMissingRemovedAttribute() {
     Set<String> removedTypeNames = new HashSet<>();
     if (maxApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.U)) {
-      if (maxApiLevel.isLessThan(AndroidApiLevel.V)) {
+      if (maxApiLevel.isLessThan(AndroidApiLevel.V)
+          || maxApiLevel.equals(AndroidApiLevel.BAKLAVA)) {
         removedTypeNames.add("com.android.internal.util.Predicate");
       }
       removedTypeNames.add("android.adservices.AdServicesVersion");
diff --git a/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java b/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java
index fcd2106..a19c8e9 100644
--- a/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java
+++ b/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java
@@ -58,7 +58,7 @@
         .setMinApi(AndroidApiLevel.K)
         .compile()
         .inspect(
-            inspector -> assertEquals(backend.isDex() ? 1091 : 4, inspector.allClasses().size()));
+            inspector -> assertEquals(backend.isDex() ? 1104 : 4, inspector.allClasses().size()));
   }
 
   @Test
diff --git a/third_party/android_jar/lib-v36.tar.gz.sha1 b/third_party/android_jar/lib-v36.tar.gz.sha1
new file mode 100644
index 0000000..939f711
--- /dev/null
+++ b/third_party/android_jar/lib-v36.tar.gz.sha1
@@ -0,0 +1 @@
+f6fe8070ccad90b10d1bcc28a90f5befd3d9afb4
\ No newline at end of file
diff --git a/third_party/android_jar/libcore_latest.tar.gz.sha1 b/third_party/android_jar/libcore_latest.tar.gz.sha1
index 8200e76..4bcde1b 100644
--- a/third_party/android_jar/libcore_latest.tar.gz.sha1
+++ b/third_party/android_jar/libcore_latest.tar.gz.sha1
@@ -1 +1 @@
-96a23da90f1b9412821cef769f3524ef6b05436b
\ No newline at end of file
+6ea109a75610a6f2e173a361bd2345e622b8be06
\ No newline at end of file
diff --git a/third_party/api_database/api_database.tar.gz.sha1 b/third_party/api_database/api_database.tar.gz.sha1
index 966e156c..b81dbaf 100644
--- a/third_party/api_database/api_database.tar.gz.sha1
+++ b/third_party/api_database/api_database.tar.gz.sha1
@@ -1 +1 @@
-0aab829fe216f39035a282024966bbd26bea3a26
\ No newline at end of file
+912f0e6d9fb5e1789c458801f3ed8e6c4e700767
\ No newline at end of file
diff --git a/tools/add-android-sdk.py b/tools/add-android-sdk.py
index e299172..5d00eab 100755
--- a/tools/add-android-sdk.py
+++ b/tools/add-android-sdk.py
@@ -21,6 +21,10 @@
                         required=True,
                         metavar=('<name>'),
                         help='Name of the SDK, either API level or code name')
+    parser.add_argument('--api-level',
+                        '--api_level',
+                        metavar=('<level>'),
+                        help='API level to add this as in third_party')
     return parser.parse_args()
 
 
@@ -60,7 +64,15 @@
         print('Path %s does not exist' % source)
         sys.exit(1)
 
-    destination = utils.get_android_jar_dir(args.sdk_name)
+    api_level = -1
+    try:
+        api_level = int(args.api_level if args.api_level else args.sdk_name)
+    except:
+        print('API level "%s" must be an integer'
+            % (args.api_level if args.api_level else args.sdk_name))
+        sys.exit(1)
+
+    destination = utils.get_android_jar_dir(api_level)
 
     # Remove existing if present.
     shutil.rmtree(destination, ignore_errors=True)