Minor rewrite of RetargetAndBackportTest
Change-Id: Iff0bb07a002d55817734649eb46ca78a6231f5e2
diff --git a/src/main/java/com/android/tools/r8/utils/PredicateUtils.java b/src/main/java/com/android/tools/r8/utils/PredicateUtils.java
index f219259..7096a3f 100644
--- a/src/main/java/com/android/tools/r8/utils/PredicateUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/PredicateUtils.java
@@ -25,4 +25,9 @@
public static <T, R> Predicate<T> isNull(Function<T, R> func) {
return t -> func.apply(t) == null;
}
+
+ public static <T> Predicate<? super T> or(
+ Predicate<? super T> predicate, Predicate<? super T> other) {
+ return t -> predicate.test(t) || other.test(t);
+ }
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetAndBackportTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetAndBackportTest.java
index 8e1e146..dae52bc 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetAndBackportTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetAndBackportTest.java
@@ -4,6 +4,10 @@
package com.android.tools.r8.desugar.desugaredlibrary;
+import static com.android.tools.r8.utils.codeinspector.CodeMatchers.invokesMethod;
+import static com.android.tools.r8.utils.codeinspector.CodeMatchers.isInvokeWithTarget;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.TestParameters;
@@ -14,9 +18,12 @@
import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyRewritingFlags;
import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyTopLevelFlags;
import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.PredicateUtils;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -78,14 +85,36 @@
.compile()
.inspect(
inspector -> {
- assertTrue(
+ MethodSubject toMillisMethod =
+ inspector.clazz("j$.time.Duration").uniqueMethodWithOriginalName("toMillis");
+ assertThat(toMillisMethod, isPresent());
+
+ MethodSubject firstBackportMethod =
inspector
- .clazz("j$.time.Duration")
- .uniqueMethodWithOriginalName("toMillis")
+ .clazz(
+ SyntheticItemsTestUtils.syntheticBackportClass(
+ toMillisMethod.getFinalReference().getHolderClass(), 1))
+ .uniqueMethod();
+ assertThat(firstBackportMethod, isPresent());
+
+ MethodSubject secondBackportMethod =
+ inspector
+ .clazz(
+ SyntheticItemsTestUtils.syntheticBackportClass(
+ toMillisMethod.getFinalReference().getHolderClass(), 2))
+ .uniqueMethod();
+ assertThat(secondBackportMethod, isPresent());
+
+ assertThat(toMillisMethod, invokesMethod(firstBackportMethod));
+ assertThat(toMillisMethod, invokesMethod(secondBackportMethod));
+ assertTrue(
+ toMillisMethod
.streamInstructions()
.filter(InstructionSubject::isInvokeStatic)
- .map(InstructionSubject::toString)
- .allMatch(s -> s.contains("Backport")));
+ .allMatch(
+ PredicateUtils.or(
+ isInvokeWithTarget(firstBackportMethod),
+ isInvokeWithTarget(secondBackportMethod))));
});
}