Include superclass rules in baseline profile rules
Bug: b/349914130
Change-Id: If8a3c5aa346339580aa877c078e41b2f3847bc4e
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
index a8bce12..16058e4 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
@@ -154,6 +154,9 @@
}
public ArtProfile rewrittenWithLens(AppView<?> appView, NamingLens lens) {
+ if (lens.isIdentityLens()) {
+ return this;
+ }
DexItemFactory dexItemFactory = appView.dexItemFactory();
assert !lens.isIdentityLens();
return transform(
diff --git a/src/main/java/com/android/tools/r8/profile/art/NonEmptyArtProfileCollection.java b/src/main/java/com/android/tools/r8/profile/art/NonEmptyArtProfileCollection.java
index c98371b..926bab4 100644
--- a/src/main/java/com/android/tools/r8/profile/art/NonEmptyArtProfileCollection.java
+++ b/src/main/java/com/android/tools/r8/profile/art/NonEmptyArtProfileCollection.java
@@ -81,19 +81,18 @@
return;
}
}
- NonEmptyArtProfileCollection collection =
- appView.getNamingLens().isIdentityLens()
- ? this
- : rewrittenWithLens(appView, appView.getNamingLens());
InternalOptions options = appView.options();
Collection<ArtProfileForRewriting> inputs =
options.getArtProfileOptions().getArtProfilesForRewriting();
assert !inputs.isEmpty();
- assert collection.artProfiles.size() == inputs.size();
+ assert artProfiles.size() == inputs.size();
Iterator<ArtProfileForRewriting> inputIterator = inputs.iterator();
- for (ArtProfile artProfile : collection.artProfiles) {
+ for (ArtProfile artProfile : artProfiles) {
ArtProfileForRewriting input = inputIterator.next();
- artProfile.supplyConsumer(input.getResidualArtProfileConsumer(), options.reporter);
+ artProfile
+ .toProfileWithSuperclasses(appView)
+ .rewrittenWithLens(appView, appView.getNamingLens())
+ .supplyConsumer(input.getResidualArtProfileConsumer(), options.reporter);
}
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java
index 811cb53..39ef47d 100644
--- a/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java
@@ -113,6 +113,9 @@
libraryDesugaringSpecification.functionPrefix(parameters) + ".util.function.Consumer");
assertThat(consumerClassSubject, isPresent());
+ ClassSubject baseStreamClassSubject = inspector.clazz("j$.util.stream.BaseStream");
+ assertThat(baseStreamClassSubject, isPresentAndRenamed(compilationSpecification.isL8Shrink()));
+
ClassSubject streamClassSubject = inspector.clazz("j$.util.stream.Stream");
assertThat(streamClassSubject, isPresentAndNotRenamed());
@@ -124,7 +127,10 @@
&& libraryDesugaringSpecification == LibraryDesugaringSpecification.JDK8));
assertEquals(consumerClassSubject.asTypeSubject(), forEachMethodSubject.getParameter(0));
- profileInspector.assertContainsMethodRule(forEachMethodSubject).assertContainsNoOtherRules();
+ profileInspector
+ .assertContainsClassRules(streamClassSubject, baseStreamClassSubject)
+ .assertContainsMethodRule(forEachMethodSubject)
+ .assertContainsNoOtherRules();
}
static class Main {
diff --git a/src/test/java/com/android/tools/r8/profile/art/IncludeTransitiveSuperClassesInArtProfileTest.java b/src/test/java/com/android/tools/r8/profile/art/IncludeTransitiveSuperClassesInArtProfileTest.java
index 8843a1d..322c207 100644
--- a/src/test/java/com/android/tools/r8/profile/art/IncludeTransitiveSuperClassesInArtProfileTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/IncludeTransitiveSuperClassesInArtProfileTest.java
@@ -42,9 +42,14 @@
.compile()
.inspectResidualArtProfile(
(profile, inspector) ->
- // TODO(b/349914130): Augment profile with transitive super classes.
profile
- .assertContainsClassRules(getFinalReference(C.class, inspector))
+ .assertContainsClassRules(
+ getFinalReference(A.class, inspector),
+ getFinalReference(B.class, inspector),
+ getFinalReference(C.class, inspector),
+ getFinalReference(I.class, inspector),
+ getFinalReference(J.class, inspector),
+ getFinalReference(K.class, inspector))
.assertContainsNoOtherRules());
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/ApiOutlineProfileRewritingShardTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/ApiOutlineProfileRewritingShardTest.java
index 709703c..aa6d410 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/ApiOutlineProfileRewritingShardTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/ApiOutlineProfileRewritingShardTest.java
@@ -17,6 +17,7 @@
import com.android.tools.r8.TestParametersCollection;
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.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
@@ -145,6 +146,7 @@
// Verify the residual profile contains the outline method and its holder when present.
profileInspector
+ .assertContainsClassRule(Reference.classFromClass(mainClass))
.assertContainsMethodRule(MethodReferenceUtils.mainMethod(mainClass))
.applyIf(
!isLibraryClassAlwaysPresent(),
@@ -172,8 +174,11 @@
// Verify the residual profile contains the outline method and its holder when present.
profileInspector
- .assertContainsMethodRule(MethodReferenceUtils.mainMethod(Main.class))
- .assertContainsMethodRule(MethodReferenceUtils.mainMethod(OtherMain.class))
+ .assertContainsClassRules(
+ Reference.classFromClass(Main.class), Reference.classFromClass(OtherMain.class))
+ .assertContainsMethodRules(
+ MethodReferenceUtils.mainMethod(Main.class),
+ MethodReferenceUtils.mainMethod(OtherMain.class))
.applyIf(
!isLibraryClassAlwaysPresent(),
i ->
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 acd0d3f..12d2ef4 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
@@ -18,6 +18,7 @@
import com.android.tools.r8.TestParametersCollection;
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.AndroidApiLevel;
import com.android.tools.r8.utils.MethodReferenceUtils;
@@ -146,6 +147,7 @@
// Verify the residual profile contains the outline method and its holder when present.
profileInspector
+ .assertContainsClassRule(Reference.classFromClass(Main.class))
.assertContainsMethodRule(MethodReferenceUtils.mainMethod(Main.class))
.applyIf(
!isLibraryClassAlwaysPresent,
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/BackportProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/BackportProfileRewritingTest.java
index c3d0996..3a3b463 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/BackportProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/BackportProfileRewritingTest.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.TestParametersCollection;
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.AndroidApiLevel;
import com.android.tools.r8.utils.InternalOptions.InlinerOptions;
@@ -96,6 +97,7 @@
// Verify residual profile contains the backported method and its holder.
profileInspector
+ .assertContainsClassRule(Reference.classFromClass(Main.class))
.assertContainsMethodRules(MethodReferenceUtils.mainMethod(Main.class))
.applyIf(
isBackportingObjectsNonNull,
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/DefaultInterfaceMethodProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/DefaultInterfaceMethodProfileRewritingTest.java
index c5adb71..c9db8f6 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/DefaultInterfaceMethodProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/DefaultInterfaceMethodProfileRewritingTest.java
@@ -95,7 +95,9 @@
MethodSubject interfaceMethodSubject = iClassSubject.uniqueMethodWithOriginalName("m");
assertThat(interfaceMethodSubject, isPresent());
- profileInspector.assertContainsMethodRule(interfaceMethodSubject);
+ profileInspector
+ .assertContainsClassRule(iClassSubject)
+ .assertContainsMethodRule(interfaceMethodSubject);
} else {
ClassSubject iClassSubject = inspector.clazz(I.class);
assertThat(iClassSubject, isPresent());
@@ -125,7 +127,8 @@
assertThat(movedMethodSubject, isPresent());
profileInspector
- .assertContainsClassRule(companionClassSubject)
+ .assertContainsClassRules(
+ aClassSubject, bClassSubject, iClassSubject, companionClassSubject)
.assertContainsMethodRules(
interfaceMethodSubject,
aForwardingMethodSubject,
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/EnumUnboxingUtilityMethodProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/EnumUnboxingUtilityMethodProfileRewritingTest.java
index 04133ca..74cd8dd 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/EnumUnboxingUtilityMethodProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/EnumUnboxingUtilityMethodProfileRewritingTest.java
@@ -99,7 +99,9 @@
profileInspector
.assertContainsClassRules(
- enumUnboxingLocalUtilityClassSubject, enumUnboxingSharedUtilityClassSubject)
+ mainClassSubject,
+ enumUnboxingLocalUtilityClassSubject,
+ enumUnboxingSharedUtilityClassSubject)
.assertContainsMethodRules(
mainClassSubject.mainMethod(),
localGreetMethodSubject,
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/HorizontallyMergedConstructorMethodProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/HorizontallyMergedConstructorMethodProfileRewritingTest.java
index faea413..c909872 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/HorizontallyMergedConstructorMethodProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/HorizontallyMergedConstructorMethodProfileRewritingTest.java
@@ -76,6 +76,7 @@
assertThat(syntheticConstructorSubject, isPresent());
profileInspector
+ .assertContainsClassRule(aClassSubject)
.assertContainsMethodRules(syntheticConstructorSubject)
.applyIf(
this == A_CONSTRUCTOR,
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/HorizontallyMergedVirtualMethodProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/HorizontallyMergedVirtualMethodProfileRewritingTest.java
index e4196f3..0ef50da 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/HorizontallyMergedVirtualMethodProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/HorizontallyMergedVirtualMethodProfileRewritingTest.java
@@ -70,6 +70,7 @@
assertEquals(aClassSubject.asTypeSubject(), syntheticBridgeMethodSubject.getParameter(0));
profileInspector
+ .assertContainsClassRule(aClassSubject)
.assertContainsMethodRules(movedMethodSubject, syntheticBridgeMethodSubject)
.assertContainsNoOtherRules();
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/InvokeSpecialToVirtualMethodProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/InvokeSpecialToVirtualMethodProfileRewritingTest.java
index 0b423ed..08803aa 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/InvokeSpecialToVirtualMethodProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/InvokeSpecialToVirtualMethodProfileRewritingTest.java
@@ -132,6 +132,7 @@
// Verify residual profile contains private synthetic method when present.
profileInspector
+ .assertContainsClassRule(mainClassSubject)
.assertContainsMethodRules(mMethodSubject, mMovedMethodSubject)
.assertContainsNoOtherRules();
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/LambdaStaticLibraryMethodImplementationProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/LambdaStaticLibraryMethodImplementationProfileRewritingTest.java
index 6eac7c2..56731cd 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/LambdaStaticLibraryMethodImplementationProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/LambdaStaticLibraryMethodImplementationProfileRewritingTest.java
@@ -4,8 +4,8 @@
package com.android.tools.r8.profile.art.completeness;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsentIf;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.codeinspector.Matchers.notIf;
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.TestBase;
@@ -75,7 +75,7 @@
}
private void inspectD8(ArtProfileInspector profileInspector, CodeInspector inspector) {
- inspect(profileInspector, inspector, false, false);
+ inspect(profileInspector, inspector, false, false, false);
}
private void inspectR8(ArtProfileInspector profileInspector, CodeInspector inspector) {
@@ -83,37 +83,44 @@
profileInspector,
inspector,
parameters.canHaveNonReboundConstructorInvoke(),
- parameters.isCfRuntime());
+ parameters.isCfRuntime(),
+ true);
}
public void inspect(
ArtProfileInspector profileInspector,
CodeInspector inspector,
boolean canHaveNonReboundConstructorInvoke,
- boolean canUseLambdas) {
+ boolean canUseLambdas,
+ boolean isR8) {
ClassSubject mainClassSubject = inspector.clazz(Main.class);
assertThat(mainClassSubject, isPresent());
MethodSubject mainMethodSubject = mainClassSubject.mainMethod();
assertThat(mainMethodSubject, isPresent());
+ ClassSubject setSupplierClassSubject = inspector.clazz(SetSupplier.class);
+ assertThat(setSupplierClassSubject, isAbsentIf(!canUseLambdas && isR8));
+
// Check the presence of the lambda class and its methods.
ClassSubject lambdaClassSubject =
inspector.clazz(SyntheticItemsTestUtils.syntheticLambdaClass(Main.class, 0));
- assertThat(lambdaClassSubject, notIf(isPresent(), canUseLambdas));
+ assertThat(lambdaClassSubject, isAbsentIf(canUseLambdas));
MethodSubject lambdaInitializerSubject = lambdaClassSubject.uniqueInstanceInitializer();
- assertThat(lambdaInitializerSubject, notIf(isPresent(), canUseLambdas));
+ assertThat(lambdaInitializerSubject, isAbsentIf(canUseLambdas));
MethodSubject lambdaMainMethodSubject =
lambdaClassSubject.uniqueMethodThatMatches(FoundMethodSubject::isVirtual);
- assertThat(lambdaMainMethodSubject, notIf(isPresent(), canUseLambdas));
+ assertThat(lambdaMainMethodSubject, isAbsentIf(canUseLambdas));
- if (canUseLambdas) {
- profileInspector.assertContainsMethodRule(mainMethodSubject);
- } else {
+ profileInspector
+ .assertContainsClassRules(mainClassSubject)
+ .assertContainsMethodRule(mainMethodSubject);
+ if (!canUseLambdas) {
profileInspector
.assertContainsClassRules(lambdaClassSubject)
+ .applyIf(!isR8, i -> i.assertContainsClassRule(setSupplierClassSubject))
.assertContainsMethodRules(
mainMethodSubject, lambdaInitializerSubject, lambdaMainMethodSubject);
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/MovedPrivateInterfaceMethodProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/MovedPrivateInterfaceMethodProfileRewritingTest.java
index 632fc0b..53ab39f 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/MovedPrivateInterfaceMethodProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/MovedPrivateInterfaceMethodProfileRewritingTest.java
@@ -125,6 +125,7 @@
assertThat(privateInterfaceMethodSubject, isPresent());
profileInspector
+ .assertContainsClassRule(iClassSubject)
.assertContainsMethodRule(privateInterfaceMethodSubject)
.assertContainsNoOtherRules();
} else {
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/MovedStaticInterfaceMethodProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/MovedStaticInterfaceMethodProfileRewritingTest.java
index ebf293e..7d06408 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/MovedStaticInterfaceMethodProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/MovedStaticInterfaceMethodProfileRewritingTest.java
@@ -141,6 +141,7 @@
assertThat(staticInterfaceMethodSubject, isPresent());
profileInspector
+ .assertContainsClassRule(iClassSubject)
.assertContainsMethodRule(staticInterfaceMethodSubject)
.assertContainsNoOtherRules();
} else {
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 f296a71..5756f2e 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
@@ -104,7 +104,12 @@
private void inspectD8(ArtProfileInspector profileInspector, CodeInspector inspector)
throws Exception {
- inspect(profileInspector, inspector, false, parameters.canUseNestBasedAccessesWhenDesugaring());
+ inspect(
+ profileInspector,
+ inspector,
+ false,
+ parameters.canUseNestBasedAccessesWhenDesugaring(),
+ false);
}
private void inspectR8(ArtProfileInspector profileInspector, CodeInspector inspector)
@@ -113,14 +118,16 @@
profileInspector,
inspector,
parameters.canHaveNonReboundConstructorInvoke(),
- parameters.canUseNestBasedAccesses());
+ parameters.canUseNestBasedAccesses(),
+ true);
}
private void inspect(
ArtProfileInspector profileInspector,
CodeInspector inspector,
boolean canHaveNonReboundConstructorInvoke,
- boolean canUseNestBasedAccesses)
+ boolean canUseNestBasedAccesses,
+ boolean isR8)
throws Exception {
ClassSubject nestMemberClassSubject = inspector.clazz(NestMember.class);
assertThat(nestMemberClassSubject, isPresent());
@@ -197,8 +204,12 @@
// Verify the residual profile contains the synthetic nest based access bridges and the
// synthetic constructor argument class.
profileInspector
+ .assertContainsClassRule(Reference.classFromClass(Main.class))
.assertContainsMethodRule(MethodReferenceUtils.mainMethod(Main.class))
.applyIf(
+ !isR8 || parameters.isDexRuntime(),
+ i -> i.assertContainsClassRule(nestMemberClassSubject))
+ .applyIf(
!canUseNestBasedAccesses,
i ->
i.assertContainsMethodRules(
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/OutlineOptimizationProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/OutlineOptimizationProfileRewritingTest.java
index 1c0ac50..0c4ceca 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/OutlineOptimizationProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/OutlineOptimizationProfileRewritingTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.TestParametersCollection;
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.InternalOptions.InlinerOptions;
import com.android.tools.r8.utils.MethodReferenceUtils;
@@ -70,6 +71,7 @@
// TODO(b/265729283): Should contain the outline class and method.
profileInspector
+ .assertContainsClassRule(Reference.classFromClass(Main.class))
.assertContainsMethodRule(MethodReferenceUtils.mainMethod(Main.class))
.assertContainsNoOtherRules();
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/RecordProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/RecordProfileRewritingTest.java
index cbab790..f0cd1ab 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/RecordProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/RecordProfileRewritingTest.java
@@ -300,7 +300,7 @@
toStringMethodSubject, ifThen(!canUseRecords, invokesMethod(toStringHelperMethodSubject)));
profileInspector
- .assertContainsClassRule(personRecordClassSubject)
+ .assertContainsClassRules(mainClassSubject, personRecordClassSubject)
.assertContainsMethodRules(
mainMethodSubject,
personInstanceInitializerSubject,
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
index 53fb532..a919381 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
@@ -134,11 +134,13 @@
switch (this) {
case MAIN_METHOD:
profileInspector
+ .assertContainsClassRule(mainClassSubject)
.assertContainsMethodRule(mainMethodSubject)
.assertContainsNoOtherRules();
break;
case IMPLEMENTATION_METHOD:
profileInspector
+ .assertContainsClassRule(mainClassSubject)
.assertContainsMethodRules(
lambdaImplementationMethod, otherLambdaImplementationMethod)
.assertContainsNoOtherRules();
@@ -153,7 +155,8 @@
// with their initializers. Since Main.lambda$main$*() is not in the art profile, the
// interface method implementation does not need to be included in the profile.
profileInspector
- .assertContainsClassRules(lambdaClassSubject, otherLambdaClassSubject)
+ .assertContainsClassRules(
+ mainClassSubject, lambdaClassSubject, otherLambdaClassSubject)
.assertContainsMethodRules(mainMethodSubject)
.applyIf(
!canHaveNonReboundConstructorInvoke,
@@ -166,6 +169,8 @@
// Since Main.lambda$main$*() is in the art profile, so should the two accessibility
// bridges be along with the main virtual methods of the lambda classes.
profileInspector
+ .assertContainsClassRules(
+ mainClassSubject, lambdaClassSubject, otherLambdaClassSubject)
.assertContainsMethodRules(
lambdaImplementationMethod,
lambdaMainMethodSubject,
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/TwrCloseResourceDuplicationProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/TwrCloseResourceDuplicationProfileRewritingTest.java
index b8db6f5..f840c33f 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/TwrCloseResourceDuplicationProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/TwrCloseResourceDuplicationProfileRewritingTest.java
@@ -159,11 +159,13 @@
barClassSubject.uniqueMethodWithOriginalName("$closeResource");
assertThat(barCloseResourceMethodSubject, isPresent());
- profileInspector.assertContainsMethodRules(
- fooMethodSubject,
- fooCloseResourceMethodSubject,
- barMethodSubject,
- barCloseResourceMethodSubject);
+ profileInspector
+ .assertContainsClassRules(fooClassSubject, barClassSubject)
+ .assertContainsMethodRules(
+ fooMethodSubject,
+ fooCloseResourceMethodSubject,
+ barMethodSubject,
+ barCloseResourceMethodSubject);
// There is 1 backport, 2 synthetic API outlines, and 3 twr classes for both Foo and Bar.
for (JavaExampleClassProxy clazz : ImmutableList.of(FOO, BAR)) {
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/VerticalClassMergingBridgeProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/VerticalClassMergingBridgeProfileRewritingTest.java
index 4493de9..10b893b 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/VerticalClassMergingBridgeProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/VerticalClassMergingBridgeProfileRewritingTest.java
@@ -78,6 +78,7 @@
assertThat(syntheticBridgeMethodSubject, isPresent());
profileInspector
+ .assertContainsClassRule(bClassSubject)
.assertContainsMethodRules(movedMethodSubject, syntheticBridgeMethodSubject)
.assertContainsNoOtherRules();
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/format/ArtProfileWithCommentsAndWhitespaceTest.java b/src/test/java/com/android/tools/r8/profile/art/format/ArtProfileWithCommentsAndWhitespaceTest.java
index c5fdf6c..77ffaf9 100644
--- a/src/test/java/com/android/tools/r8/profile/art/format/ArtProfileWithCommentsAndWhitespaceTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/format/ArtProfileWithCommentsAndWhitespaceTest.java
@@ -100,7 +100,10 @@
}
private void inspectResidualArtProfile(ArtProfileInspector profileInspector) {
- profileInspector.assertContainsMethodRule(MAIN_METHOD_REFERENCE).assertContainsNoOtherRules();
+ profileInspector
+ .assertContainsClassRule(MAIN_METHOD_REFERENCE.getHolderClass())
+ .assertContainsMethodRule(MAIN_METHOD_REFERENCE)
+ .assertContainsNoOtherRules();
}
static class Main {
diff --git a/src/test/java/com/android/tools/r8/profile/art/format/ArtProfileWithFlagsInAnyOrderTest.java b/src/test/java/com/android/tools/r8/profile/art/format/ArtProfileWithFlagsInAnyOrderTest.java
index 45ab398..f4a074d 100644
--- a/src/test/java/com/android/tools/r8/profile/art/format/ArtProfileWithFlagsInAnyOrderTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/format/ArtProfileWithFlagsInAnyOrderTest.java
@@ -114,6 +114,7 @@
private void inspectResidualArtProfile(ArtProfileInspector profileInspector) {
profileInspector
+ .assertContainsClassRule(MAIN_METHOD_REFERENCE.getHolderClass())
.inspectMethodRule(
MAIN_METHOD_REFERENCE,
ruleInspector -> ruleInspector.assertIsHot().assertIsStartup().assertIsPostStartup())