[ApiModel] Add missing definitions for StringBuilder and StringBuffer

Bug: 216587554
Change-Id: I1257d837eb8f7e411b46fa5bec2958054ca2d6d5
diff --git a/src/main/java/com/android/tools/r8/androidapi/AndroidApiLevelDatabaseHelper.java b/src/main/java/com/android/tools/r8/androidapi/AndroidApiLevelDatabaseHelper.java
index 486501f..03727d7 100644
--- a/src/main/java/com/android/tools/r8/androidapi/AndroidApiLevelDatabaseHelper.java
+++ b/src/main/java/com/android/tools/r8/androidapi/AndroidApiLevelDatabaseHelper.java
@@ -6,6 +6,7 @@
 
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexReference;
+import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import java.util.function.BiConsumer;
 
@@ -13,19 +14,90 @@
 
   static void visitAdditionalKnownApiReferences(
       DexItemFactory factory, BiConsumer<DexReference, AndroidApiLevel> apiLevelConsumer) {
-    // StringBuilder.substring(int) and StringBuilder.substring(int, int) is not part of
-    // api-versions.xml so we add them here. See b/216587554 for related error.
-    apiLevelConsumer.accept(
-        factory.createMethod(
-            factory.stringBuilderType,
-            factory.createProto(factory.stringType, factory.intType),
-            "substring"),
-        AndroidApiLevel.B);
-    apiLevelConsumer.accept(
-        factory.createMethod(
-            factory.stringBuilderType,
-            factory.createProto(factory.stringType, factory.intType, factory.intType),
-            "substring"),
-        AndroidApiLevel.B);
+    // StringBuilder and StringBuffer lack api definitions for the exact same methods in
+    // api-versions.xml. See b/216587554 for related error.
+    for (DexType type : new DexType[] {factory.stringBuilderType, factory.stringBufferType}) {
+      apiLevelConsumer.accept(
+          factory.createMethod(type, factory.createProto(factory.intType), "capacity"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type, factory.createProto(factory.intType, factory.intType), "codePointAt"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type, factory.createProto(factory.intType, factory.intType), "codePointBefore"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type,
+              factory.createProto(factory.intType, factory.intType, factory.intType),
+              "codePointCount"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type, factory.createProto(factory.voidType, factory.intType), "ensureCapacity"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type,
+              factory.createProto(
+                  factory.voidType,
+                  factory.intType,
+                  factory.intType,
+                  factory.charArrayType,
+                  factory.intType),
+              "getChars"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type, factory.createProto(factory.intType, factory.stringType), "indexOf"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type,
+              factory.createProto(factory.intType, factory.stringType, factory.intType),
+              "indexOf"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type, factory.createProto(factory.intType, factory.stringType), "lastIndexOf"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type,
+              factory.createProto(factory.intType, factory.stringType, factory.intType),
+              "lastIndexOf"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type,
+              factory.createProto(factory.intType, factory.intType, factory.intType),
+              "offsetByCodePoints"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type,
+              factory.createProto(factory.voidType, factory.intType, factory.charType),
+              "setCharAt"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type, factory.createProto(factory.voidType, factory.intType), "setLength"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type, factory.createProto(factory.stringType, factory.intType), "substring"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(
+              type,
+              factory.createProto(factory.stringType, factory.intType, factory.intType),
+              "substring"),
+          AndroidApiLevel.B);
+      apiLevelConsumer.accept(
+          factory.createMethod(type, factory.createProto(factory.voidType), "trimToSize"),
+          AndroidApiLevel.B);
+    }
   }
 }