Update tests for adding synthetics to baseline profile
Change-Id: I9a38476ae80ef77fadbee019eb48cd4346d37f7a
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/ApiOutlineProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/ApiOutlineProfileRewritingTest.java
index 02a4fe6..f5959e8 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/ApiOutlineProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/ApiOutlineProfileRewritingTest.java
@@ -16,7 +16,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.apimodel.ApiModelingTestHelper;
import com.android.tools.r8.profile.art.model.ExternalArtProfile;
import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
@@ -79,8 +78,6 @@
.addKeepMainRule(Main.class)
.addArtProfileForRewriting(getArtProfile())
.apply(setMockApiLevelForClass(LibraryClass.class, classApiLevel))
- .apply(ApiModelingTestHelper::enableApiCallerIdentification)
- .apply(ApiModelingTestHelper::enableOutliningOfMethods)
.setMinApi(parameters.getApiLevel())
.compile()
.inspectResidualArtProfile(this::inspect)
@@ -104,7 +101,7 @@
.hasConstClassOutlinedFromUntil(
Main.class.getMethod("main", String[].class), classApiLevel);
- // Check outline was added to ART profile.
+ // Check outline was added to program.
ClassSubject apiOutlineClassSubject =
inspector.clazz(SyntheticItemsTestUtils.syntheticApiOutlineClass(Main.class, 0));
assertThat(apiOutlineClassSubject, notIf(isPresent(), isLibraryClassAlwaysPresent()));
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/NestBasedAccessBridgesProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/NestBasedAccessBridgesProfileRewritingTest.java
index 81a74af..e376dbc 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/NestBasedAccessBridgesProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/NestBasedAccessBridgesProfileRewritingTest.java
@@ -18,6 +18,7 @@
import com.android.tools.r8.profile.art.completeness.NestBasedAccessBridgesProfileRewritingTest.Main.NestMember;
import com.android.tools.r8.profile.art.model.ExternalArtProfile;
import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
+import com.android.tools.r8.references.Reference;
import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
import com.android.tools.r8.utils.MethodReferenceUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -59,6 +60,7 @@
.addProgramClassFileData(getProgramClassFileData())
.addKeepMainRule(Main.class)
.addArtProfileForRewriting(getArtProfile())
+ .addOptionsModification(options -> options.callSiteOptimizationOptions().setEnabled(false))
.enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
@@ -72,6 +74,7 @@
transformer(Main.class).setNest(Main.class, NestMember.class).transform(),
transformer(NestMember.class)
.setNest(Main.class, NestMember.class)
+ .setPrivate(NestMember.class.getDeclaredConstructor())
.setPrivate(NestMember.class.getDeclaredField("instanceField"))
.setPrivate(NestMember.class.getDeclaredField("staticField"))
.setPrivate(NestMember.class.getDeclaredMethod("instanceMethod"))
@@ -90,6 +93,14 @@
ClassSubject nestMemberClassSubject = inspector.clazz(NestMember.class);
assertThat(nestMemberClassSubject, isPresent());
+ ClassSubject syntheticConstructorArgumentClassSubject =
+ inspector.clazz(
+ SyntheticItemsTestUtils.syntheticNestConstructorArgumentClass(
+ Reference.classFromClass(NestMember.class)));
+ assertThat(
+ syntheticConstructorArgumentClassSubject,
+ notIf(isPresent(), parameters.canUseNestBasedAccesses()));
+
MethodSubject syntheticNestInstanceFieldGetterMethodSubject =
nestMemberClassSubject.uniqueMethodWithOriginalName(
SyntheticItemsTestUtils.syntheticNestInstanceFieldGetter(
@@ -144,7 +155,8 @@
syntheticNestStaticMethodAccessorMethodSubject,
notIf(isPresent(), parameters.canUseNestBasedAccesses()));
- // TODO(b/265729283): Should contain the nest bridge methods.
+ // TODO(b/265729283): Should contain the nest bridge methods and the synthesized constructor
+ // argument class.
profileInspector
.assertContainsMethodRule(MethodReferenceUtils.mainMethod(Main.class))
.assertContainsNoOtherRules();
@@ -167,6 +179,8 @@
/*private*/ int instanceField;
/*private*/ static int staticField;
+ /*private*/ NestMember() {}
+
@NeverInline
/*private*/ int instanceMethod() {
return System.currentTimeMillis() > 0 ? 2 : 0;
diff --git a/src/test/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java b/src/test/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java
index 19ed989..cf968ea 100644
--- a/src/test/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java
+++ b/src/test/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java
@@ -146,6 +146,13 @@
originalMethod.getMethodDescriptor());
}
+ public static ClassReference syntheticNestConstructorArgumentClass(
+ ClassReference classReference) {
+ return Reference.classFromDescriptor(
+ SyntheticNaming.createDescriptor(
+ "", naming.INIT_TYPE_ARGUMENT, classReference.getBinaryName(), ""));
+ }
+
public static MethodReference syntheticNestInstanceFieldGetter(Field field) {
FieldReference fieldReference = Reference.fieldFromField(field);
return Reference.method(
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
index 7742119..4adbc9a 100644
--- a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
+++ b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
@@ -502,14 +502,22 @@
return setAccessFlags(method, MethodAccessFlags::setBridge);
}
+ public ClassFileTransformer setPrivate(Constructor<?> constructor) {
+ return setAccessFlags(constructor, ClassFileTransformer::setPrivate);
+ }
+
public ClassFileTransformer setPrivate(Field field) {
- return setAccessFlags(
- field,
- accessFlags -> {
- accessFlags.setPrivate();
- accessFlags.unsetProtected();
- accessFlags.unsetPublic();
- });
+ return setAccessFlags(field, ClassFileTransformer::setPrivate);
+ }
+
+ public ClassFileTransformer setPrivate(Method method) {
+ return setAccessFlags(method, ClassFileTransformer::setPrivate);
+ }
+
+ private static void setPrivate(AccessFlags<?> accessFlags) {
+ accessFlags.unsetPublic();
+ accessFlags.unsetProtected();
+ accessFlags.setPrivate();
}
public ClassFileTransformer setPublic(Method method) {
@@ -522,16 +530,6 @@
});
}
- public ClassFileTransformer setPrivate(Method method) {
- return setAccessFlags(
- method,
- accessFlags -> {
- accessFlags.unsetPublic();
- accessFlags.unsetProtected();
- accessFlags.setPrivate();
- });
- }
-
public ClassFileTransformer setSynthetic(Method method) {
return setAccessFlags(method, AccessFlags::setSynthetic);
}