[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);
+ }
}
}