Fix new backport and SupportedClassesGenerator
- fix red bots
Change-Id: I0910fc547d6be818907e5a3979fe5ff509a39792
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
index 397c5f6..6bb5c22 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
@@ -40,6 +40,7 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.Timing;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import java.io.IOException;
import java.nio.file.Path;
@@ -350,20 +351,34 @@
if (clazz.type == backport.getHolderType()) {
DexClass maxClass = amendedAppForMax.definitionFor(clazz.type);
DexEncodedMethod dexEncodedMethod = maxClass.lookupMethod(backport);
- // There is a single backport not in amendedAppForMax, Stream#ofNullable.
- assert dexEncodedMethod != null
- || backport
- .toString()
- .equals(
- "java.util.stream.Stream java.util.stream.Stream.ofNullable(java.lang.Object)");
+ // Some backports are not in amendedAppForMax, such as Stream#ofNullable and recent ones
+ // introduced in U.
if (dexEncodedMethod == null) {
- dexEncodedMethod =
- DexEncodedMethod.builder()
- .setMethod(backport)
- .setAccessFlags(
- MethodAccessFlags.fromSharedAccessFlags(
- Constants.ACC_PUBLIC | Constants.ACC_STATIC, false))
- .build();
+ ImmutableSet<DexType> allStaticPublicMethods =
+ ImmutableSet.of(
+ options.dexItemFactory().mathType,
+ options.dexItemFactory().strictMathType,
+ options.dexItemFactory().objectsType);
+ if (backport
+ .toString()
+ .equals(
+ "java.util.stream.Stream"
+ + " java.util.stream.Stream.ofNullable(java.lang.Object)")
+ || allStaticPublicMethods.contains(backport.getHolderType())) {
+ dexEncodedMethod =
+ DexEncodedMethod.builder()
+ .setMethod(backport)
+ .setAccessFlags(
+ MethodAccessFlags.fromSharedAccessFlags(
+ Constants.ACC_PUBLIC | Constants.ACC_STATIC, false))
+ .build();
+ } else {
+ throw new Error(
+ "Unexpected backport missing from Android "
+ + MAX_TESTED_ANDROID_API_LEVEL
+ + ": "
+ + backport);
+ }
}
builder.addSupportedMethod(clazz, dexEncodedMethod);
}