Update LibraryMemberRebindingInterfaceTest to set api level for method
Change-Id: Id6a3807cef5732716cda4dcad72a91bbc8dd83bd
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelingTestHelper.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelingTestHelper.java
index f11b7a1..ed2343a 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelingTestHelper.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelingTestHelper.java
@@ -49,6 +49,17 @@
public static <T extends TestCompilerBuilder<?, ?, ?, ?, ?>>
ThrowableConsumer<T> setMockApiLevelForMethod(
+ MethodReference method, AndroidApiLevel apiLevel) {
+ return compilerBuilder -> {
+ compilerBuilder.addOptionsModification(
+ options -> {
+ options.apiModelingOptions().methodApiMapping.put(method, apiLevel);
+ });
+ };
+ }
+
+ public static <T extends TestCompilerBuilder<?, ?, ?, ?, ?>>
+ ThrowableConsumer<T> setMockApiLevelForMethod(
Constructor<?> constructor, AndroidApiLevel apiLevel) {
return compilerBuilder -> {
compilerBuilder.addOptionsModification(
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/LibraryMemberRebindingInterfaceTest.java b/src/test/java/com/android/tools/r8/memberrebinding/LibraryMemberRebindingInterfaceTest.java
index 29a2fce..e472056 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/LibraryMemberRebindingInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/LibraryMemberRebindingInterfaceTest.java
@@ -13,10 +13,13 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.references.MethodReference;
+import com.android.tools.r8.references.Reference;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
+import java.lang.reflect.Method;
import java.nio.file.Path;
import java.util.Collection;
import org.junit.BeforeClass;
@@ -75,12 +78,24 @@
}
private void test(Path compileTimeLibrary, Path runtimeLibrary) throws Exception {
+ Method m = LibraryI.class.getDeclaredMethod("m");
+ MethodReference methodReferenceForM = Reference.methodFromMethod(m);
testForR8(parameters.getBackend())
.addProgramClasses(Main.class)
.addKeepClassAndMembersRules(Main.class)
.addLibraryFiles(compileTimeLibrary)
.addDefaultRuntimeLibrary(parameters)
- .apply(setMockApiLevelForMethod(LibraryI.class.getDeclaredMethod("m"), AndroidApiLevel.B))
+ .apply(setMockApiLevelForMethod(m, AndroidApiLevel.B))
+ // The api database needs to have an api level for each target, so even though B do not
+ // define 'm', we still give it an API level.
+ .apply(
+ setMockApiLevelForMethod(
+ Reference.method(
+ Reference.classFromClass(LibraryB.class),
+ methodReferenceForM.getMethodName(),
+ methodReferenceForM.getFormalTypes(),
+ methodReferenceForM.getReturnType()),
+ AndroidApiLevel.B))
.apply(setMockApiLevelForMethod(LibraryC.class.getDeclaredMethod("m"), AndroidApiLevel.B))
.apply(setMockApiLevelForMethod(LibraryA.class.getDeclaredMethod("m"), AndroidApiLevel.N))
.setMinApi(parameters.getApiLevel())