Revert "Enable enum unboxing and outlining when generating class files"
This reverts commit de5a95656860c0dad44c52fc0e3368bc4be98441.
Reason for revert: Bot failures
Change-Id: I526c5016e47e47537e7e6f3b12bc02bb5d83eb21
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 844d01a..7bb927c 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -930,10 +930,12 @@
: AssertionTransformation.DISABLE,
getAssertionsConfiguration());
- // TODO(b/171552739): Enable class merging for CF. When compiling libraries, we need to be
- // careful when merging a public member 'm' from a class A into another class B, since B could
- // have a kept subclass, in which case 'm' would leak into the public API.
+ // When generating class files the build is "intermediate" and we cannot pollute the namespace
+ // with the a hard-coded outline / enum unboxing utility class. Doing so would prohibit
+ // subsequent merging of two R8 produced libraries.
if (internal.isGeneratingClassFiles()) {
+ internal.outline.enabled = false;
+ internal.enableEnumUnboxing = false;
horizontalClassMergerOptions.disable();
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
index 19bb6cc..bba0af1 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
@@ -937,8 +937,7 @@
// We do not unbox enums with invoke custom since it's not clear the accessibility
// constraints would be correct if the method holding the invoke custom is moved to
// another class.
- assert appView.options().isGeneratingClassFiles()
- || !factory.isLambdaMetafactoryMethod(callSite.bootstrapMethod.asMethod());
+ assert !factory.isLambdaMetafactoryMethod(callSite.bootstrapMethod.asMethod());
constraint = Constraint.NEVER;
}
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index f96e8ce..3a11cbd 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -317,6 +317,7 @@
public boolean enableInitializedClassesInInstanceMethodsAnalysis = true;
public boolean enableRedundantFieldLoadElimination = true;
public boolean enableValuePropagation = true;
+ public boolean enableValuePropagationForInstanceFields = true;
public boolean enableUninstantiatedTypeOptimization = true;
// Currently disabled, see b/146957343.
public boolean enableUninstantiatedTypeOptimizationForInterfaces = false;
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/IllegalInliningOfMergedConstructorTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/IllegalInliningOfMergedConstructorTest.java
index aad40d0..bbc415c 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/IllegalInliningOfMergedConstructorTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/IllegalInliningOfMergedConstructorTest.java
@@ -33,7 +33,8 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addEnumUnboxingInspector(inspector -> inspector.assertUnboxed(Reprocess.class))
+ .addEnumUnboxingInspector(
+ inspector -> inspector.assertUnboxedIf(parameters.isDexRuntime(), Reprocess.class))
.addHorizontallyMergedClassesInspector(
inspector -> inspector.assertMergedInto(B.class, A.class))
.addOptionsModification(options -> options.inliningInstructionLimit = 4)
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingB160535628Test.java b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingB160535628Test.java
index 2a8105f..a8fe3f9 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingB160535628Test.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingB160535628Test.java
@@ -85,6 +85,11 @@
.addKeepRules("-keep enum * { <fields>; }")
.addKeepRules(enumKeepRules.getKeepRules())
.addKeepRules(missingStaticMethods ? "" : "-keep enum * { static <methods>; }")
+ .addOptionsModification(
+ options -> {
+ assert !options.enableEnumUnboxing;
+ options.enableEnumUnboxing = true;
+ })
.addKeepClassRules(Lib.LibEnumStaticMethod.class)
.addEnumUnboxingInspector(
inspector ->
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/LambdaEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/LambdaEnumUnboxingTest.java
index b99986a..aba1bb8 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/LambdaEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/LambdaEnumUnboxingTest.java
@@ -40,6 +40,14 @@
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
.addKeepRules(enumKeepRules.getKeepRules())
+ .addOptionsModification(
+ options -> {
+ if (options.isGeneratingClassFiles()) {
+ // TODO(b/172568606): Remove this when enabled for CF by default.
+ assertFalse(options.enableEnumUnboxing);
+ options.enableEnumUnboxing = true;
+ }
+ })
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
index 95c8527..aad2f6f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
@@ -24,6 +24,7 @@
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ZipUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -357,8 +358,10 @@
ClassSubject clazz = inspector.clazz(nullabilityClass);
assertThat(clazz.uniqueMethodWithName("conditionalOperator"), isAbsent());
- // The enum parameter is unboxed.
- MethodSubject m = clazz.uniqueMethodWithName("moreControlFlows$enumunboxing$");
+ // The enum parameter may get unboxed.
+ MethodSubject m =
+ clazz.uniqueMethodWithName(
+ parameters.isCfRuntime() ? "moreControlFlows" : "moreControlFlows$enumunboxing$");
assertTrue(m.isPresent());
// Verify that a.b() is resolved to an inline instance-get.
@@ -378,10 +381,18 @@
}
private boolean isEnumInvoke(InstructionSubject instruction) {
- return instruction
- .getMethod()
- .getName()
- .toString()
- .startsWith(EnumUnboxingRewriter.ENUM_UNBOXING_UTILITY_METHOD_PREFIX);
+ InternalOptions defaults = new InternalOptions();
+ if (parameters.isDexRuntime() && defaults.enableEnumUnboxing) {
+ return instruction
+ .getMethod()
+ .name
+ .toString()
+ .startsWith(EnumUnboxingRewriter.ENUM_UNBOXING_UTILITY_METHOD_PREFIX);
+ } else {
+ return ((InvokeInstructionSubject) instruction)
+ .holder()
+ .toString()
+ .contains("java.lang.Enum");
+ }
}
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/ConditionalSimpleInliningWithEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/ConditionalSimpleInliningWithEnumUnboxingTest.java
index 7eb5882..3cebb62 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/ConditionalSimpleInliningWithEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/ConditionalSimpleInliningWithEnumUnboxingTest.java
@@ -28,7 +28,9 @@
.addInnerClasses(getClass())
.addKeepMainRule(TestClass.class)
.apply(this::configure)
- .addEnumUnboxingInspector(inspector -> inspector.assertUnboxed(EnumUnboxingCandidate.class))
+ .addEnumUnboxingInspector(
+ inspector ->
+ inspector.assertUnboxedIf(parameters.isDexRuntime(), EnumUnboxingCandidate.class))
.setMinApi(parameters.getApiLevel())
.compile()
.run(parameters.getRuntime(), TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/NoOutliningForClassFileBuildsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/NoOutliningForClassFileBuildsTest.java
new file mode 100644
index 0000000..2a837bc
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/NoOutliningForClassFileBuildsTest.java
@@ -0,0 +1,103 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.ir.optimize.outliner;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
+import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class NoOutliningForClassFileBuildsTest extends TestBase {
+
+ static final String EXPECTED = StringUtils.lines("foobarbaz");
+
+ private final TestParameters parameters;
+ private final boolean forceOutline;
+
+ @Parameterized.Parameters(name = "{0}, force-outline: {1}")
+ public static Collection<Object[]> data() {
+ List<Object[]> args = new ArrayList<>();
+ for (TestParameters parameter : getTestParameters().withAllRuntimesAndApiLevels().build()) {
+ args.add(new Object[] {parameter, false});
+ if (parameter.isCfRuntime()) {
+ args.add(new Object[] {parameter, true});
+ }
+ }
+ return args;
+ }
+
+ public NoOutliningForClassFileBuildsTest(TestParameters parameters, boolean forceOutline) {
+ this.parameters = parameters;
+ this.forceOutline = forceOutline;
+ }
+
+ @Test
+ public void test() throws Exception {
+ testForR8(parameters.getBackend())
+ .noMinification()
+ .addProgramClasses(TestClass.class)
+ .addKeepClassAndMembersRules(TestClass.class)
+ .setMinApi(parameters.getApiLevel())
+ .addOptionsModification(
+ o -> {
+ if (forceOutline) {
+ o.outline.enabled = true;
+ }
+ o.outline.minSize = 2;
+ o.outline.maxSize = 20;
+ o.outline.threshold = 2;
+ })
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutput(EXPECTED)
+ .inspect(this::checkOutlining);
+ }
+
+ private void checkOutlining(CodeInspector inspector) {
+ ClassSubject classSubject = inspector.clazz(TestClass.class);
+ assertThat(classSubject, isPresent());
+ assertThat(classSubject.uniqueMethodWithName("foo"), isPresent());
+ assertThat(classSubject.uniqueMethodWithName("bar"), isPresent());
+ boolean hasOutlineClass =
+ inspector
+ .clazz(SyntheticItemsTestUtils.syntheticOutlineClass(TestClass.class, 0))
+ .isPresent();
+ assertEquals(forceOutline || parameters.isDexRuntime(), hasOutlineClass);
+ }
+
+ static class TestClass {
+
+ public void foo(String arg) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("foo");
+ builder.append(arg);
+ builder.append("baz");
+ System.out.println(builder.toString());
+ }
+
+ public void bar(String arg) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("foo");
+ builder.append(arg);
+ builder.append("baz");
+ System.out.println(builder.toString());
+ }
+
+ public static void main(String[] args) {
+ new TestClass().foo("bar");
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java
index 5660355..0531857 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java
@@ -43,6 +43,10 @@
.addKeepMainRule(TestClass.class)
.addOptionsModification(
options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
options.outline.threshold = 2;
options.outline.minSize = 2;
})
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlinesWithNonNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlinesWithNonNullTest.java
index c4b84a7..6b7bc4a 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlinesWithNonNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlinesWithNonNullTest.java
@@ -35,7 +35,7 @@
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ return getTestParameters().withAllRuntimes().build();
}
public OutlinesWithNonNullTest(TestParameters parameters) {
@@ -49,11 +49,15 @@
.enableInliningAnnotations()
.addProgramClasses(TestArg.class, TestClassWithNonNullOnOneSide.class)
.addKeepMainRule(TestClassWithNonNullOnOneSide.class)
- .setMinApi(parameters.getApiLevel())
+ .setMinApi(parameters.getRuntime())
.allowAccessModification()
.noMinification()
.addOptionsModification(
options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
options.outline.threshold = 2;
options.outline.minSize = 2;
})
@@ -70,11 +74,15 @@
.enableInliningAnnotations()
.addProgramClasses(TestArg.class, TestClassWithNonNullOnBothSides.class)
.addKeepMainRule(TestClassWithNonNullOnBothSides.class)
- .setMinApi(parameters.getApiLevel())
+ .setMinApi(parameters.getRuntime())
.allowAccessModification()
.noMinification()
.addOptionsModification(
options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
options.outline.threshold = 2;
options.outline.minSize = 2;
})
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithClassArrayTypeArguments.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithClassArrayTypeArguments.java
index 8bd05e0..440b036 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithClassArrayTypeArguments.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithClassArrayTypeArguments.java
@@ -29,7 +29,7 @@
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ return getTestParameters().withAllRuntimes().build();
}
public OutlinesWithClassArrayTypeArguments(TestParameters parameters) {
@@ -60,10 +60,14 @@
.enableInliningAnnotations()
.addInnerClasses(OutlinesWithClassArrayTypeArguments.class)
.addKeepMainRule(TestClass.class)
- .setMinApi(parameters.getApiLevel())
+ .setMinApi(parameters.getRuntime())
.noMinification()
.addOptionsModification(
options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
options.outline.threshold = 2;
options.outline.minSize = 2;
})
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithInterfaceArrayTypeArguments.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithInterfaceArrayTypeArguments.java
index 5a0b120..062516c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithInterfaceArrayTypeArguments.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithInterfaceArrayTypeArguments.java
@@ -32,8 +32,7 @@
@Parameterized.Parameters(name = "{1}, allow interface array types in outlining on JVM: {0}")
public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ return buildParameters(BooleanUtils.values(), getTestParameters().withAllRuntimes().build());
}
public OutlinesWithInterfaceArrayTypeArguments(
@@ -74,10 +73,14 @@
.addKeepMainRule(TestClass.class)
.addKeepClassAndMembersRules(ClassImplementingIface.class)
.addKeepClassAndMembersRules(OtherClassImplementingIface.class)
- .setMinApi(parameters.getApiLevel())
+ .setMinApi(parameters.getRuntime())
.noMinification()
.addOptionsModification(
options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
options.outline.threshold = 2;
options.outline.minSize = 2;
options.testing.allowOutlinerInterfaceArrayArguments =
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithPrimitiveArrayTypeArguments.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithPrimitiveArrayTypeArguments.java
index 6334006..36d9ad5 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithPrimitiveArrayTypeArguments.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/arraytypes/OutlinesWithPrimitiveArrayTypeArguments.java
@@ -63,6 +63,10 @@
.noMinification()
.addOptionsModification(
options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
options.outline.threshold = 2;
options.outline.minSize = 2;
})
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b112247415/B112247415.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b112247415/B112247415.java
index d5e8708..1e5ef3f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b112247415/B112247415.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b112247415/B112247415.java
@@ -88,6 +88,10 @@
.addKeepMainRule(TestClass.class)
.addOptionsModification(
options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
// To trigger outliner, set # of expected outline candidate as threshold.
options.outline.threshold = 2;
options.enableInlining = false;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b133215941/B133215941.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b133215941/B133215941.java
index 9c8eb76..031fd9d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b133215941/B133215941.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b133215941/B133215941.java
@@ -33,7 +33,7 @@
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ return getTestParameters().withAllRuntimes().build();
}
public B133215941(TestParameters parameters) {
@@ -69,9 +69,16 @@
.addInnerClasses(B133215941.class)
.addKeepMainRule(TestClass.class)
.addKeepClassAndMembersRules(ClassWithStaticMethod.class)
- .setMinApi(parameters.getApiLevel())
+ .setMinApi(parameters.getRuntime())
.noMinification()
- .addOptionsModification(options -> options.outline.threshold = 2)
+ .addOptionsModification(
+ options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
+ options.outline.threshold = 2;
+ })
.compile()
.inspect(this::validateOutlining)
.run(parameters.getRuntime(), TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java
index 29de662..39c95f1 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java
@@ -29,7 +29,7 @@
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ return getTestParameters().withAllRuntimes().build();
}
public B134462736(TestParameters parameters) {
@@ -64,10 +64,14 @@
.enableInliningAnnotations()
.addInnerClasses(B134462736.class)
.addKeepMainRule(TestClass.class)
- .setMinApi(parameters.getApiLevel())
+ .setMinApi(parameters.getRuntime())
.noMinification()
.addOptionsModification(
options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
options.outline.threshold = 2;
options.outline.minSize = 2;
})
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java
index e384d9b..4b81714 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java
@@ -30,7 +30,7 @@
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ return getTestParameters().withAllRuntimes().build();
}
public PrimitiveTypesTest(TestParameters parameters) {
@@ -61,10 +61,14 @@
.addProgramClasses(testClass)
.addProgramClasses(MyStringBuilder.class)
.addKeepMainRule(testClass)
- .setMinApi(parameters.getApiLevel())
+ .setMinApi(parameters.getRuntime())
.noMinification()
.addOptionsModification(
options -> {
+ if (parameters.isCfRuntime()) {
+ assert !options.outline.enabled;
+ options.outline.enabled = true;
+ }
options.outline.threshold = 2;
options.outline.minSize = 2;
})