Update tests after enabling StringBuilder outlining
Change-Id: Icaf1585037185aa500bdb5813a287a61ccbf9864
diff --git a/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java b/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java
index 9686456..8d0d237 100644
--- a/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java
+++ b/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java
@@ -5,6 +5,7 @@
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.core.AnyOf.anyOf;
+import static org.junit.Assert.assertTrue;
import com.android.tools.r8.D8TestBuilder;
import com.android.tools.r8.D8TestCompileResult;
@@ -78,6 +79,11 @@
throws Exception {
return testForD8()
.addProgramFiles(base.resolve(DEPLOY_JAR))
+ .addOptionsModification(
+ options -> {
+ assertTrue(options.getThrowBlockOutlinerOptions().enable);
+ options.getThrowBlockOutlinerOptions().enable = false;
+ })
.setMinApi(parameters)
.apply(configuration)
.compile();
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingCapturesKotlinStyleTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingCapturesKotlinStyleTest.java
index b02f228..cdb615d 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingCapturesKotlinStyleTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingCapturesKotlinStyleTest.java
@@ -15,6 +15,7 @@
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -84,6 +85,7 @@
.addHorizontallyMergedClassesInspector(
inspector -> {
if (parameters.isDexRuntime()
+ && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.L)
&& kotlinParameters.getLambdaGeneration().isInvokeDynamic()) {
inspector
.assertIsCompleteMergeGroup(
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialJavaStyleTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialJavaStyleTest.java
index ca2d90c..84575f1 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialJavaStyleTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialJavaStyleTest.java
@@ -5,7 +5,7 @@
package com.android.tools.r8.kotlin.lambda;
import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_5_0;
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_9_21;
+import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_2_0_20;
import static com.android.tools.r8.utils.PredicateUtils.not;
import static junit.framework.TestCase.assertEquals;
import static org.junit.Assume.assumeFalse;
@@ -18,6 +18,7 @@
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -98,110 +99,84 @@
private void inspect(
HorizontallyMergedClassesInspector inspector, KotlinLambdasInInput lambdasInInput) {
- if (hasKotlinCGeneratedLambdaClasses()
- && kotlinParameters.getCompilerVersion().isLessThan(KOTLINC_1_5_0)) {
- // Don't check exactly how J-style Kotlin lambdas are merged for kotlinc before 1.5.0.
- assertEquals(
- parameters.isDexRuntime() && parameters.canUseDefaultAndStaticInterfaceMethods() ? 3 : 10,
- inspector.getMergeGroups().size());
- return;
- }
-
- if (!allowAccessModification && hasKotlinCGeneratedLambdaClasses()) {
- // Only a subset of all J-style Kotlin lambdas are merged without -allowaccessmodification.
- Set<ClassReference> unmergedLambdas =
- ImmutableSet.of(
- lambdasInInput.getJStyleLambdaReferenceFromTypeName(
- getTestName(), "inner.InnerKt$testInner1$1"),
- lambdasInInput.getJStyleLambdaReferenceFromTypeName(
- getTestName(), "inner.InnerKt$testInner1$2"),
- lambdasInInput.getJStyleLambdaReferenceFromTypeName(
- getTestName(), "inner.InnerKt$testInner1$3"),
- lambdasInInput.getJStyleLambdaReferenceFromTypeName(
- getTestName(), "inner.InnerKt$testInner1$4"),
- lambdasInInput.getJStyleLambdaReferenceFromTypeName(
- getTestName(), "inner.InnerKt$testInner1$5"));
- inspector
- .assertIsCompleteMergeGroup(
- lambdasInInput.getJStyleLambdas().stream()
- .filter(not(unmergedLambdas::contains))
- .collect(Collectors.toList()))
- .assertClassReferencesNotMerged(unmergedLambdas);
+ if (kotlinParameters.getCompilerVersion().isLessThan(KOTLINC_2_0_20)) {
+ // Don't inspect the output for Kotlin 1.9 and older.
return;
}
if (hasKotlinCGeneratedLambdaClasses()) {
- // All J-style Kotlin lambdas are merged with -allowaccessmodification or because they are
- // generated by R8.
- inspector.assertIsCompleteMergeGroup(lambdasInInput.getJStyleLambdas());
- return;
- }
-
- ClassReference mainClassReference = Reference.classFromTypeName(getTestName() + ".MainKt");
- ClassReference innerClassReference =
- Reference.classFromTypeName(getTestName() + ".inner.InnerKt");
- if (parameters.isCfRuntime()) {
- inspector.assertClassReferencesNotMerged(
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 0),
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 1),
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 2),
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 3));
- for (int id = 0; id < 30; id++) {
- inspector.assertClassReferencesNotMerged(
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, id));
+ if (allowAccessModification) {
+ // All J-style Kotlin lambdas are merged with -allowaccessmodification or because they are
+ // generated by R8.
+ inspector.assertIsCompleteMergeGroup(lambdasInInput.getJStyleLambdas());
+ } else {
+ // Only a subset of all J-style Kotlin lambdas are merged without -allowaccessmodification.
+ Set<ClassReference> unmergedLambdas =
+ ImmutableSet.of(
+ lambdasInInput.getJStyleLambdaReferenceFromTypeName(
+ getTestName(), "inner.InnerKt$testInner1$1"),
+ lambdasInInput.getJStyleLambdaReferenceFromTypeName(
+ getTestName(), "inner.InnerKt$testInner1$2"),
+ lambdasInInput.getJStyleLambdaReferenceFromTypeName(
+ getTestName(), "inner.InnerKt$testInner1$3"),
+ lambdasInInput.getJStyleLambdaReferenceFromTypeName(
+ getTestName(), "inner.InnerKt$testInner1$4"),
+ lambdasInInput.getJStyleLambdaReferenceFromTypeName(
+ getTestName(), "inner.InnerKt$testInner1$5"));
+ inspector
+ .assertIsCompleteMergeGroup(
+ lambdasInInput.getJStyleLambdas().stream()
+ .filter(not(unmergedLambdas::contains))
+ .collect(Collectors.toList()))
+ .assertClassReferencesNotMerged(unmergedLambdas);
}
- } else if (parameters.canUseDefaultAndStaticInterfaceMethods()) {
- inspector
- .applyIf(
- kotlinc.getCompilerVersion().isLessThanOrEqualTo(KOTLINC_1_9_21),
- i -> {
- i.assertIsCompleteMergeGroup(
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 0),
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 1))
- .assertIsCompleteMergeGroup(
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 0),
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 2),
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 3))
- .assertIsCompleteMergeGroup(
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 1),
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 4),
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 5));
- for (int id = 6; id < 30; id++) {
- inspector.assertClassReferencesNotMerged(
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, id));
- }
- },
- i -> {
- i.assertIsCompleteMergeGroup(
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 3),
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 4),
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 0))
- .assertIsCompleteMergeGroup(
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 7),
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 8),
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 2))
- .assertIsCompleteMergeGroup(
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 5),
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 6),
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 1))
- .assertIsCompleteMergeGroup(
- SyntheticItemsTestUtils.syntheticThrowBlockOutlineClass(
- mainClassReference, 0),
- SyntheticItemsTestUtils.syntheticThrowBlockOutlineClass(
- mainClassReference, 1),
- SyntheticItemsTestUtils.syntheticThrowBlockOutlineClass(
- mainClassReference, 2));
- for (int id = 4; id < 30; id++) {
- inspector.assertClassReferencesNotMerged(
- SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, id));
- }
- })
- .assertClassReferencesNotMerged(
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 2),
- SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 3));
} else {
- assertEquals(10, inspector.getMergeGroups().size());
- assertEquals(34, inspector.getSources().size());
+ ClassReference mainClassReference = Reference.classFromTypeName(getTestName() + ".MainKt");
+ ClassReference innerClassReference =
+ Reference.classFromTypeName(getTestName() + ".inner.InnerKt");
+ if (parameters.isCfRuntime()) {
+ inspector.assertClassReferencesNotMerged(
+ SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 0),
+ SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 1),
+ SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 2),
+ SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 3));
+ for (int id = 0; id < 30; id++) {
+ inspector.assertClassReferencesNotMerged(
+ SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, id));
+ }
+ } else if (parameters.canUseDefaultAndStaticInterfaceMethods()) {
+ inspector
+ .assertIsCompleteMergeGroup(
+ SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 3),
+ SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 4),
+ SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 0))
+ .assertIsCompleteMergeGroup(
+ SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 7),
+ SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 8),
+ SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 2))
+ .assertIsCompleteMergeGroup(
+ SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 5),
+ SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, 6),
+ SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 1))
+ .assertIsCompleteMergeGroup(
+ SyntheticItemsTestUtils.syntheticThrowBlockOutlineClass(mainClassReference, 0),
+ SyntheticItemsTestUtils.syntheticThrowBlockOutlineClass(mainClassReference, 1),
+ SyntheticItemsTestUtils.syntheticThrowBlockOutlineClass(mainClassReference, 2));
+ for (int id = 4; id < 30; id++) {
+ inspector.assertClassReferencesNotMerged(
+ SyntheticItemsTestUtils.syntheticLambdaClass(mainClassReference, id));
+ }
+ inspector.assertClassReferencesNotMerged(
+ SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 2),
+ SyntheticItemsTestUtils.syntheticLambdaClass(innerClassReference, 3));
+ } else {
+ assertEquals(10, inspector.getMergeGroups().size());
+ assertEquals(
+ parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.L)
+ ? 28
+ : 34,
+ inspector.getSources().size());
+ }
}
}