Move startup profile to AppView
Change-Id: Ib6d849b4512fb1b0cd95f052c71812182c576b39
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index 99cb304..e2d9423 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -243,7 +243,7 @@
// order is only used for writing the app, so we create it here for the first time.
StartupOrder startupOrder =
appView.appInfo().hasClassHierarchy()
- ? appView.appInfoWithClassHierarchy().getStartupOrder()
+ ? appView.getStartupOrder()
: StartupOrder.createInitialStartupOrderForD8(appView);
distributor =
new VirtualFile.FillFilesDistributor(
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupCompleteness.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupCompleteness.java
index 6ef463d..6291d1e 100644
--- a/src/main/java/com/android/tools/r8/experimental/startup/StartupCompleteness.java
+++ b/src/main/java/com/android/tools/r8/experimental/startup/StartupCompleteness.java
@@ -35,7 +35,7 @@
this.appView = appView;
this.startupOrder =
appView.hasClassHierarchy()
- ? appView.appInfoWithClassHierarchy().getStartupOrder()
+ ? appView.getStartupOrder()
: StartupOrder.createInitialStartupOrder(
appView.options(), null, syntheticToSyntheticContextGeneralization);
}
diff --git a/src/main/java/com/android/tools/r8/features/ClassToFeatureSplitMap.java b/src/main/java/com/android/tools/r8/features/ClassToFeatureSplitMap.java
index fd710bb..84c8a96 100644
--- a/src/main/java/com/android/tools/r8/features/ClassToFeatureSplitMap.java
+++ b/src/main/java/com/android/tools/r8/features/ClassToFeatureSplitMap.java
@@ -106,10 +106,7 @@
public Map<FeatureSplit, Set<DexProgramClass>> getFeatureSplitClasses(
Set<DexProgramClass> classes, AppView<? extends AppInfoWithClassHierarchy> appView) {
return getFeatureSplitClasses(
- classes,
- appView.options(),
- appView.appInfo().getStartupOrder(),
- appView.getSyntheticItems());
+ classes, appView.options(), appView.getStartupOrder(), appView.getSyntheticItems());
}
public Map<FeatureSplit, Set<DexProgramClass>> getFeatureSplitClasses(
@@ -130,10 +127,7 @@
public FeatureSplit getFeatureSplit(
ProgramDefinition definition, AppView<? extends AppInfoWithClassHierarchy> appView) {
return getFeatureSplit(
- definition,
- appView.options(),
- appView.appInfo().getStartupOrder(),
- appView.getSyntheticItems());
+ definition, appView.options(), appView.getStartupOrder(), appView.getSyntheticItems());
}
public FeatureSplit getFeatureSplit(
@@ -147,7 +141,7 @@
public FeatureSplit getFeatureSplit(
DexType type, AppView<? extends AppInfoWithClassHierarchy> appView) {
return getFeatureSplit(
- type, appView.options(), appView.appInfo().getStartupOrder(), appView.getSyntheticItems());
+ type, appView.options(), appView.getStartupOrder(), appView.getSyntheticItems());
}
public FeatureSplit getFeatureSplit(
@@ -199,7 +193,7 @@
public boolean isInBase(
DexProgramClass clazz, AppView<? extends AppInfoWithClassHierarchy> appView) {
return isInBase(
- clazz, appView.options(), appView.appInfo().getStartupOrder(), appView.getSyntheticItems());
+ clazz, appView.options(), appView.getStartupOrder(), appView.getSyntheticItems());
}
public boolean isInBase(
@@ -215,11 +209,7 @@
ProgramDefinition context,
AppView<? extends AppInfoWithClassHierarchy> appView) {
return isInBaseOrSameFeatureAs(
- clazz,
- context,
- appView.options(),
- appView.appInfo().getStartupOrder(),
- appView.getSyntheticItems());
+ clazz, context, appView.options(), appView.getStartupOrder(), appView.getSyntheticItems());
}
public boolean isInBaseOrSameFeatureAs(
@@ -237,11 +227,7 @@
ProgramDefinition context,
AppView<? extends AppInfoWithClassHierarchy> appView) {
return isInBaseOrSameFeatureAs(
- clazz,
- context,
- appView.options(),
- appView.appInfo().getStartupOrder(),
- appView.getSyntheticItems());
+ clazz, context, appView.options(), appView.getStartupOrder(), appView.getSyntheticItems());
}
public boolean isInBaseOrSameFeatureAs(
@@ -266,7 +252,7 @@
public boolean isInSameFeatureOrBothInSameBase(
ProgramMethod a, ProgramMethod b, AppView<? extends AppInfoWithClassHierarchy> appView) {
return isInSameFeatureOrBothInSameBase(
- a, b, appView.options(), appView.appInfo().getStartupOrder(), appView.getSyntheticItems());
+ a, b, appView.options(), appView.getStartupOrder(), appView.getSyntheticItems());
}
public boolean isInSameFeatureOrBothInSameBase(
@@ -282,7 +268,7 @@
public boolean isInSameFeatureOrBothInSameBase(
DexProgramClass a, DexProgramClass b, AppView<? extends AppInfoWithClassHierarchy> appView) {
return isInSameFeatureOrBothInSameBase(
- a, b, appView.options(), appView.appInfo().getStartupOrder(), appView.getSyntheticItems());
+ a, b, appView.options(), appView.getStartupOrder(), appView.getSyntheticItems());
}
public boolean isInSameFeatureOrBothInSameBase(
@@ -335,9 +321,6 @@
DexProgramClass clazz, AppView<? extends AppInfoWithClassHierarchy> appView) {
return getMap(appView)
.isInFeature(
- clazz,
- appView.options(),
- appView.appInfo().getStartupOrder(),
- appView.getSyntheticItems());
+ clazz, appView.options(), appView.getStartupOrder(), appView.getSyntheticItems());
}
}
diff --git a/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java b/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java
index 8e2fbb4..68cf4a9 100644
--- a/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java
+++ b/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java
@@ -66,7 +66,7 @@
}
// Next perform startup checks.
- StartupOrder startupOrder = appView.appInfo().getStartupOrder();
+ StartupOrder startupOrder = appView.getStartupOrder();
SyntheticItems syntheticItems = appView.getSyntheticItems();
OptionalBool callerIsStartupMethod = isStartupMethod(caller, startupOrder, syntheticItems);
if (callerIsStartupMethod.isTrue()) {
@@ -115,7 +115,7 @@
// If the source class is a startup class then require that the target class is also a startup
// class.
- StartupOrder startupOrder = appView.appInfo().getStartupOrder();
+ StartupOrder startupOrder = appView.getStartupOrder();
SyntheticItems syntheticItems = appView.getSyntheticItems();
if (startupOrder.contains(sourceClass.getType(), syntheticItems)
&& !startupOrder.contains(targetClass.getType(), syntheticItems)) {
diff --git a/src/main/java/com/android/tools/r8/graph/AccessControl.java b/src/main/java/com/android/tools/r8/graph/AccessControl.java
index 9211db6..40bbf74 100644
--- a/src/main/java/com/android/tools/r8/graph/AccessControl.java
+++ b/src/main/java/com/android/tools/r8/graph/AccessControl.java
@@ -27,7 +27,7 @@
context,
appView.appInfo().getClassToFeatureSplitMap(),
appView.options(),
- appView.appInfo().getStartupOrder(),
+ appView.getStartupOrder(),
appView.getSyntheticItems());
}
@@ -58,37 +58,40 @@
/** Intentionally package-private, use {@link MemberResolutionResult#isAccessibleFrom}. */
static OptionalBool isMemberAccessible(
SuccessfulMemberResolutionResult<?, ?> resolutionResult,
- ProgramDefinition context,
+ Definition context,
+ AppView<?> appView,
AppInfoWithClassHierarchy appInfo) {
return isMemberAccessible(
resolutionResult.getResolutionPair(),
resolutionResult.getInitialResolutionHolder(),
- context.getContextClass(),
+ context,
+ appView,
appInfo);
}
public static OptionalBool isMemberAccessible(
DexClassAndMember<?, ?> member,
- DexClass initialResolutionHolder,
- ProgramDefinition context,
+ Definition initialResolutionContext,
+ Definition context,
AppView<? extends AppInfoWithClassHierarchy> appView) {
return isMemberAccessible(
- member, initialResolutionHolder, context.getContextClass(), appView.appInfo());
+ member, initialResolutionContext, context, appView, appView.appInfo());
}
static OptionalBool isMemberAccessible(
DexClassAndMember<?, ?> member,
- DexClass initialResolutionHolder,
- DexClass context,
+ Definition initialResolutionContext,
+ Definition context,
+ AppView<?> appView,
AppInfoWithClassHierarchy appInfo) {
AccessFlags<?> memberFlags = member.getDefinition().getAccessFlags();
OptionalBool classAccessibility =
isClassAccessible(
- initialResolutionHolder,
+ initialResolutionContext.getContextClass(),
context,
appInfo.getClassToFeatureSplitMap(),
appInfo.options(),
- appInfo.getStartupOrder(),
+ appView.getStartupOrder(),
appInfo.getSyntheticItems());
if (classAccessibility.isFalse()) {
return OptionalBool.FALSE;
@@ -97,15 +100,16 @@
return classAccessibility;
}
if (memberFlags.isPrivate()) {
- if (!isNestMate(member.getHolder(), context)) {
+ if (!isNestMate(member.getHolder(), context.getContextClass())) {
return OptionalBool.FALSE;
}
return classAccessibility;
}
- if (member.getHolderType().isSamePackage(context.getType())) {
+ if (member.getHolderType().isSamePackage(context.getContextType())) {
return classAccessibility;
}
- if (memberFlags.isProtected() && appInfo.isSubtype(context.getType(), member.getHolderType())) {
+ if (memberFlags.isProtected()
+ && appInfo.isSubtype(context.getContextType(), member.getHolderType())) {
return classAccessibility;
}
return OptionalBool.FALSE;
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java b/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
index 1536cd8..e834153 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
@@ -7,7 +7,6 @@
import static com.android.tools.r8.utils.TraversalContinuation.doBreak;
import static com.android.tools.r8.utils.TraversalContinuation.doContinue;
-import com.android.tools.r8.experimental.startup.StartupOrder;
import com.android.tools.r8.features.ClassToFeatureSplitMap;
import com.android.tools.r8.ir.analysis.type.InterfaceCollection;
import com.android.tools.r8.ir.analysis.type.InterfaceCollection.Builder;
@@ -50,18 +49,15 @@
DexApplication application,
ClassToFeatureSplitMap classToFeatureSplitMap,
MainDexInfo mainDexInfo,
- GlobalSyntheticsStrategy globalSyntheticsStrategy,
- StartupOrder startupOrder) {
+ GlobalSyntheticsStrategy globalSyntheticsStrategy) {
return new AppInfoWithClassHierarchy(
SyntheticItems.createInitialSyntheticItems(application, globalSyntheticsStrategy),
classToFeatureSplitMap,
mainDexInfo,
- MissingClasses.empty(),
- startupOrder);
+ MissingClasses.empty());
}
private final ClassToFeatureSplitMap classToFeatureSplitMap;
- private final StartupOrder startupOrder;
/** Set of types that are mentioned in the program, but for which no definition exists. */
// TODO(b/175659048): Consider hoisting to AppInfo to allow using MissingClasses in D8 desugar.
@@ -72,12 +68,10 @@
CommittedItems committedItems,
ClassToFeatureSplitMap classToFeatureSplitMap,
MainDexInfo mainDexInfo,
- MissingClasses missingClasses,
- StartupOrder startupOrder) {
+ MissingClasses missingClasses) {
super(committedItems, mainDexInfo);
this.classToFeatureSplitMap = classToFeatureSplitMap;
this.missingClasses = missingClasses;
- this.startupOrder = startupOrder;
}
// For desugaring.
@@ -87,7 +81,6 @@
// TODO(b/175659048): Migrate the reporting of missing classes in D8 desugar to MissingClasses,
// and use the missing classes from AppInfo instead of MissingClasses.empty().
this.missingClasses = MissingClasses.empty();
- this.startupOrder = StartupOrder.empty();
}
public static AppInfoWithClassHierarchy createForDesugaring(AppInfo appInfo) {
@@ -97,11 +90,7 @@
public final AppInfoWithClassHierarchy rebuildWithClassHierarchy(CommittedItems commit) {
return new AppInfoWithClassHierarchy(
- commit,
- getClassToFeatureSplitMap(),
- getMainDexInfo(),
- getMissingClasses(),
- getStartupOrder());
+ commit, getClassToFeatureSplitMap(), getMainDexInfo(), getMissingClasses());
}
public AppInfoWithClassHierarchy rebuildWithClassHierarchy(
@@ -111,8 +100,7 @@
getSyntheticItems().commit(fn.apply(app())),
getClassToFeatureSplitMap(),
getMainDexInfo(),
- getMissingClasses(),
- getStartupOrder());
+ getMissingClasses());
}
@Override
@@ -123,8 +111,7 @@
getSyntheticItems().commit(app()),
getClassToFeatureSplitMap(),
mainDexInfo,
- getMissingClasses(),
- getStartupOrder());
+ getMissingClasses());
}
@Override
@@ -140,8 +127,7 @@
getSyntheticItems().commitPrunedItems(prunedItems),
getClassToFeatureSplitMap().withoutPrunedItems(prunedItems),
getMainDexInfo().withoutPrunedItems(prunedItems),
- getMissingClasses(),
- getStartupOrder().withoutPrunedItems(prunedItems, getSyntheticItems()));
+ getMissingClasses());
}
public ClassToFeatureSplitMap getClassToFeatureSplitMap() {
@@ -152,10 +138,6 @@
return missingClasses;
}
- public StartupOrder getStartupOrder() {
- return startupOrder;
- }
-
@Override
public boolean hasClassHierarchy() {
assert checkIfObsolete();
@@ -621,14 +603,37 @@
* @return The actual target for {@code method} or {@code null} if none found.
*/
// TODO(b/155968472): This should take a parameter `boolean isInterface` and use resolveMethod().
- public DexEncodedMethod lookupStaticTarget(DexMethod method, DexProgramClass context) {
+ public DexEncodedMethod lookupStaticTarget(
+ DexMethod method,
+ DexProgramClass context,
+ AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return lookupStaticTarget(method, context, appView, appView.appInfo());
+ }
+
+ public DexEncodedMethod lookupStaticTarget(
+ DexMethod method,
+ DexProgramClass context,
+ AppView<?> appView,
+ AppInfoWithClassHierarchy appInfo) {
assert checkIfObsolete();
- return unsafeResolveMethodDueToDexFormatLegacy(method).lookupInvokeStaticTarget(context, this);
+ return unsafeResolveMethodDueToDexFormatLegacy(method)
+ .lookupInvokeStaticTarget(context, appView, appInfo);
}
// TODO(b/155968472): This should take a parameter `boolean isInterface` and use resolveMethod().
- public DexEncodedMethod lookupStaticTarget(DexMethod method, ProgramMethod context) {
- return lookupStaticTarget(method, context.getHolder());
+ public DexEncodedMethod lookupStaticTarget(
+ DexMethod method,
+ ProgramMethod context,
+ AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return lookupStaticTarget(method, context.getHolder(), appView);
+ }
+
+ public DexEncodedMethod lookupStaticTarget(
+ DexMethod method,
+ ProgramMethod context,
+ AppView<?> appView,
+ AppInfoWithClassHierarchy appInfo) {
+ return lookupStaticTarget(method, context.getHolder(), appView, appInfo);
}
/**
@@ -642,14 +647,37 @@
* @return The actual target for {@code method} or {@code null} if none found.
*/
// TODO(b/155968472): This should take a parameter `boolean isInterface` and use resolveMethod().
- public DexClassAndMethod lookupSuperTarget(DexMethod method, DexProgramClass context) {
+ public DexClassAndMethod lookupSuperTarget(
+ DexMethod method,
+ DexProgramClass context,
+ AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return lookupSuperTarget(method, context, appView, appView.appInfo());
+ }
+
+ public DexClassAndMethod lookupSuperTarget(
+ DexMethod method,
+ DexProgramClass context,
+ AppView<?> appView,
+ AppInfoWithClassHierarchy appInfo) {
assert checkIfObsolete();
- return unsafeResolveMethodDueToDexFormatLegacy(method).lookupInvokeSuperTarget(context, this);
+ return unsafeResolveMethodDueToDexFormatLegacy(method)
+ .lookupInvokeSuperTarget(context, appView, appInfo);
}
// TODO(b/155968472): This should take a parameter `boolean isInterface` and use resolveMethod().
- public DexClassAndMethod lookupSuperTarget(DexMethod method, ProgramMethod context) {
- return lookupSuperTarget(method, context.getHolder());
+ public final DexClassAndMethod lookupSuperTarget(
+ DexMethod method,
+ ProgramMethod context,
+ AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return lookupSuperTarget(method, context, appView, appView.appInfo());
+ }
+
+ public final DexClassAndMethod lookupSuperTarget(
+ DexMethod method,
+ ProgramMethod context,
+ AppView<?> appView,
+ AppInfoWithClassHierarchy appInfo) {
+ return lookupSuperTarget(method, context.getHolder(), appView, appInfo);
}
/**
@@ -661,14 +689,37 @@
* @return The actual target for {@code method} or {@code null} if none found.
*/
// TODO(b/155968472): This should take a parameter `boolean isInterface` and use resolveMethod().
- public DexEncodedMethod lookupDirectTarget(DexMethod method, DexProgramClass context) {
+ public DexEncodedMethod lookupDirectTarget(
+ DexMethod method,
+ DexProgramClass context,
+ AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return lookupDirectTarget(method, context, appView, appView.appInfo());
+ }
+
+ public DexEncodedMethod lookupDirectTarget(
+ DexMethod method,
+ DexProgramClass context,
+ AppView<?> appView,
+ AppInfoWithClassHierarchy appInfo) {
assert checkIfObsolete();
- return unsafeResolveMethodDueToDexFormatLegacy(method).lookupInvokeDirectTarget(context, this);
+ return unsafeResolveMethodDueToDexFormatLegacy(method)
+ .lookupInvokeDirectTarget(context, appView, appInfo);
}
// TODO(b/155968472): This should take a parameter `boolean isInterface` and use resolveMethod().
- public DexEncodedMethod lookupDirectTarget(DexMethod method, ProgramMethod context) {
- return lookupDirectTarget(method, context.getHolder());
+ public DexEncodedMethod lookupDirectTarget(
+ DexMethod method,
+ ProgramMethod context,
+ AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return lookupDirectTarget(method, context, appView, appView.appInfo());
+ }
+
+ public DexEncodedMethod lookupDirectTarget(
+ DexMethod method,
+ ProgramMethod context,
+ AppView<?> appView,
+ AppInfoWithClassHierarchy appInfo) {
+ return lookupDirectTarget(method, context.getHolder(), appView, appInfo);
}
/**
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 9560129..42a4744 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -87,6 +87,8 @@
private ProguardCompatibilityActions proguardCompatibilityActions;
private RootSet rootSet;
private MainDexRootSet mainDexRootSet = null;
+ private StartupOrder startupOrder;
+
// This should preferably always be obtained via AppInfoWithLiveness.
// Currently however the liveness may be downgraded thus loosing the computed keep info.
private KeepInfoCollection keepInfo = null;
@@ -138,14 +140,22 @@
private AppView(
T appInfo,
ArtProfileCollection artProfileCollection,
+ StartupOrder startupOrder,
WholeProgramOptimizations wholeProgramOptimizations,
TypeRewriter mapper) {
- this(appInfo, artProfileCollection, wholeProgramOptimizations, mapper, Timing.empty());
+ this(
+ appInfo,
+ artProfileCollection,
+ startupOrder,
+ wholeProgramOptimizations,
+ mapper,
+ Timing.empty());
}
private AppView(
T appInfo,
ArtProfileCollection artProfileCollection,
+ StartupOrder startupOrder,
WholeProgramOptimizations wholeProgramOptimizations,
TypeRewriter mapper,
Timing timing) {
@@ -155,6 +165,7 @@
timing.time(
"Compilation context", () -> CompilationContext.createInitialContext(options()));
this.artProfileCollection = artProfileCollection;
+ this.startupOrder = startupOrder;
this.dontWarnConfiguration =
timing.time(
"Dont warn config",
@@ -200,6 +211,7 @@
return new AppView<>(
appInfo,
ArtProfileCollection.createInitialArtProfileCollection(appInfo, appInfo.options()),
+ StartupOrder.empty(),
WholeProgramOptimizations.OFF,
defaultTypeRewriter(appInfo));
}
@@ -208,6 +220,7 @@
return new AppView<>(
appInfo,
ArtProfileCollection.empty(),
+ StartupOrder.empty(),
WholeProgramOptimizations.OFF,
defaultTypeRewriter(appInfo));
}
@@ -217,6 +230,7 @@
return new AppView<>(
appInfo,
ArtProfileCollection.createInitialArtProfileCollection(appInfo, appInfo.options()),
+ StartupOrder.empty(),
WholeProgramOptimizations.OFF,
mapper,
timing);
@@ -230,17 +244,16 @@
DexApplication application, MainDexInfo mainDexInfo) {
ClassToFeatureSplitMap classToFeatureSplitMap =
ClassToFeatureSplitMap.createInitialClassToFeatureSplitMap(application.options);
- StartupOrder startupOrder = StartupOrder.createInitialStartupOrderForR8(application);
AppInfoWithClassHierarchy appInfo =
AppInfoWithClassHierarchy.createInitialAppInfoWithClassHierarchy(
application,
classToFeatureSplitMap,
mainDexInfo,
- GlobalSyntheticsStrategy.forSingleOutputMode(),
- startupOrder);
+ GlobalSyntheticsStrategy.forSingleOutputMode());
return new AppView<>(
appInfo,
ArtProfileCollection.createInitialArtProfileCollection(appInfo, appInfo.options()),
+ StartupOrder.createInitialStartupOrderForR8(application),
WholeProgramOptimizations.ON,
defaultTypeRewriter(appInfo));
}
@@ -249,6 +262,7 @@
return new AppView<>(
appInfo,
ArtProfileCollection.createInitialArtProfileCollection(appInfo, appInfo.options()),
+ StartupOrder.empty(),
WholeProgramOptimizations.OFF,
mapper);
}
@@ -257,6 +271,7 @@
return new AppView<>(
appInfo,
ArtProfileCollection.empty(),
+ StartupOrder.empty(),
WholeProgramOptimizations.OFF,
defaultTypeRewriter(appInfo));
}
@@ -266,6 +281,7 @@
return new AppView<>(
appInfo,
ArtProfileCollection.empty(),
+ StartupOrder.empty(),
WholeProgramOptimizations.ON,
defaultTypeRewriter(appInfo));
}
@@ -361,6 +377,14 @@
this.artProfileCollection = artProfileCollection;
}
+ public StartupOrder getStartupOrder() {
+ return startupOrder;
+ }
+
+ public void setStartupOrder(StartupOrder startupOrder) {
+ this.startupOrder = startupOrder;
+ }
+
public AssumeInfoCollection getAssumeInfoCollection() {
return assumeInfoCollection;
}
@@ -827,6 +851,7 @@
if (hasRootSet()) {
rootSet.pruneItems(prunedItems);
}
+ setStartupOrder(getStartupOrder().withoutPrunedItems(prunedItems, getSyntheticItems()));
if (hasMainDexRootSet()) {
setMainDexRootSet(mainDexRootSet.withoutPrunedItems(prunedItems));
}
@@ -946,6 +971,7 @@
if (appView.hasRootSet()) {
appView.setRootSet(appView.rootSet().rewrittenWithLens(lens));
}
+ appView.setStartupOrder(appView.getStartupOrder().rewrittenWithLens(lens));
});
}
diff --git a/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java b/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
index 196864a..9a6d7cb 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
@@ -197,8 +197,8 @@
@Override
public OptionalBool isAccessibleFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
- return AccessControl.isMemberAccessible(this, context, appInfo);
+ ProgramDefinition context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
+ return AccessControl.isMemberAccessible(this, context, appView, appInfo);
}
@Override
@@ -382,7 +382,7 @@
@Override
public OptionalBool isAccessibleFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
+ ProgramDefinition context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
throw new Unimplemented("Should not be called on MultipleFieldResolutionResult");
}
@@ -456,7 +456,7 @@
@Override
public OptionalBool isAccessibleFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
+ ProgramDefinition context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
return OptionalBool.FALSE;
}
diff --git a/src/main/java/com/android/tools/r8/graph/MemberResolutionResult.java b/src/main/java/com/android/tools/r8/graph/MemberResolutionResult.java
index e5467ff..47f8a33 100644
--- a/src/main/java/com/android/tools/r8/graph/MemberResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/MemberResolutionResult.java
@@ -17,14 +17,14 @@
public abstract SuccessfulMemberResolutionResult<D, R> asSuccessfulMemberResolutionResult();
- public abstract OptionalBool isAccessibleFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo);
-
public final OptionalBool isAccessibleFrom(
ProgramDefinition context, AppView<? extends AppInfoWithClassHierarchy> appView) {
- return isAccessibleFrom(context, appView.appInfo());
+ return isAccessibleFrom(context, appView, appView.appInfo());
}
+ public abstract OptionalBool isAccessibleFrom(
+ ProgramDefinition context, AppView<?> appView, AppInfoWithClassHierarchy appInfo);
+
/**
* Returns true if resolution failed.
*
diff --git a/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java b/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java
index ef0d7ff..14c36c3 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java
@@ -75,7 +75,13 @@
return false;
}
- public boolean isNoSuchMethodErrorResult(DexClass context, AppInfoWithClassHierarchy appInfo) {
+ public final boolean isNoSuchMethodErrorResult(
+ DexClass context, AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return isNoSuchMethodErrorResult(context, appView, appView.appInfo());
+ }
+
+ public boolean isNoSuchMethodErrorResult(
+ DexClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
return false;
}
@@ -83,7 +89,13 @@
return false;
}
- public boolean isIllegalAccessErrorResult(DexClass context, AppInfoWithClassHierarchy appInfo) {
+ public final boolean isIllegalAccessErrorResult(
+ DexClass context, AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return isIllegalAccessErrorResult(context, appView, appView.appInfo());
+ }
+
+ public boolean isIllegalAccessErrorResult(
+ DexClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
return false;
}
@@ -139,41 +151,57 @@
}
public abstract OptionalBool isAccessibleForVirtualDispatchFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo);
+ ProgramDefinition context, AppView<? extends AppInfoWithClassHierarchy> appView);
public abstract boolean isVirtualTarget();
/** Lookup the single target of an invoke-special on this resolution result if possible. */
public abstract DexClassAndMethod lookupInvokeSpecialTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo);
+ DexProgramClass context, AppView<? extends AppInfoWithClassHierarchy> appView);
+
+ public final DexClassAndMethod lookupInvokeSuperTarget(
+ DexProgramClass context, AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return lookupInvokeSuperTarget(context, appView, appView.appInfo());
+ }
/** Lookup the single target of an invoke-super on this resolution result if possible. */
public abstract DexClassAndMethod lookupInvokeSuperTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo);
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo);
/** Lookup the single target of an invoke-direct on this resolution result if possible. */
+ public final DexEncodedMethod lookupInvokeDirectTarget(
+ DexProgramClass context, AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return lookupInvokeDirectTarget(context, appView, appView.appInfo());
+ }
+
public abstract DexEncodedMethod lookupInvokeDirectTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo);
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo);
/** Lookup the single target of an invoke-static on this resolution result if possible. */
+ public final DexEncodedMethod lookupInvokeStaticTarget(
+ DexProgramClass context, AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return lookupInvokeStaticTarget(context, appView, appView.appInfo());
+ }
+
public abstract DexEncodedMethod lookupInvokeStaticTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo);
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo);
public abstract LookupResult lookupVirtualDispatchTargets(
DexProgramClass context,
- AppInfoWithClassHierarchy appInfo,
+ AppView<? extends AppInfoWithClassHierarchy> appView,
InstantiatedSubTypeInfo instantiatedInfo,
PinnedPredicate pinnedPredicate);
public final LookupResult lookupVirtualDispatchTargets(
- DexProgramClass context, AppInfoWithLiveness appInfo) {
+ DexProgramClass context, AppView<AppInfoWithLiveness> appView) {
+ AppInfoWithLiveness appInfo = appView.appInfo();
return lookupVirtualDispatchTargets(
- context, appInfo, appInfo, appInfo::isPinnedNotProgramOrLibraryOverride);
+ context, appView, appInfo, appInfo::isPinnedNotProgramOrLibraryOverride);
}
public abstract LookupResult lookupVirtualDispatchTargets(
DexProgramClass context,
- AppInfoWithLiveness appInfo,
+ AppView<AppInfoWithLiveness> appView,
DexProgramClass refinedReceiverUpperBound,
DexProgramClass refinedReceiverLowerBound);
@@ -309,15 +337,15 @@
@Override
public OptionalBool isAccessibleFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
- return AccessControl.isMemberAccessible(this, context, appInfo);
+ ProgramDefinition context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
+ return AccessControl.isMemberAccessible(this, context, appView, appInfo);
}
@Override
public OptionalBool isAccessibleForVirtualDispatchFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
+ ProgramDefinition context, AppView<? extends AppInfoWithClassHierarchy> appView) {
if (resolvedMethod.isVirtualMethod()) {
- return isAccessibleFrom(context, appInfo);
+ return isAccessibleFrom(context, appView, appView.appInfo());
}
return OptionalBool.FALSE;
}
@@ -335,9 +363,10 @@
*/
@Override
public DexClassAndMethod lookupInvokeSpecialTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<? extends AppInfoWithClassHierarchy> appView) {
// If the resolution is non-accessible then no target exists.
- if (isAccessibleFrom(context, appInfo).isPossiblyTrue()) {
+ AppInfoWithClassHierarchy appInfo = appView.appInfo();
+ if (isAccessibleFrom(context, appView).isPossiblyTrue()) {
return internalInvokeSpecialOrSuper(
context, appInfo, (sup, sub) -> isSuperclass(sup, sub, appInfo));
}
@@ -372,14 +401,14 @@
*/
@Override
public DexClassAndMethod lookupInvokeSuperTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
if (resolvedMethod.isInstanceInitializer()
|| (initialResolutionHolder != context
&& !isSuperclass(initialResolutionHolder, context, appInfo))) {
// If the target is <init> or not on a super class then the call is invalid.
return null;
}
- if (isAccessibleFrom(context, appInfo).isPossiblyTrue()) {
+ if (isAccessibleFrom(context, appView, appInfo).isPossiblyTrue()) {
return internalInvokeSpecialOrSuper(context, appInfo, (sup, sub) -> true);
}
return null;
@@ -397,8 +426,8 @@
*/
@Override
public DexEncodedMethod lookupInvokeStaticTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
- if (isAccessibleFrom(context, appInfo).isFalse()) {
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
+ if (isAccessibleFrom(context, appView, appInfo).isFalse()) {
return null;
}
if (resolvedMethod.isStatic()) {
@@ -418,8 +447,8 @@
*/
@Override
public DexEncodedMethod lookupInvokeDirectTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
- if (isAccessibleFrom(context, appInfo).isFalse()) {
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
+ if (isAccessibleFrom(context, appView, appInfo).isFalse()) {
return null;
}
if (resolvedMethod.isDirectMethod()) {
@@ -513,13 +542,14 @@
@Override
public LookupResult lookupVirtualDispatchTargets(
DexProgramClass context,
- AppInfoWithClassHierarchy appInfo,
+ AppView<? extends AppInfoWithClassHierarchy> appView,
InstantiatedSubTypeInfo instantiatedInfo,
PinnedPredicate pinnedPredicate) {
// Check that the initial resolution holder is accessible from the context.
+ AppInfoWithClassHierarchy appInfo = appView.appInfo();
assert appInfo.isSubtype(initialResolutionHolder.type, resolvedHolder.type)
: initialResolutionHolder.type + " is not a subtype of " + resolvedHolder.type;
- if (context != null && isAccessibleFrom(context, appInfo).isFalse()) {
+ if (context != null && isAccessibleFrom(context, appView).isFalse()) {
return LookupResult.createFailedResult();
}
if (resolvedMethod.isPrivateMethod()) {
@@ -558,7 +588,7 @@
},
lambda -> {
assert resolvedHolder.isInterface()
- || resolvedHolder.type == appInfo.dexItemFactory().objectType;
+ || resolvedHolder.type == appView.dexItemFactory().objectType;
LookupTarget target =
lookupVirtualDispatchTarget(
lambda,
@@ -582,9 +612,10 @@
@Override
public LookupResult lookupVirtualDispatchTargets(
DexProgramClass context,
- AppInfoWithLiveness appInfo,
+ AppView<AppInfoWithLiveness> appView,
DexProgramClass refinedReceiverUpperBound,
DexProgramClass refinedReceiverLowerBound) {
+ AppInfoWithLiveness appInfo = appView.appInfo();
assert refinedReceiverUpperBound != null;
assert appInfo.isSubtype(refinedReceiverUpperBound.type, initialResolutionHolder.type);
assert refinedReceiverLowerBound == null
@@ -600,7 +631,7 @@
LookupResult lookupResult =
lookupVirtualDispatchTargets(
context,
- appInfo,
+ appView,
instantiatedSubTypeInfo,
appInfo::isPinnedNotProgramOrLibraryOverride);
if (hasInstantiatedLambdas.get() && lookupResult.isLookupResultSuccess()) {
@@ -977,32 +1008,32 @@
@Override
public final DexClassAndMethod lookupInvokeSpecialTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<? extends AppInfoWithClassHierarchy> appView) {
return null;
}
@Override
public DexClassAndMethod lookupInvokeSuperTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
return null;
}
@Override
public DexEncodedMethod lookupInvokeStaticTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
return null;
}
@Override
public DexEncodedMethod lookupInvokeDirectTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
return null;
}
@Override
public LookupResult lookupVirtualDispatchTargets(
DexProgramClass context,
- AppInfoWithClassHierarchy appInfo,
+ AppView<? extends AppInfoWithClassHierarchy> appView,
InstantiatedSubTypeInfo instantiatedInfo,
PinnedPredicate pinnedPredicate) {
return LookupResult.getIncompleteEmptyResult();
@@ -1011,7 +1042,7 @@
@Override
public LookupResult lookupVirtualDispatchTargets(
DexProgramClass context,
- AppInfoWithLiveness appInfo,
+ AppView<AppInfoWithLiveness> appView,
DexProgramClass refinedReceiverUpperBound,
DexProgramClass refinedReceiverLowerBound) {
return LookupResult.getIncompleteEmptyResult();
@@ -1050,13 +1081,13 @@
@Override
public OptionalBool isAccessibleFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
+ ProgramDefinition context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
return OptionalBool.TRUE;
}
@Override
public OptionalBool isAccessibleForVirtualDispatchFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
+ ProgramDefinition context, AppView<? extends AppInfoWithClassHierarchy> appView) {
return OptionalBool.TRUE;
}
@@ -1110,13 +1141,13 @@
@Override
public OptionalBool isAccessibleFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
+ ProgramDefinition context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
return OptionalBool.FALSE;
}
@Override
public OptionalBool isAccessibleForVirtualDispatchFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
+ ProgramDefinition context, AppView<? extends AppInfoWithClassHierarchy> appView) {
return OptionalBool.FALSE;
}
@@ -1218,7 +1249,8 @@
}
@Override
- public boolean isNoSuchMethodErrorResult(DexClass context, AppInfoWithClassHierarchy appInfo) {
+ public boolean isNoSuchMethodErrorResult(
+ DexClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
return true;
}
@@ -1262,14 +1294,15 @@
}
@Override
- public boolean isIllegalAccessErrorResult(DexClass context, AppInfoWithClassHierarchy appInfo) {
+ public boolean isIllegalAccessErrorResult(
+ DexClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
if (!hasMethodsCausingError()) {
return false;
}
BooleanBox seenNoAccess = new BooleanBox(false);
forEachFailureDependency(
type ->
- appInfo
+ appView
.contextIndependentDefinitionForWithResolutionResult(type)
.forEachClassResolutionResult(
clazz ->
@@ -1278,27 +1311,28 @@
clazz,
context,
appInfo.getClassToFeatureSplitMap(),
- appInfo.options(),
- appInfo.getStartupOrder(),
- appInfo.getSyntheticItems())
+ appView.options(),
+ appView.getStartupOrder(),
+ appView.getSyntheticItems())
.isPossiblyFalse())),
method -> {
- DexClass holder = appInfo.definitionFor(method.getHolderType());
+ DexClass holder = appView.definitionFor(method.getHolderType());
DexClassAndMethod classAndMethod = DexClassAndMethod.create(holder, method);
seenNoAccess.or(
AccessControl.isMemberAccessible(
- classAndMethod, initialResolutionHolder, context, appInfo)
+ classAndMethod, initialResolutionHolder, context, appView, appInfo)
.isPossiblyFalse());
});
return seenNoAccess.get();
}
@Override
- public boolean isNoSuchMethodErrorResult(DexClass context, AppInfoWithClassHierarchy appInfo) {
+ public boolean isNoSuchMethodErrorResult(
+ DexClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
if (!hasMethodsCausingError()) {
return true;
}
- if (isIllegalAccessErrorResult(context, appInfo)) {
+ if (isIllegalAccessErrorResult(context, appView, appInfo)) {
return false;
}
// At this point we know we have methods causing errors but we have access to them. To be
@@ -1345,13 +1379,13 @@
@Override
public OptionalBool isAccessibleFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
+ ProgramDefinition context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
throw new Unreachable("Should not be called on MultipleFieldResolutionResult");
}
@Override
public OptionalBool isAccessibleForVirtualDispatchFrom(
- ProgramDefinition context, AppInfoWithClassHierarchy appInfo) {
+ ProgramDefinition context, AppView<? extends AppInfoWithClassHierarchy> appView) {
throw new Unreachable("Should not be called on MultipleFieldResolutionResult");
}
@@ -1362,32 +1396,32 @@
@Override
public DexClassAndMethod lookupInvokeSpecialTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<? extends AppInfoWithClassHierarchy> appView) {
throw new Unreachable("Should not be called on MultipleFieldResolutionResult");
}
@Override
public DexClassAndMethod lookupInvokeSuperTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
throw new Unreachable("Should not be called on MultipleFieldResolutionResult");
}
@Override
public DexEncodedMethod lookupInvokeDirectTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
throw new Unreachable("Should not be called on MultipleFieldResolutionResult");
}
@Override
public DexEncodedMethod lookupInvokeStaticTarget(
- DexProgramClass context, AppInfoWithClassHierarchy appInfo) {
+ DexProgramClass context, AppView<?> appView, AppInfoWithClassHierarchy appInfo) {
throw new Unreachable("Should not be called on MultipleFieldResolutionResult");
}
@Override
public LookupResult lookupVirtualDispatchTargets(
DexProgramClass context,
- AppInfoWithClassHierarchy appInfo,
+ AppView<? extends AppInfoWithClassHierarchy> appView,
InstantiatedSubTypeInfo instantiatedInfo,
PinnedPredicate pinnedPredicate) {
throw new Unreachable("Should not be called on MultipleFieldResolutionResult");
@@ -1396,7 +1430,7 @@
@Override
public LookupResult lookupVirtualDispatchTargets(
DexProgramClass context,
- AppInfoWithLiveness appInfo,
+ AppView<AppInfoWithLiveness> appView,
DexProgramClass refinedReceiverUpperBound,
DexProgramClass refinedReceiverLowerBound) {
throw new Unreachable("Should not be called on MultipleFieldResolutionResult");
diff --git a/src/main/java/com/android/tools/r8/graph/UseRegistry.java b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
index f5a1aad..be1b904c06 100644
--- a/src/main/java/com/android/tools/r8/graph/UseRegistry.java
+++ b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
@@ -12,7 +12,7 @@
public abstract class UseRegistry<T extends Definition> {
- private final AppView<?> appView;
+ protected final AppView<?> appView;
private final T context;
private TraversalContinuation<?, ?> continuation = TraversalContinuation.doContinue();
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoClassInitializerCycles.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoClassInitializerCycles.java
index b1ad665..2e0a307 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoClassInitializerCycles.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoClassInitializerCycles.java
@@ -106,6 +106,10 @@
this.appView = appView;
}
+ private AppView<AppInfoWithLiveness> appView() {
+ return appView;
+ }
+
// TODO(b/270398965): Replace LinkedList.
@SuppressWarnings("JdkObsolete")
@Override
@@ -407,7 +411,7 @@
class TracerUseRegistry extends UseRegistry<ProgramMethod> {
TracerUseRegistry(ProgramMethod context) {
- super(appView, context);
+ super(appView(), context);
}
private void fail() {
@@ -431,7 +435,7 @@
}
private boolean isClassAlreadyInitializedInCurrentContext(DexProgramClass clazz) {
- return appView.appInfo().isSubtype(getContext().getHolder(), clazz);
+ return appView().appInfo().isSubtype(getContext().getHolder(), clazz);
}
private void triggerClassInitializer(DexProgramClass root) {
@@ -481,7 +485,7 @@
DexMethod rewrittenMethod =
appView.graphLens().lookupInvokeDirect(method, getContext()).getReference();
MethodResolutionResult resolutionResult =
- appView.appInfo().resolveMethodOnClassHolderLegacy(rewrittenMethod);
+ appView().appInfo().resolveMethodOnClassHolderLegacy(rewrittenMethod);
if (resolutionResult.isSingleResolution()
&& resolutionResult.getResolvedHolder().isProgramClass()) {
enqueueMethod(resolutionResult.getResolvedProgramMethod());
@@ -493,7 +497,7 @@
DexMethod rewrittenMethod =
appView.graphLens().lookupInvokeInterface(method, getContext()).getReference();
DexClassAndMethod resolvedMethod =
- appView
+ appView()
.appInfo()
.resolveMethodOnInterfaceHolderLegacy(rewrittenMethod)
.getResolutionPair();
@@ -507,7 +511,7 @@
DexMethod rewrittenMethod =
appView.graphLens().lookupInvokeStatic(method, getContext()).getReference();
ProgramMethod resolvedMethod =
- appView
+ appView()
.appInfo()
.unsafeResolveMethodDueToDexFormatLegacy(rewrittenMethod)
.getResolvedProgramMethod();
@@ -523,7 +527,7 @@
appView.graphLens().lookupInvokeSuper(method, getContext()).getReference();
ProgramMethod superTarget =
asProgramMethodOrNull(
- appView.appInfo().lookupSuperTarget(rewrittenMethod, getContext()));
+ appView().appInfo().lookupSuperTarget(rewrittenMethod, getContext(), appView()));
if (superTarget != null) {
enqueueMethod(superTarget);
}
@@ -534,7 +538,10 @@
DexMethod rewrittenMethod =
appView.graphLens().lookupInvokeVirtual(method, getContext()).getReference();
DexClassAndMethod resolvedMethod =
- appView.appInfo().resolveMethodOnClassHolderLegacy(rewrittenMethod).getResolutionPair();
+ appView()
+ .appInfo()
+ .resolveMethodOnClassHolderLegacy(rewrittenMethod)
+ .getResolutionPair();
if (resolvedMethod != null) {
if (!resolvedMethod.getHolder().isEffectivelyFinal(appView)) {
fail();
@@ -569,7 +576,7 @@
@Override
public void registerCallSite(DexCallSite callSite) {
- if (isLambdaMetafactoryMethod(callSite, appView.appInfo())) {
+ if (isLambdaMetafactoryMethod(callSite, appView().appInfo())) {
// Use of lambda metafactory does not trigger any class initialization.
} else {
fail();
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
index acc6daa..4525030 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
@@ -82,6 +82,10 @@
this.postMethodProcessorBuilder = postMethodProcessorBuilder;
}
+ private AppView<AppInfoWithLiveness> appView() {
+ return appView;
+ }
+
public void run(
ExecutorService executorService, OptimizationFeedbackDelayed feedback, Timing timing)
throws ExecutionException {
@@ -312,7 +316,7 @@
class TrivialFieldAccessUseRegistry extends UseRegistry<ProgramMethod> {
TrivialFieldAccessUseRegistry(ProgramMethod method) {
- super(appView, method);
+ super(appView(), method);
}
private void registerFieldAccess(
@@ -320,7 +324,7 @@
boolean isStatic,
boolean isWrite,
BytecodeInstructionMetadata metadata) {
- FieldResolutionResult resolutionResult = appView.appInfo().resolveField(reference);
+ FieldResolutionResult resolutionResult = appView().appInfo().resolveField(reference);
if (!resolutionResult.hasProgramResult()) {
// We don't care about field accesses that may not resolve to a program field.
return;
@@ -332,8 +336,8 @@
if (definition.isStatic() != isStatic
|| appView.isCfByteCodePassThrough(getContext().getDefinition())
|| !resolutionResult.isSingleProgramFieldResolutionResult()
- || resolutionResult.isAccessibleFrom(getContext(), appView).isPossiblyFalse()
- || appView.appInfo().isNeverReprocessMethod(getContext())) {
+ || resolutionResult.isAccessibleFrom(getContext(), appView()).isPossiblyFalse()
+ || appView().appInfo().isNeverReprocessMethod(getContext())) {
recordAccessThatCannotBeOptimized(field, definition);
return;
}
@@ -355,7 +359,7 @@
}
// Record access.
- if (field.isProgramField() && appView.appInfo().mayPropagateValueFor(appView, field)) {
+ if (field.isProgramField() && appView().appInfo().mayPropagateValueFor(appView(), field)) {
if (field.getAccessFlags().isStatic() == isStatic) {
if (isWrite) {
recordFieldAccessContext(definition, writtenFields, readFields);
@@ -400,7 +404,7 @@
private void recordAccessThatCannotBeOptimized(
DexClassAndField field, DexEncodedField definition) {
constantFields.remove(definition);
- if (field.isProgramField() && appView.appInfo().mayPropagateValueFor(appView, field)) {
+ if (field.isProgramField() && appView().appInfo().mayPropagateValueFor(appView(), field)) {
destroyFieldAccessContexts(definition);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java b/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
index 3551561..86ef0d7 100644
--- a/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
+++ b/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
@@ -92,7 +92,7 @@
// Check if the resolution target is accessible.
if (singleFieldResolutionResult.getResolvedHolder() != context.getHolder()) {
if (singleFieldResolutionResult
- .isAccessibleFrom(context, appView.appInfo().withClassHierarchy())
+ .isAccessibleFrom(context, appView.withClassHierarchy())
.isPossiblyFalse()) {
return true;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java b/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
index 4fa5742..92ecb73 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
@@ -25,6 +25,7 @@
import com.android.tools.r8.ir.desugar.LambdaDescriptor;
import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
import com.android.tools.r8.ir.optimize.InliningConstraints;
+import com.android.tools.r8.shaking.AppInfoWithLiveness;
import java.util.List;
public final class InvokeCustom extends Invoke {
@@ -70,8 +71,8 @@
if (!appView.appInfo().hasLiveness()) {
return returnType;
}
- List<DexType> lambdaInterfaces =
- LambdaDescriptor.getInterfaces(callSite, appView.appInfo().withClassHierarchy());
+ AppView<AppInfoWithLiveness> appViewWithLiveness = appView.withLiveness();
+ List<DexType> lambdaInterfaces = LambdaDescriptor.getInterfaces(callSite, appViewWithLiveness);
if (lambdaInterfaces == null || lambdaInterfaces.isEmpty()) {
return returnType;
}
@@ -98,7 +99,7 @@
assert verifyLambdaInterfaces(returnType, lambdaInterfaceSet, objectType);
return ClassTypeElement.create(
- objectType, Nullability.maybeNull(), appView.withClassHierarchy(), lambdaInterfaceSet);
+ objectType, Nullability.maybeNull(), appViewWithLiveness, lambdaInterfaceSet);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java b/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
index 146f61a..3891d20 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
@@ -140,9 +140,10 @@
AppView<?> appView, ProgramMethod context, DynamicType dynamicReceiverType) {
DexMethod invokedMethod = getInvokedMethod();
DexEncodedMethod result;
- if (appView.appInfo().hasLiveness()) {
- AppInfoWithLiveness appInfo = appView.appInfo().withLiveness();
- result = appInfo.lookupDirectTarget(invokedMethod, context);
+ if (appView.hasLiveness()) {
+ AppView<AppInfoWithLiveness> appViewWithLiveness = appView.withLiveness();
+ AppInfoWithLiveness appInfo = appViewWithLiveness.appInfo();
+ result = appInfo.lookupDirectTarget(invokedMethod, context, appViewWithLiveness);
assert verifyD8LookupResult(
result, appView.appInfo().lookupDirectTargetOnItself(invokedMethod, context));
} else {
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
index 7f5c809..b7a8fae 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
@@ -156,14 +156,9 @@
if (refinedReceiverUpperBound != null) {
lookupResult =
resolutionResult.lookupVirtualDispatchTargets(
- context.getHolder(),
- appView.withLiveness().appInfo(),
- refinedReceiverUpperBound,
- refinedReceiverLowerBound);
+ context.getHolder(), appView, refinedReceiverUpperBound, refinedReceiverLowerBound);
} else {
- lookupResult =
- resolutionResult.lookupVirtualDispatchTargets(
- context.getHolder(), appView.withLiveness().appInfo());
+ lookupResult = resolutionResult.lookupVirtualDispatchTargets(context.getHolder(), appView);
}
if (lookupResult.isLookupResultFailure()) {
return null;
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java b/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java
index 1bf7eb7..c84568c 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java
@@ -120,10 +120,11 @@
DexMethod invokedMethod = getInvokedMethod();
DexEncodedMethod result;
if (appView.appInfo().hasLiveness()) {
- AppInfoWithLiveness appInfo = appView.appInfo().withLiveness();
- result = appInfo.lookupStaticTarget(invokedMethod, context);
+ AppView<AppInfoWithLiveness> appViewWithLiveness = appView.withLiveness();
+ AppInfoWithLiveness appInfo = appViewWithLiveness.appInfo();
+ result = appInfo.lookupStaticTarget(invokedMethod, context, appViewWithLiveness);
assert verifyD8LookupResult(
- result, appView.appInfo().lookupStaticTargetOnItself(invokedMethod, context));
+ result, appInfo.lookupStaticTargetOnItself(invokedMethod, context));
} else {
// Allow optimizing static library invokes in D8.
DexClass clazz = appView.definitionForHolder(getInvokedMethod());
@@ -216,7 +217,7 @@
// Verify that the target method is static and accessible.
if (!singleTarget.getDefinition().isStatic()
- || resolutionResult.isAccessibleFrom(context, appInfoWithLiveness).isPossiblyFalse()) {
+ || resolutionResult.isAccessibleFrom(context, appViewWithLiveness).isPossiblyFalse()) {
return true;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java b/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java
index 0b7dce8..4eaae3c 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java
@@ -113,7 +113,7 @@
AppView<AppInfoWithLiveness> appViewWithLiveness = appView.withLiveness();
AppInfoWithLiveness appInfo = appViewWithLiveness.appInfo();
if (appInfo.isSubtype(context.getHolderType(), getInvokedMethod().holder)) {
- return appInfo.lookupSuperTarget(getInvokedMethod(), context);
+ return appInfo.lookupSuperTarget(getInvokedMethod(), context, appViewWithLiveness);
}
}
return null;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java b/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java
index 3c940a6..34e00ef 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java
@@ -118,7 +118,7 @@
appView.appInfo().resolveMethodLegacy(method, isInterface);
if (resolution.isVirtualTarget()) {
LookupResult lookupResult =
- resolution.lookupVirtualDispatchTargets(context.getHolder(), appView.appInfo());
+ resolution.lookupVirtualDispatchTargets(context.getHolder(), appView);
if (lookupResult.isLookupResultSuccess()) {
ProgramMethodSet targets = ProgramMethodSet.create();
lookupResult
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
index df7be1b..bbd4fe0 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
@@ -6,6 +6,7 @@
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
+import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexCallSite;
import com.android.tools.r8.graph.DexDefinitionSupplier;
import com.android.tools.r8.graph.DexEncodedMethod;
@@ -68,6 +69,7 @@
}
private LambdaDescriptor(
+ AppView<?> appView,
AppInfoWithClassHierarchy appInfo,
ProgramMethod context,
DexCallSite callSite,
@@ -94,7 +96,8 @@
this.captures = captures;
this.interfaces.add(mainInterface);
- DexEncodedMethod targetMethod = context == null ? null : lookupTargetMethod(appInfo, context);
+ DexEncodedMethod targetMethod =
+ context == null ? null : lookupTargetMethod(appView, appInfo, context);
if (targetMethod != null) {
targetAccessFlags = targetMethod.accessFlags.copy();
targetHolder = targetMethod.getHolderType();
@@ -114,7 +117,7 @@
}
private DexEncodedMethod lookupTargetMethod(
- AppInfoWithClassHierarchy appInfo, ProgramMethod context) {
+ AppView<?> appView, AppInfoWithClassHierarchy appInfo, ProgramMethod context) {
assert context != null;
// Find the lambda's impl-method target.
DexMethod method = implHandle.asMethod();
@@ -126,7 +129,7 @@
.resolveMethodOnLegacy(getImplReceiverType(), method, implHandle.isInterface)
.getSingleTarget();
if (target == null) {
- target = appInfo.lookupDirectTarget(method, context);
+ target = appInfo.lookupDirectTarget(method, context, appView, appInfo);
}
assert target == null
|| (implHandle.type.isInvokeInstance() && isInstanceMethod(target))
@@ -136,13 +139,13 @@
}
case INVOKE_STATIC: {
- DexEncodedMethod target = appInfo.lookupStaticTarget(method, context);
+ DexEncodedMethod target = appInfo.lookupStaticTarget(method, context, appView, appInfo);
assert target == null || target.accessFlags.isStatic();
return target;
}
case INVOKE_CONSTRUCTOR: {
- DexEncodedMethod target = appInfo.lookupDirectTarget(method, context);
+ DexEncodedMethod target = appInfo.lookupDirectTarget(method, context, appView, appInfo);
assert target == null || target.accessFlags.isConstructor();
return target;
}
@@ -267,8 +270,11 @@
* information, or null if match failed.
*/
public static LambdaDescriptor tryInfer(
- DexCallSite callSite, AppInfoWithClassHierarchy appInfo, ProgramMethod context) {
- LambdaDescriptor descriptor = infer(callSite, appInfo, context);
+ DexCallSite callSite,
+ AppView<?> appView,
+ AppInfoWithClassHierarchy appInfo,
+ ProgramMethod context) {
+ LambdaDescriptor descriptor = infer(callSite, appView, appInfo, context);
return descriptor == MATCH_FAILED ? null : descriptor;
}
@@ -294,7 +300,10 @@
* information, or MATCH_FAILED if match failed.
*/
static LambdaDescriptor infer(
- DexCallSite callSite, AppInfoWithClassHierarchy appInfo, ProgramMethod context) {
+ DexCallSite callSite,
+ AppView<?> appView,
+ AppInfoWithClassHierarchy appInfo,
+ ProgramMethod context) {
if (!isLambdaMetafactoryMethod(callSite, appInfo)) {
return LambdaDescriptor.MATCH_FAILED;
}
@@ -337,6 +346,7 @@
// Create a match.
LambdaDescriptor match =
new LambdaDescriptor(
+ appView,
appInfo,
context,
callSite,
@@ -409,9 +419,9 @@
}
public static List<DexType> getInterfaces(
- DexCallSite callSite, AppInfoWithClassHierarchy appInfo) {
+ DexCallSite callSite, AppView<? extends AppInfoWithClassHierarchy> appView) {
// No need for the invocationContext to figure out only the interfaces.
- LambdaDescriptor descriptor = infer(callSite, appInfo, null);
+ LambdaDescriptor descriptor = infer(callSite, appView, appView.appInfo(), null);
if (descriptor == LambdaDescriptor.MATCH_FAILED) {
return null;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
index d260a73..63a6e08 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
@@ -157,7 +157,7 @@
// Unconditionally throw as the RI.
behaviour =
resolution.isNoSuchMethodErrorResult(
- context.getContextClass(), appView.appInfoForDesugaring())
+ context.getContextClass(), appView, appView.appInfoForDesugaring())
? THROW_NSME
: THROW_ICCE;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPIConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPIConverter.java
index 292a3b3..f3e4457 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPIConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPIConverter.java
@@ -7,6 +7,7 @@
import com.android.tools.r8.cf.code.CfInstruction;
import com.android.tools.r8.cf.code.CfInvoke;
import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
+import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexClassAndMethod;
@@ -124,10 +125,11 @@
private DexClassAndMethod getMethodForDesugaring(CfInvoke invoke, ProgramMethod context) {
DexMethod invokedMethod = invoke.getMethod();
// TODO(b/191656218): Use lookupInvokeSpecial instead when this is all to Cf.
+ AppInfoWithClassHierarchy appInfoForDesugaring = appView.appInfoForDesugaring();
return invoke.isInvokeSuper(context.getHolderType())
- ? appView.appInfoForDesugaring().lookupSuperTarget(invokedMethod, context)
- : appView
- .appInfoForDesugaring()
+ ? appInfoForDesugaring.lookupSuperTarget(
+ invokedMethod, context, appView, appInfoForDesugaring)
+ : appInfoForDesugaring
.resolveMethodLegacy(invokedMethod, invoke.isInterface())
.getResolutionPair();
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
index b165a93..cb24e59 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.androidapi.ComputedApiLevel;
import com.android.tools.r8.dex.ApplicationReader;
import com.android.tools.r8.dex.Constants;
-import com.android.tools.r8.experimental.startup.StartupOrder;
import com.android.tools.r8.features.ClassToFeatureSplitMap;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.DexApplication;
@@ -148,8 +147,7 @@
dexApplication,
ClassToFeatureSplitMap.createEmptyClassToFeatureSplitMap(),
MainDexInfo.none(),
- GlobalSyntheticsStrategy.forNonSynthesizing(),
- StartupOrder.empty());
+ GlobalSyntheticsStrategy.forNonSynthesizing());
List<DexMethod> backports =
BackportedMethodRewriter.generateListOfBackportedMethods(dexApplication, options);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeter.java
index fd30618..85154ce 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeter.java
@@ -92,7 +92,8 @@
return DesugarDescription.nothing();
}
if (cfInvoke.isInvokeSuper(context.getHolderType())) {
- DexClassAndMethod superTarget = appInfo.lookupSuperTarget(invokedMethod, context);
+ DexClassAndMethod superTarget =
+ appInfo.lookupSuperTarget(invokedMethod, context, appView, appInfo);
if (superTarget != null) {
assert !superTarget.getDefinition().isStatic();
return computeNonStaticRetarget(superTarget.getReference(), true);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/icce/AlwaysThrowingInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/icce/AlwaysThrowingInstructionDesugaring.java
index ff3989a..ccf096e 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/icce/AlwaysThrowingInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/icce/AlwaysThrowingInstructionDesugaring.java
@@ -189,9 +189,11 @@
} else if (resolutionResult.isFailedResolution()) {
FailedResolutionResult failedResolutionResult = resolutionResult.asFailedResolution();
AppInfoWithClassHierarchy appInfo = appView.appInfoForDesugaring();
- if (failedResolutionResult.isIllegalAccessErrorResult(context.getHolder(), appInfo)) {
+ if (failedResolutionResult.isIllegalAccessErrorResult(
+ context.getHolder(), appView, appInfo)) {
return UtilityMethodsForCodeOptimizations::synthesizeThrowIllegalAccessErrorMethod;
- } else if (failedResolutionResult.isNoSuchMethodErrorResult(context.getHolder(), appInfo)) {
+ } else if (failedResolutionResult.isNoSuchMethodErrorResult(
+ context.getHolder(), appView, appInfo)) {
return UtilityMethodsForCodeOptimizations::synthesizeThrowNoSuchMethodErrorMethod;
} else if (failedResolutionResult.isIncompatibleClassChangeErrorResult()) {
return UtilityMethodsForCodeOptimizations
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
index 85b530e..922fd4d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
@@ -850,11 +850,11 @@
addICCEThrowingMethod(method, clazz, resolutionResult.asFailedResolution());
return;
}
- if (resolutionResult.isNoSuchMethodErrorResult(clazz, appInfo)) {
+ if (resolutionResult.isNoSuchMethodErrorResult(clazz, appView, appInfo)) {
addNoSuchMethodErrorThrowingMethod(method, clazz, resolutionResult.asFailedResolution());
return;
}
- assert resolutionResult.isIllegalAccessErrorResult(clazz, appInfo);
+ assert resolutionResult.isIllegalAccessErrorResult(clazz, appView, appInfo);
addIllegalAccessErrorThrowingMethod(method, clazz, resolutionResult.asFailedResolution());
return;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
index 6bc5e1d..15e9f06 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
@@ -329,7 +329,7 @@
.asSingleResolution();
if (resolution != null
&& resolution.getResolvedMethod().isPrivate()
- && resolution.isAccessibleFrom(context, appInfoForDesugaring).isTrue()) {
+ && resolution.isAccessibleFrom(context, appView, appInfoForDesugaring).isTrue()) {
return DesugarDescription.nothing();
}
if (resolution != null && resolution.getResolvedMethod().isStatic()) {
@@ -503,7 +503,7 @@
.asSingleResolution();
if (resolution != null
&& resolution.getResolvedMethod().isPrivate()
- && resolution.isAccessibleFrom(context, appInfoForDesugaring).isTrue()) {
+ && resolution.isAccessibleFrom(context, appView, appInfoForDesugaring).isTrue()) {
// TODO(b/198267586): What about the private in-accessible case?
return computeInvokeDirect(holder, invoke, context);
}
@@ -724,7 +724,9 @@
// WARNING: This may result in incorrect code on older platforms!
// Retarget call to an appropriate method of companion class.
if (resolutionResult.getResolvedMethod().isPrivateMethod()) {
- if (resolutionResult.isAccessibleFrom(context, appView.appInfoForDesugaring()).isFalse()) {
+ if (resolutionResult
+ .isAccessibleFrom(context, appView, appView.appInfoForDesugaring())
+ .isFalse()) {
// TODO(b/145775365): This should throw IAE.
return computeInvokeAsThrowRewrite(invoke, null, context);
}
@@ -803,8 +805,11 @@
private DesugarDescription computeEmulatedInterfaceInvokeSpecial(
DexClass clazz, DexMethod invokedMethod, ProgramMethod context) {
+ AppInfoWithClassHierarchy appInfoForDesugaring = appView.appInfoForDesugaring();
DexClassAndMethod superTarget =
- appView.appInfoForDesugaring().lookupSuperTarget(invokedMethod, context);
+ appView
+ .appInfoForDesugaring()
+ .lookupSuperTarget(invokedMethod, context, appView, appInfoForDesugaring);
if (clazz.isInterface()
&& clazz.isLibraryClass()
&& helper.isInDesugaredLibrary(clazz)
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
index c33361a..aea4f4b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
@@ -163,7 +163,8 @@
MethodProcessingContext methodProcessingContext,
DesugarInvoke desugarInvoke) {
LambdaDescriptor descriptor =
- LambdaDescriptor.tryInfer(invoke.getCallSite(), appView.appInfoForDesugaring(), context);
+ LambdaDescriptor.tryInfer(
+ invoke.getCallSite(), appView, appView.appInfoForDesugaring(), context);
if (descriptor == null) {
return null;
}
@@ -191,6 +192,7 @@
return instruction.isInvokeDynamic()
&& LambdaDescriptor.tryInfer(
instruction.asInvokeDynamic().getCallSite(),
+ appView,
appView.appInfoForDesugaring(),
context)
!= null;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java
index c7e64b08..efac97b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java
@@ -143,7 +143,7 @@
NestBasedAccessDesugaringUseRegistry(
ClasspathMethod context, NestBasedAccessDesugaringEventConsumer eventConsumer) {
- super(appView, context);
+ super(D8NestBasedAccessDesugaring.this.appView, context);
this.eventConsumer = eventConsumer;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
index 91b7639..03304e5 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
@@ -168,7 +168,10 @@
CfInvokeDynamic cfInvokeDynamic = instruction.asInvokeDynamic();
LambdaDescriptor lambdaDescriptor =
LambdaDescriptor.tryInfer(
- cfInvokeDynamic.getCallSite(), appView.appInfoForDesugaring(), method);
+ cfInvokeDynamic.getCallSite(),
+ appView,
+ appView.appInfoForDesugaring(),
+ method);
if (lambdaDescriptor != null) {
DexMember<?, ?> member = lambdaDescriptor.implHandle.member;
if (needsDesugaring(member, method)) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
index 0db211d..a2572eb 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
@@ -180,7 +180,7 @@
}
// Abort inlining attempt if method -> target access is not right.
- if (resolutionResult.isAccessibleFrom(method, appView.appInfo()).isPossiblyFalse()) {
+ if (resolutionResult.isAccessibleFrom(method, appView).isPossiblyFalse()) {
whyAreYouNotInliningReporter.reportInaccessible();
return false;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
index 08f3912..f95b59e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
@@ -320,7 +320,7 @@
/** This rebinds invoke-super instructions to their most specific target. */
private DexClass rebindSuperInvokeToMostSpecific(DexMethod target, ProgramMethod context) {
- DexClassAndMethod method = appView.appInfo().lookupSuperTarget(target, context);
+ DexClassAndMethod method = appView.appInfo().lookupSuperTarget(target, context, appView);
if (method == null) {
return null;
}
@@ -375,7 +375,7 @@
.asSingleResolution();
if (resolutionResult == null
|| resolutionResult
- .isAccessibleForVirtualDispatchFrom(context, appView.appInfo())
+ .isAccessibleForVirtualDispatchFrom(context, appView)
.isPossiblyFalse()) {
// Method does not resolve or is not accessible.
return target;
@@ -391,7 +391,7 @@
appView.appInfo().resolveMethodOnClassLegacy(receiverType, target).asSingleResolution();
if (newResolutionResult == null
|| newResolutionResult
- .isAccessibleForVirtualDispatchFrom(context, appView.appInfo())
+ .isAccessibleForVirtualDispatchFrom(context, appView)
.isPossiblyFalse()
|| !newResolutionResult
.getResolvedMethod()
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java b/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java
index 900065d..7aae8a5 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java
@@ -115,7 +115,7 @@
.asSingleResolution();
if (resolutionResult == null
|| resolutionResult
- .isAccessibleFrom(context, appInfoWithLiveness)
+ .isAccessibleFrom(context, appViewWithLiveness)
.isPossiblyFalse()) {
continue;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
index 59c066f..3452d98 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
@@ -227,13 +227,16 @@
MethodResolutionResult resolutionResult,
ProgramMethod context,
TriFunction<
- MethodResolutionResult, DexProgramClass, AppInfoWithClassHierarchy, DexEncodedMethod>
+ MethodResolutionResult,
+ DexProgramClass,
+ AppView<? extends AppInfoWithClassHierarchy>,
+ DexEncodedMethod>
lookup) {
if (!resolutionResult.isSingleResolution()) {
return null;
}
DexEncodedMethod dexEncodedMethod =
- lookup.apply(resolutionResult, context.getHolder(), appView.appInfo());
+ lookup.apply(resolutionResult, context.getHolder(), appView);
if (!isVerticalClassMerging() || dexEncodedMethod != null) {
return dexEncodedMethod;
}
@@ -245,7 +248,7 @@
return null;
}
DexEncodedMethod alternativeDexEncodedMethod =
- lookup.apply(resolutionResult, superContext, appView.appInfo());
+ lookup.apply(resolutionResult, superContext, appView);
if (alternativeDexEncodedMethod != null
&& alternativeDexEncodedMethod.getHolderType() == superContext.type) {
return alternativeDexEncodedMethod;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
index 0f7e4bb..1767d8b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
@@ -332,7 +332,7 @@
InvokeCustom invoke, Set<DexType> eligibleEnums, ProgramMethod context) {
invoke.getCallSite().getMethodProto().forEachType(t -> markEnumEligible(t, eligibleEnums));
LambdaDescriptor lambdaDescriptor =
- LambdaDescriptor.tryInfer(invoke.getCallSite(), appView.appInfo(), context);
+ LambdaDescriptor.tryInfer(invoke.getCallSite(), appView, appView.appInfo(), context);
if (lambdaDescriptor == null) {
// Based on lambda we can see that enums cannot be unboxed if used in call site bootstrap
// arguments, since there might be expectations on overrides. Enums used directly in the
diff --git a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
index 14f7711..d607d71 100644
--- a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
@@ -457,7 +457,7 @@
// Don't report errors, as the set of call sites is a conservative estimate, and can
// refer to interfaces which has been removed.
Set<DexEncodedMethod> implementedMethods =
- appView.appInfo().lookupLambdaImplementedMethods(callSite);
+ appView.appInfo().lookupLambdaImplementedMethods(callSite, appView);
for (DexEncodedMethod method : implementedMethods) {
Wrapper<DexEncodedMethod> wrapped = definitionEquivalence.wrap(method);
InterfaceMethodGroupState groupState = globalStateMap.get(wrapped);
@@ -470,8 +470,7 @@
}
// For intersection types, we have to iterate all the multiple interfaces to look for
// methods with the same signature.
- List<DexType> implementedInterfaces =
- LambdaDescriptor.getInterfaces(callSite, appView.appInfo());
+ List<DexType> implementedInterfaces = LambdaDescriptor.getInterfaces(callSite, appView);
if (implementedInterfaces != null) {
for (int i = 1; i < implementedInterfaces.size(); i++) {
// Add the merging state for all additional implemented interfaces into the state
diff --git a/src/main/java/com/android/tools/r8/naming/NamingLens.java b/src/main/java/com/android/tools/r8/naming/NamingLens.java
index 5b24eb9..ca69f67 100644
--- a/src/main/java/com/android/tools/r8/naming/NamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/NamingLens.java
@@ -17,6 +17,7 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.InnerClassAttribute;
import com.android.tools.r8.optimize.MemberRebindingAnalysis;
+import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.google.common.collect.Sets;
@@ -55,8 +56,9 @@
if (!appView.appInfo().hasLiveness()) {
return callSite.methodName;
}
+ AppView<AppInfoWithLiveness> appViewWithLiveness = appView.withLiveness();
Set<DexEncodedMethod> lambdaImplementedMethods =
- appView.appInfo().withLiveness().lookupLambdaImplementedMethods(callSite);
+ appViewWithLiveness.appInfo().lookupLambdaImplementedMethods(callSite, appViewWithLiveness);
if (lambdaImplementedMethods.isEmpty()) {
return callSite.methodName;
}
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
index 87af2b2..d860861 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
@@ -64,6 +64,10 @@
this.lensBuilder = MemberRebindingLens.builder(appView);
}
+ private AppView<AppInfoWithLiveness> appView() {
+ return appView;
+ }
+
private DexMethod validMemberRebindingTargetForNonProgramMethod(
DexClassAndMethod resolvedMethod,
SingleResolutionResult<?> resolutionResult,
@@ -167,7 +171,7 @@
}
return Iterables.all(
contexts,
- context -> resolutionResult.isAccessibleFrom(context, appView.appInfo()).isTrue());
+ context -> resolutionResult.isAccessibleFrom(context, appView, appView.appInfo()).isTrue());
}
private boolean isInvokeSuperToInterfaceMethod(DexClassAndMethod method, InvokeType invokeType) {
@@ -578,7 +582,7 @@
}
private void registerFieldReference(DexField field) {
- appView
+ appView()
.appInfo()
.resolveField(field)
.forEachSuccessfulFieldResolutionResult(
diff --git a/src/main/java/com/android/tools/r8/optimize/RedundantBridgeRemover.java b/src/main/java/com/android/tools/r8/optimize/RedundantBridgeRemover.java
index 5cbb1b6..815a807 100644
--- a/src/main/java/com/android/tools/r8/optimize/RedundantBridgeRemover.java
+++ b/src/main/java/com/android/tools/r8/optimize/RedundantBridgeRemover.java
@@ -205,7 +205,7 @@
// Only check for interfaces if resolving the method on super type causes NoSuchMethodError.
FailedResolutionResult failedResolutionResult = superTypeResolution.asFailedResolution();
if (failedResolutionResult == null
- || !failedResolutionResult.isNoSuchMethodErrorResult(holder, appView.appInfo())
+ || !failedResolutionResult.isNoSuchMethodErrorResult(holder, appView, appView.appInfo())
|| holder.getInterfaces().isEmpty()) {
return false;
}
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
index 9023c00..c42b054 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
@@ -205,7 +205,7 @@
// Use the super target instead of the resolved method to ensure that we propagate the
// argument information to the targeted method.
DexClassAndMethod target =
- resolutionResult.lookupInvokeSuperTarget(context.getHolder(), appView.appInfo());
+ resolutionResult.lookupInvokeSuperTarget(context.getHolder(), appView);
if (target == null) {
// Nothing to propagate; the invoke instruction fails.
return;
diff --git a/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java b/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java
index 40ee16e..16bef88 100644
--- a/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java
+++ b/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java
@@ -146,7 +146,8 @@
MethodResolutionResult methodResult = resolutionResult.asMethodResolutionResult();
if (methodResult.isClassNotFoundResult()
|| methodResult.isArrayCloneMethodResult()
- || methodResult.isNoSuchMethodErrorResult(getContext().getContextClass(), appInfo)) {
+ || methodResult.isNoSuchMethodErrorResult(
+ getContext().getContextClass(), appView, appInfo)) {
return;
}
node.addNeighbor(missingTypeNode);
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 811ddc9..bd42c6a 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -9,7 +9,6 @@
import static com.android.tools.r8.graph.MethodResolutionResult.SingleResolutionResult.isOverriding;
import com.android.tools.r8.cf.CfVersion;
-import com.android.tools.r8.experimental.startup.StartupOrder;
import com.android.tools.r8.features.ClassToFeatureSplitMap;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
@@ -202,7 +201,6 @@
ClassToFeatureSplitMap classToFeatureSplitMap,
MainDexInfo mainDexInfo,
MissingClasses missingClasses,
- StartupOrder startupOrder,
Set<DexType> deadProtoTypes,
Set<DexType> liveTypes,
Set<DexMethod> targetedMethods,
@@ -234,12 +232,7 @@
Set<DexType> lockCandidates,
Map<DexType, Visibility> initClassReferences,
Set<DexMethod> recordFieldValuesReferences) {
- super(
- committedItems,
- classToFeatureSplitMap,
- mainDexInfo,
- missingClasses,
- startupOrder);
+ super(committedItems, classToFeatureSplitMap, mainDexInfo, missingClasses);
this.deadProtoTypes = deadProtoTypes;
this.liveTypes = liveTypes;
this.targetedMethods = targetedMethods;
@@ -280,7 +273,6 @@
previous.getClassToFeatureSplitMap(),
previous.getMainDexInfo(),
previous.getMissingClasses(),
- previous.getStartupOrder(),
previous.deadProtoTypes,
CollectionUtils.addAll(previous.liveTypes, committedItems.getCommittedProgramTypes()),
previous.targetedMethods,
@@ -324,7 +316,6 @@
previous.getClassToFeatureSplitMap().withoutPrunedItems(prunedItems),
previous.getMainDexInfo().withoutPrunedItems(prunedItems),
previous.getMissingClasses(),
- previous.getStartupOrder().withoutPrunedItems(prunedItems, previous.getSyntheticItems()),
previous.deadProtoTypes,
pruneClasses(previous.liveTypes, prunedItems, executorService, futures),
pruneMethods(previous.targetedMethods, prunedItems, executorService, futures),
@@ -489,7 +480,6 @@
getClassToFeatureSplitMap(),
mainDexInfo,
getMissingClasses(),
- getStartupOrder(),
deadProtoTypes,
liveTypes,
targetedMethods,
@@ -566,8 +556,7 @@
previous.getSyntheticItems().commit(previous.app()),
previous.getClassToFeatureSplitMap(),
previous.getMainDexInfo(),
- previous.getMissingClasses(),
- previous.getStartupOrder());
+ previous.getMissingClasses());
this.deadProtoTypes = previous.deadProtoTypes;
this.liveTypes = previous.liveTypes;
this.targetedMethods = previous.targetedMethods;
@@ -767,9 +756,10 @@
* @param callSite Call site to resolve.
* @return Methods implemented by the lambda expression that created the {@code callSite}.
*/
- public Set<DexEncodedMethod> lookupLambdaImplementedMethods(DexCallSite callSite) {
+ public Set<DexEncodedMethod> lookupLambdaImplementedMethods(
+ DexCallSite callSite, AppView<AppInfoWithLiveness> appView) {
assert checkIfObsolete();
- List<DexType> callSiteInterfaces = LambdaDescriptor.getInterfaces(callSite, this);
+ List<DexType> callSiteInterfaces = LambdaDescriptor.getInterfaces(callSite, appView);
if (callSiteInterfaces == null || callSiteInterfaces.isEmpty()) {
return Collections.emptySet();
}
@@ -1159,7 +1149,6 @@
getClassToFeatureSplitMap().rewrittenWithLens(lens),
getMainDexInfo().rewrittenWithLens(getSyntheticItems(), lens),
getMissingClasses(),
- getStartupOrder().rewrittenWithLens(lens),
deadProtoTypes,
lens.rewriteReferences(liveTypes),
lens.rewriteReferences(targetedMethods),
@@ -1229,7 +1218,7 @@
}
public DexEncodedMethod lookupSingleTarget(
- AppView<? extends AppInfoWithClassHierarchy> appView,
+ AppView<AppInfoWithLiveness> appView,
InvokeType type,
DexMethod target,
ProgramMethod context,
@@ -1245,18 +1234,18 @@
case INTERFACE:
return lookupSingleVirtualTarget(appView, target, context, true, modeledPredicate);
case DIRECT:
- return lookupDirectTarget(target, context);
+ return lookupDirectTarget(target, context, appView);
case STATIC:
- return lookupStaticTarget(target, context);
+ return lookupStaticTarget(target, context, appView);
case SUPER:
- return toMethodDefinitionOrNull(lookupSuperTarget(target, context));
+ return toMethodDefinitionOrNull(lookupSuperTarget(target, context, appView));
default:
return null;
}
}
public ProgramMethod lookupSingleProgramTarget(
- AppView<? extends AppInfoWithClassHierarchy> appView,
+ AppView<AppInfoWithLiveness> appView,
InvokeType type,
DexMethod target,
ProgramMethod context,
@@ -1267,7 +1256,7 @@
/** For mapping invoke virtual instruction to single target method. */
public DexEncodedMethod lookupSingleVirtualTarget(
- AppView<? extends AppInfoWithClassHierarchy> appView,
+ AppView<AppInfoWithLiveness> appView,
DexMethod method,
ProgramMethod context,
boolean isInterface) {
@@ -1277,7 +1266,7 @@
/** For mapping invoke virtual instruction to single target method. */
public DexEncodedMethod lookupSingleVirtualTarget(
- AppView<? extends AppInfoWithClassHierarchy> appView,
+ AppView<AppInfoWithLiveness> appView,
DexMethod method,
ProgramMethod context,
boolean isInterface,
@@ -1288,7 +1277,7 @@
}
public DexEncodedMethod lookupSingleVirtualTarget(
- AppView<? extends AppInfoWithClassHierarchy> appView,
+ AppView<AppInfoWithLiveness> appView,
DexMethod method,
ProgramMethod context,
boolean isInterface,
@@ -1325,7 +1314,7 @@
SingleResolutionResult<?> resolution =
resolveMethodOnLegacy(initialResolutionHolder, method).asSingleResolution();
if (resolution == null
- || resolution.isAccessibleForVirtualDispatchFrom(context.getHolder(), this).isFalse()) {
+ || resolution.isAccessibleForVirtualDispatchFrom(context.getHolder(), appView).isFalse()) {
return null;
}
// If the method is modeled, return the resolution.
@@ -1378,7 +1367,10 @@
LookupResultSuccess lookupResult =
resolution
.lookupVirtualDispatchTargets(
- context.getHolder(), this, refinedReceiverClass.asProgramClass(), refinedLowerBound)
+ context.getHolder(),
+ appView,
+ refinedReceiverClass.asProgramClass(),
+ refinedLowerBound)
.asLookupResultSuccess();
if (lookupResult != null && !lookupResult.isIncomplete()) {
LookupTarget singleTarget = lookupResult.getSingleLookupTarget();
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index a30bcf4..6ef9e7b 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -1155,7 +1155,7 @@
}
}
- LambdaDescriptor descriptor = LambdaDescriptor.tryInfer(callSite, appInfo(), context);
+ LambdaDescriptor descriptor = LambdaDescriptor.tryInfer(callSite, appView, appInfo(), context);
if (descriptor == null) {
for (DexValue bootstrapArgument : callSite.getBootstrapArgs()) {
if (bootstrapArgument.isDexValueMethodHandle()) {
@@ -2877,7 +2877,7 @@
LookupResult lookupResult =
singleResolution.lookupVirtualDispatchTargets(
contextHolder,
- appInfo,
+ appView,
(type, subTypeConsumer, lambdaConsumer) -> {
assert appInfo.isSubtype(currentClass.type, type);
instantiation.apply(subTypeConsumer, lambdaConsumer);
@@ -3364,7 +3364,7 @@
DexProgramClass resolvedHolder = resolution.getResolvedHolder().asProgramClass();
DexEncodedMethod resolvedMethod = resolution.getResolvedMethod();
markMethodAsTargeted(new ProgramMethod(resolvedHolder, resolvedMethod), reason);
- if (resolution.isAccessibleForVirtualDispatchFrom(contextHolder, appInfo).isFalse()) {
+ if (resolution.isAccessibleForVirtualDispatchFrom(contextHolder, appView).isFalse()) {
// Not accessible from this context, so this call will cause a runtime exception.
return;
}
@@ -3378,7 +3378,7 @@
resolution
.lookupVirtualDispatchTargets(
contextHolder,
- appInfo,
+ appView,
(type, subTypeConsumer, lambdaConsumer) ->
objectAllocationInfoCollection.forEachInstantiatedSubType(
type, subTypeConsumer, lambdaConsumer, appInfo),
@@ -3500,7 +3500,7 @@
// If invoke target is invalid (inaccessible or not an instance-method) record it and
// stop.
DexClassAndMethod target =
- resolution.lookupInvokeSuperTarget(from.getHolder(), appInfo);
+ resolution.lookupInvokeSuperTarget(from.getHolder(), appView);
if (target == null) {
failedMethodResolutionTargets.add(resolution.getResolvedMethod().getReference());
analyses.forEach(
@@ -4216,7 +4216,6 @@
? missingClassesBuilder.reportMissingClasses(
appView, lambdaSynthesizingContextOracle)
: missingClassesBuilder.assertNoMissingClasses(appView),
- appInfo.getStartupOrder(),
deadProtoTypes,
SetUtils.mapIdentityHashSet(liveTypes.getItems(), DexProgramClass::getType),
Enqueuer.toDescriptorSet(targetedMethods.getItems()),
diff --git a/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java b/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java
index 8baf037..89c25ae 100644
--- a/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java
+++ b/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java
@@ -43,6 +43,10 @@
this.consumer = consumer;
}
+ private AppView<? extends AppInfoWithClassHierarchy> appView() {
+ return appView;
+ }
+
public void run(Set<DexType> roots) {
SyntheticItems syntheticItems = appView.getSyntheticItems();
DexItemFactory factory = appView.dexItemFactory();
@@ -113,7 +117,7 @@
private class DirectReferencesCollector extends UseRegistry<ProgramMethod> {
private DirectReferencesCollector(ProgramMethod context) {
- super(appView, context);
+ super(appView(), context);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 1049259..488b3c3 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -761,7 +761,7 @@
LookupResultSuccess lookupResult =
appInfo
.resolveMethodOnInterfaceLegacy(method.getHolderType(), method.getReference())
- .lookupVirtualDispatchTargets(target, appInfo)
+ .lookupVirtualDispatchTargets(target, appView)
.asLookupResultSuccess();
assert lookupResult != null;
if (lookupResult == null) {
@@ -1356,7 +1356,7 @@
// Only rewrite the invoke-super call if it does not lead to a NoSuchMethodError.
boolean resolutionSucceeds =
holder.lookupVirtualMethod(signatureInHolder) != null
- || appInfo.lookupSuperTarget(signatureInHolder, holder) != null;
+ || appInfo.lookupSuperTarget(signatureInHolder, holder, appView) != null;
if (resolutionSucceeds) {
deferredRenamings.mapVirtualMethodToDirectInType(
signatureInHolder,
@@ -1381,7 +1381,7 @@
// its super classes declared the method.
boolean resolutionSucceededBeforeMerge =
lensBuilder.hasMappingForSignatureInContext(holder, signatureInType)
- || appInfo.lookupSuperTarget(signatureInHolder, holder) != null;
+ || appInfo.lookupSuperTarget(signatureInHolder, holder, appView) != null;
if (resolutionSucceededBeforeMerge) {
deferredRenamings.mapVirtualMethodToDirectInType(
signatureInType,
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
index 3bbb9ae..4b0c8ea 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
@@ -626,7 +626,7 @@
if (appView.hasClassHierarchy()) {
AppInfoWithClassHierarchy appInfo = appView.appInfoWithClassHierarchy();
return getSynthesizingContext(
- context, appInfo.getClassToFeatureSplitMap(), options, appInfo.getStartupOrder());
+ context, appInfo.getClassToFeatureSplitMap(), options, appView.getStartupOrder());
}
return getSynthesizingContext(
context,
diff --git a/src/main/java/com/android/tools/r8/tracereferences/TraceReferences.java b/src/main/java/com/android/tools/r8/tracereferences/TraceReferences.java
index e1000f6..ad30e62 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/TraceReferences.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/TraceReferences.java
@@ -13,7 +13,6 @@
import com.android.tools.r8.ResourceException;
import com.android.tools.r8.Version;
import com.android.tools.r8.dex.ApplicationReader;
-import com.android.tools.r8.experimental.startup.StartupOrder;
import com.android.tools.r8.features.ClassToFeatureSplitMap;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
@@ -87,8 +86,7 @@
new ApplicationReader(builder.build(), options, Timing.empty()).read().toDirect(),
ClassToFeatureSplitMap.createEmptyClassToFeatureSplitMap(),
MainDexInfo.none(),
- GlobalSyntheticsStrategy.forSingleOutputMode(),
- StartupOrder.empty()));
+ GlobalSyntheticsStrategy.forSingleOutputMode()));
modelLibraryMethodsWithCovariantReturnTypes(appView);
Tracer tracer =
new Tracer(
diff --git a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
index f182a0b..b430854 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
@@ -109,6 +109,10 @@
this.targetPredicate = targetPredicate;
}
+ AppView<? extends AppInfoWithClassHierarchy> appView() {
+ return appView;
+ }
+
AppInfoWithClassHierarchy appInfo() {
return appView.appInfo();
}
@@ -228,7 +232,7 @@
? appInfo().resolveMethodOnInterface(method.getHolder(), method.getReference())
: appInfo().resolveMethodOnClass(method.getHolder(), method.getReference());
DexClassAndMethod superTarget =
- methodResolutionResult.lookupInvokeSpecialTarget(method.getHolder(), appInfo());
+ methodResolutionResult.lookupInvokeSpecialTarget(method.getHolder(), appView);
if (superTarget != null
&& !superTarget.isProgramMethod()
&& isTargetType(superTarget.getHolderType())) {
@@ -263,7 +267,7 @@
private final DefinitionContext referencedFrom;
public MethodUseCollector(ProgramMethod context) {
- super(appView, context);
+ super(appView(), context);
this.referencedFrom = DefinitionContextUtils.create(context);
}
@@ -316,7 +320,7 @@
handleRewrittenMethodResolution(
method,
appInfo().unsafeResolveMethodDueToDexFormat(rewrittenMethod),
- result -> result.lookupInvokeSuperTarget(getContext().getHolder(), appInfo()));
+ result -> result.lookupInvokeSuperTarget(getContext().getHolder(), appView, appInfo()));
}
@Override
@@ -486,7 +490,8 @@
// For lambdas that implement an interface, also keep the interface method by simulating an
// invoke to it from the current context.
- LambdaDescriptor descriptor = LambdaDescriptor.tryInfer(callSite, appInfo(), getContext());
+ LambdaDescriptor descriptor =
+ LambdaDescriptor.tryInfer(callSite, appView(), appInfo(), getContext());
if (descriptor != null) {
for (DexType interfaceType : descriptor.interfaces) {
ClassResolutionResult classResolutionResult =
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index a2f3ebc..23e5449 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -26,7 +26,6 @@
import com.android.tools.r8.dex.ApplicationReader;
import com.android.tools.r8.dex.code.DexInstruction;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.experimental.startup.StartupOrder;
import com.android.tools.r8.features.ClassToFeatureSplitMap;
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
@@ -777,8 +776,7 @@
readApplicationForDexOutput(app, new InternalOptions()),
ClassToFeatureSplitMap.createEmptyClassToFeatureSplitMap(),
MainDexInfo.none(),
- GlobalSyntheticsStrategy.forSingleOutputMode(),
- StartupOrder.empty());
+ GlobalSyntheticsStrategy.forSingleOutputMode());
}
protected static AppView<AppInfoWithClassHierarchy> computeAppViewWithClassHierarchy(
diff --git a/src/test/java/com/android/tools/r8/classmerging/KeptTargetsIncompleteDiamondTest.java b/src/test/java/com/android/tools/r8/classmerging/KeptTargetsIncompleteDiamondTest.java
index 57aaddc..cc9170b 100644
--- a/src/test/java/com/android/tools/r8/classmerging/KeptTargetsIncompleteDiamondTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/KeptTargetsIncompleteDiamondTest.java
@@ -87,7 +87,7 @@
DexProgramClass classL = appView.definitionForProgramType(typeL);
DexProgramClass classA = appView.definitionForProgramType(typeA);
LookupResult lookupResult =
- resolutionResult.lookupVirtualDispatchTargets(classI, appView.appInfo(), classL, classA);
+ resolutionResult.lookupVirtualDispatchTargets(classI, appView, classL, classA);
assertTrue(lookupResult.isLookupResultSuccess());
LookupResultSuccess lookupResultSuccess = lookupResult.asLookupResultSuccess();
Set<String> targets = new HashSet<>();
@@ -128,7 +128,7 @@
DexProgramClass classI = appView.definitionForProgramType(typeI);
DexProgramClass classA = appView.definitionForProgramType(typeA);
LookupResult lookupResult =
- resolutionResult.lookupVirtualDispatchTargets(classI, appView.appInfo(), classI, classA);
+ resolutionResult.lookupVirtualDispatchTargets(classI, appView, classI, classA);
assertTrue(lookupResult.isLookupResultSuccess());
LookupResultSuccess lookupResultSuccess = lookupResult.asLookupResultSuccess();
Set<String> targets = new HashSet<>();
@@ -168,7 +168,7 @@
DexProgramClass classI = appView.definitionForProgramType(typeI);
DexProgramClass classA = appView.definitionForProgramType(typeB);
LookupResult lookupResult =
- resolutionResult.lookupVirtualDispatchTargets(classI, appView.appInfo(), classA, classA);
+ resolutionResult.lookupVirtualDispatchTargets(classI, appView, classA, classA);
assertTrue(lookupResult.isLookupResultSuccess());
LookupResultSuccess lookupResultSuccess = lookupResult.asLookupResultSuccess();
Set<String> targets = new HashSet<>();
@@ -206,7 +206,7 @@
DexProgramClass classI = appView.definitionForProgramType(typeI);
DexProgramClass classA = appView.definitionForProgramType(typeB);
LookupResult lookupResult =
- resolutionResult.lookupVirtualDispatchTargets(classI, appView.appInfo(), classA, classA);
+ resolutionResult.lookupVirtualDispatchTargets(classI, appView, classA, classA);
assertTrue(lookupResult.isLookupResultSuccess());
LookupResultSuccess lookupResultSuccess = lookupResult.asLookupResultSuccess();
Set<String> targets = new HashSet<>();
@@ -246,7 +246,7 @@
DexProgramClass classI = appView.definitionForProgramType(typeI);
DexProgramClass classA = appView.definitionForProgramType(typeB);
LookupResult lookupResult =
- resolutionResult.lookupVirtualDispatchTargets(classI, appView.appInfo(), classA, classA);
+ resolutionResult.lookupVirtualDispatchTargets(classI, appView, classA, classA);
assertTrue(lookupResult.isLookupResultSuccess());
LookupResultSuccess lookupResultSuccess = lookupResult.asLookupResultSuccess();
Set<String> targets = new HashSet<>();
diff --git a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
index ced7e4f..84a1bf3 100644
--- a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
@@ -92,7 +92,8 @@
);
AndroidApp application = buildApplication(builder);
- AppInfoWithClassHierarchy appInfo = computeAppInfoWithClassHierarchy(application);
+ AppView<AppInfoWithClassHierarchy> appView = computeAppViewWithClassHierarchy(application);
+ AppInfoWithClassHierarchy appInfo = appView.appInfo();
CodeInspector inspector = new CodeInspector(appInfo.app());
ProgramMethod method = getMethod(inspector, DEFAULT_CLASS_NAME, "int", "x", ImmutableList.of());
assertFalse(
@@ -100,8 +101,8 @@
.resolveMethodOnClassHolderLegacy(method.getReference())
.getSingleTarget()
.isVirtualMethod());
- assertNull(appInfo.lookupDirectTarget(method.getReference(), method));
- assertNotNull(appInfo.lookupStaticTarget(method.getReference(), method));
+ assertNull(appInfo.lookupDirectTarget(method.getReference(), method, appView));
+ assertNotNull(appInfo.lookupStaticTarget(method.getReference(), method, appView));
if (ToolHelper.getDexVm().getVersion().isOlderThanOrEqual(DexVm.Version.V4_4_4)) {
// Dalvik rejects at verification time instead of producing the
@@ -165,7 +166,8 @@
);
AndroidApp application = buildApplication(builder);
- AppInfoWithClassHierarchy appInfo = computeAppInfoWithClassHierarchy(application);
+ AppView<AppInfoWithClassHierarchy> appView = computeAppViewWithClassHierarchy(application);
+ AppInfoWithClassHierarchy appInfo = appView.appInfo();
CodeInspector inspector = new CodeInspector(appInfo.app());
ProgramMethod methodXOnTestSuper =
@@ -191,13 +193,14 @@
assertNull(
appInfo.resolveMethodOnClassLegacy(classTest, methodXOnTestReference).getSingleTarget());
- assertNull(appInfo.lookupDirectTarget(methodXOnTestSuper.getReference(), methodXOnTestSuper));
- assertNull(appInfo.lookupDirectTarget(methodXOnTestReference, methodYOnTest));
+ assertNull(
+ appInfo.lookupDirectTarget(methodXOnTestSuper.getReference(), methodXOnTestSuper, appView));
+ assertNull(appInfo.lookupDirectTarget(methodXOnTestReference, methodYOnTest, appView));
assertNotNull(
- appInfo.lookupStaticTarget(methodXOnTestSuper.getReference(), methodXOnTestSuper));
+ appInfo.lookupStaticTarget(methodXOnTestSuper.getReference(), methodXOnTestSuper, appView));
// Accessing a private target on a different type will fail resolution outright.
- assertNull(appInfo.lookupStaticTarget(methodXOnTestReference, methodYOnTest));
+ assertNull(appInfo.lookupStaticTarget(methodXOnTestReference, methodYOnTest, appView));
assertEquals("OK", runArt(application));
}
@@ -254,7 +257,8 @@
builder.addLibraryFiles(ToolHelper.getDefaultAndroidJar());
}
AndroidApp application = builder.build();
- AppInfoWithClassHierarchy appInfo = computeAppInfoWithClassHierarchy(application);
+ AppView<AppInfoWithClassHierarchy> appView = computeAppViewWithClassHierarchy(application);
+ AppInfoWithClassHierarchy appInfo = appView.appInfo();
DexItemFactory factory = appInfo.dexItemFactory();
DexType i0 = factory.createType("L" + pkg + "/I0;");
@@ -276,13 +280,13 @@
DexMethod mOnI3 = factory.createMethod(i3, mProto, m);
DexMethod mOnI4 = factory.createMethod(i4, mProto, m);
- assertEquals(mOnI0, appInfo.lookupSuperTarget(mOnC0, c1).getReference());
- assertEquals(mOnI1, appInfo.lookupSuperTarget(mOnI1, c1).getReference());
- assertEquals(mOnI2, appInfo.lookupSuperTarget(mOnI2, c1).getReference());
+ assertEquals(mOnI0, appInfo.lookupSuperTarget(mOnC0, c1, appView).getReference());
+ assertEquals(mOnI1, appInfo.lookupSuperTarget(mOnI1, c1, appView).getReference());
+ assertEquals(mOnI2, appInfo.lookupSuperTarget(mOnI2, c1, appView).getReference());
- assertNull(appInfo.lookupSuperTarget(mOnC1, c2)); // C2 is not a subclass of C1.
- assertEquals(mOnI1, appInfo.lookupSuperTarget(mOnI3, c2).getReference());
- assertEquals(mOnI2, appInfo.lookupSuperTarget(mOnI4, c2).getReference());
+ assertNull(appInfo.lookupSuperTarget(mOnC1, c2, appView)); // C2 is not a subclass of C1.
+ assertEquals(mOnI1, appInfo.lookupSuperTarget(mOnI3, c2, appView).getReference());
+ assertEquals(mOnI2, appInfo.lookupSuperTarget(mOnI4, c2, appView).getReference());
// Copy classes to run on the Java VM.
Path out = temp.newFolder().toPath();
diff --git a/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java b/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
index b8078ae..440e8f8 100644
--- a/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
+++ b/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
@@ -81,7 +81,7 @@
AppInfoWithLiveness appInfo = null; // TODO(b/154881041): Remove or compute liveness.
LookupResult lookupResult =
resolutionResult.lookupVirtualDispatchTargets(
- clazz, appInfo(), appInfo, dexReference -> false);
+ clazz, appView, appInfo, dexReference -> false);
assertTrue(lookupResult.isLookupResultSuccess());
assertTrue(lookupResult.asLookupResultSuccess().contains(method));
}
@@ -99,7 +99,7 @@
LookupResultSuccess lookupResult =
appInfo()
.resolveMethodOnInterfaceLegacy(clazz, method.getReference())
- .lookupVirtualDispatchTargets(clazz, appInfo(), appInfo, dexReference -> false)
+ .lookupVirtualDispatchTargets(clazz, appView, appInfo, dexReference -> false)
.asLookupResultSuccess();
assertNotNull(lookupResult);
assertFalse(lookupResult.hasLambdaTargets());
diff --git a/src/test/java/com/android/tools/r8/resolution/InvokeSuperCallInStaticTest.java b/src/test/java/com/android/tools/r8/resolution/InvokeSuperCallInStaticTest.java
index 1b62946..028675a 100644
--- a/src/test/java/com/android/tools/r8/resolution/InvokeSuperCallInStaticTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/InvokeSuperCallInStaticTest.java
@@ -63,8 +63,7 @@
assertTrue(resolutionResult.isSingleResolution());
DexProgramClass context =
appView.definitionForProgramType(buildType(A.class, appInfo.dexItemFactory()));
- DexClassAndMethod lookedUpMethod =
- resolutionResult.lookupInvokeSuperTarget(context, appView.appInfo());
+ DexClassAndMethod lookedUpMethod = resolutionResult.lookupInvokeSuperTarget(context, appView);
assertNotNull(lookedUpMethod);
assertEquals(lookedUpMethod.getReference(), method);
}
diff --git a/src/test/java/com/android/tools/r8/resolution/SingleTargetLookupTest.java b/src/test/java/com/android/tools/r8/resolution/SingleTargetLookupTest.java
index 4c668d0..e010bfe 100644
--- a/src/test/java/com/android/tools/r8/resolution/SingleTargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/SingleTargetLookupTest.java
@@ -215,7 +215,7 @@
LookupResult lookupResult =
resolutionResult.lookupVirtualDispatchTargets(
appView.definitionForProgramType(buildType(Main.class, appView.dexItemFactory())),
- appInfo);
+ appView);
assertTrue(lookupResult.isLookupResultSuccess());
assertFalse(lookupResult.asLookupResultSuccess().hasLambdaTargets());
Set<DexType> targetHolders = Sets.newIdentityHashSet();
diff --git a/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfPrivateStaticMethodTest.java b/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfPrivateStaticMethodTest.java
index 86a0415..a2bf03a 100644
--- a/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfPrivateStaticMethodTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfPrivateStaticMethodTest.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.MethodResolutionResult;
@@ -59,14 +60,15 @@
public static List<Class<?>> CLASSES =
ImmutableList.of(A.class, B.class, C.class, I.class, Main.class);
+ private static AppView<AppInfoWithLiveness> appView;
private static AppInfoWithLiveness appInfo;
@BeforeClass
public static void computeAppInfo() throws Exception {
- appInfo =
+ appView =
computeAppViewWithLiveness(
- buildClasses(CLASSES).addLibraryFile(getMostRecentAndroidJar()).build(), Main.class)
- .appInfo();
+ buildClasses(CLASSES).addLibraryFile(getMostRecentAndroidJar()).build(), Main.class);
+ appInfo = appView.appInfo();
}
private static DexMethod buildMethod(Class<?> clazz, String name) {
@@ -92,7 +94,7 @@
MethodResolutionResult resolutionResult =
appInfo.resolveMethodOnClassLegacy(methodOnB.holder, methodOnB);
DexClass context = appInfo.definitionFor(methodOnB.holder);
- assertTrue(resolutionResult.isIllegalAccessErrorResult(context, appInfo));
+ assertTrue(resolutionResult.isIllegalAccessErrorResult(context, appView));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessTest.java
index 2c0e590..8a540f7 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessTest.java
@@ -132,11 +132,11 @@
assertEquals(
OptionalBool.of(inSameNest),
- resolutionResult.isAccessibleFrom(callerClassDefinition, appInfo));
+ resolutionResult.isAccessibleFrom(callerClassDefinition, appView));
DexClassAndMethod targetSpecial =
- resolutionResult.lookupInvokeSpecialTarget(callerClassDefinition, appInfo);
+ resolutionResult.lookupInvokeSpecialTarget(callerClassDefinition, appView);
DexClassAndMethod targetSuper =
- resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appInfo);
+ resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appView);
if (inSameNest) {
assertEquals(definingClassDefinition.getType(), targetSpecial.getHolderType());
assertEquals(targetSpecial.getReference(), targetSuper.getReference());
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessTest.java
index 61712f9..a165e20 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessTest.java
@@ -105,13 +105,13 @@
// Verify that the resolved method is accessible if in the same nest.
assertEquals(
OptionalBool.of(inSameNest),
- resolutionResult.isAccessibleFrom(callerClassDefinition, appInfo));
+ resolutionResult.isAccessibleFrom(callerClassDefinition, appView));
// Verify that looking up the dispatch target returns the defining method.
DexClassAndMethod targetSpecial =
- resolutionResult.lookupInvokeSpecialTarget(callerClassDefinition, appInfo);
+ resolutionResult.lookupInvokeSpecialTarget(callerClassDefinition, appView);
DexClassAndMethod targetSuper =
- resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appInfo);
+ resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appView);
if (inSameNest) {
assertEquals(definingClassDefinition.type, targetSpecial.getHolderType());
assertEquals(targetSpecial.getReference(), targetSuper.getReference());
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java
index 465b11e..5609ff3 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java
@@ -126,9 +126,11 @@
// Resolution fails when there is a mismatch between the symbolic reference and the definition.
if (!symbolicReferenceIsDefiningType) {
if (inSameNest) {
- assertTrue(resolutionResult.isNoSuchMethodErrorResult(callerClassDefinition, appInfo));
+ assertTrue(
+ resolutionResult.isNoSuchMethodErrorResult(callerClassDefinition, appView, appInfo));
} else {
- assertTrue(resolutionResult.isIllegalAccessErrorResult(callerClassDefinition, appInfo));
+ assertTrue(
+ resolutionResult.isIllegalAccessErrorResult(callerClassDefinition, appView, appInfo));
}
return;
}
@@ -140,14 +142,14 @@
// Verify that the resolved method is accessible only when in the same nest.
assertEquals(
OptionalBool.of(inSameNest),
- resolutionResult.isAccessibleFrom(callerClassDefinition, appInfo));
+ resolutionResult.isAccessibleFrom(callerClassDefinition, appView));
// Verify that looking up the dispatch target returns a valid target
// iff in the same nest and declaredHolder == definingHolder.
DexClassAndMethod targetSpecial =
- resolutionResult.lookupInvokeSpecialTarget(callerClassDefinition, appInfo);
+ resolutionResult.lookupInvokeSpecialTarget(callerClassDefinition, appView);
DexClassAndMethod targetSuper =
- resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appInfo);
+ resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appView);
if (inSameNest) {
assertEquals(definingClassDefinition.type, targetSpecial.getHolderType());
assertEquals(targetSpecial.getReference(), targetSuper.getReference());
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodPublicAccessWithIntermediateTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodPublicAccessWithIntermediateTest.java
index 0a20eab..1a72976 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodPublicAccessWithIntermediateTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodPublicAccessWithIntermediateTest.java
@@ -106,15 +106,15 @@
// Verify that the resolved method is accessible (it is public).
assertEquals(
- OptionalBool.TRUE, resolutionResult.isAccessibleFrom(callerClassDefinition, appInfo));
+ OptionalBool.TRUE, resolutionResult.isAccessibleFrom(callerClassDefinition, appView));
// Verify that looking up the dispatch target returns the defining method.
DexClassAndMethod targetSpecial =
- resolutionResult.lookupInvokeSpecialTarget(callerClassDefinition, appInfo);
+ resolutionResult.lookupInvokeSpecialTarget(callerClassDefinition, appView);
assertEquals(definingClassDefinition.type, targetSpecial.getHolderType());
DexClassAndMethod targetSuper =
- resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appInfo);
+ resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appView);
assertEquals(targetSpecial.getReference(), targetSuper.getReference());
}
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessTest.java
index 9216e56..d0b2806 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessTest.java
@@ -75,7 +75,7 @@
appInfo.definitionFor(buildType(B.class, appInfo.dexItemFactory())).asProgramClass();
DexMethod bar = buildMethod(A.class.getDeclaredMethod("bar"), appInfo.dexItemFactory());
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(bar);
- assertEquals(OptionalBool.of(inSameNest), resolutionResult.isAccessibleFrom(bClass, appInfo));
+ assertEquals(OptionalBool.of(inSameNest), resolutionResult.isAccessibleFrom(bClass, appView));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessWithIntermediateClassTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessWithIntermediateClassTest.java
index 235b3d1..3d09c38 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessWithIntermediateClassTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessWithIntermediateClassTest.java
@@ -74,7 +74,7 @@
appInfo.definitionFor(buildType(B.class, appInfo.dexItemFactory())).asProgramClass();
DexMethod bar = buildMethod(A.class.getDeclaredMethod("bar"), appInfo.dexItemFactory());
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(bar);
- assertEquals(OptionalBool.of(inSameNest), resolutionResult.isAccessibleFrom(bClass, appInfo));
+ assertEquals(OptionalBool.of(inSameNest), resolutionResult.isAccessibleFrom(bClass, appView));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessTest.java
index d86d67d..b2f74fb 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessTest.java
@@ -77,7 +77,7 @@
appInfo.definitionFor(buildType(B.class, appInfo.dexItemFactory())).asProgramClass();
DexMethod bar = buildMethod(A.class.getDeclaredMethod("bar"), appInfo.dexItemFactory());
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(bar);
- assertEquals(OptionalBool.of(inSameNest), resolutionResult.isAccessibleFrom(bClass, appInfo));
+ assertEquals(OptionalBool.of(inSameNest), resolutionResult.isAccessibleFrom(bClass, appView));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessWithIntermediateClassTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessWithIntermediateClassTest.java
index 6c3e040..96fe463 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessWithIntermediateClassTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessWithIntermediateClassTest.java
@@ -73,7 +73,7 @@
appInfo.definitionFor(buildType(B.class, appInfo.dexItemFactory())).asProgramClass();
DexMethod bar = buildMethod(A.class.getDeclaredMethod("bar"), appInfo.dexItemFactory());
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(bar);
- assertEquals(OptionalBool.of(inSameNest), resolutionResult.isAccessibleFrom(bClass, appInfo));
+ assertEquals(OptionalBool.of(inSameNest), resolutionResult.isAccessibleFrom(bClass, appView));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/access/SelfVirtualMethodAccessTest.java b/src/test/java/com/android/tools/r8/resolution/access/SelfVirtualMethodAccessTest.java
index aff8d60..d6f4618 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/SelfVirtualMethodAccessTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/SelfVirtualMethodAccessTest.java
@@ -60,7 +60,7 @@
appInfo.definitionFor(buildType(A.class, appInfo.dexItemFactory())).asProgramClass();
DexMethod bar = buildMethod(A.class.getDeclaredMethod("bar"), appInfo.dexItemFactory());
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(bar);
- assertEquals(OptionalBool.TRUE, resolutionResult.isAccessibleFrom(aClass, appInfo));
+ assertEquals(OptionalBool.TRUE, resolutionResult.isAccessibleFrom(aClass, appView));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/access/indirectfield/IndirectFieldAccessTest.java b/src/test/java/com/android/tools/r8/resolution/access/indirectfield/IndirectFieldAccessTest.java
index 99b02c3..f2b60f2 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/indirectfield/IndirectFieldAccessTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/indirectfield/IndirectFieldAccessTest.java
@@ -67,7 +67,7 @@
appInfo.dexItemFactory());
FieldResolutionResult resolutionResult = appInfo.resolveField(f);
assertTrue(resolutionResult.isSingleFieldResolutionResult());
- assertEquals(OptionalBool.TRUE, resolutionResult.isAccessibleFrom(barMethod, appInfo));
+ assertEquals(OptionalBool.TRUE, resolutionResult.isAccessibleFrom(barMethod, appView));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/access/indirectmethod/IndirectMethodAccessTest.java b/src/test/java/com/android/tools/r8/resolution/access/indirectmethod/IndirectMethodAccessTest.java
index 528b8aa..0599233 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/indirectmethod/IndirectMethodAccessTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/indirectmethod/IndirectMethodAccessTest.java
@@ -67,7 +67,7 @@
DexMethod bar = buildMethod(B.class.getMethod("foo"), appInfo.dexItemFactory());
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(bar);
assertEquals(
- OptionalBool.TRUE, resolutionResult.isAccessibleForVirtualDispatchFrom(cClass, appInfo));
+ OptionalBool.TRUE, resolutionResult.isAccessibleForVirtualDispatchFrom(cClass, appView));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/duplicatedefinitions/MaximallySpecificSingleLibraryPartialTest.java b/src/test/java/com/android/tools/r8/resolution/duplicatedefinitions/MaximallySpecificSingleLibraryPartialTest.java
index e2fd96f..0aac67a 100644
--- a/src/test/java/com/android/tools/r8/resolution/duplicatedefinitions/MaximallySpecificSingleLibraryPartialTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/duplicatedefinitions/MaximallySpecificSingleLibraryPartialTest.java
@@ -95,7 +95,7 @@
(resolution.getResolvedHolder().isProgramClass() ? "Program: " : "Library: ")
+ resolution.getResolvedMethod().getReference().toString());
} else {
- assertTrue(result.isNoSuchMethodErrorResult(mainClass, appInfo));
+ assertTrue(result.isNoSuchMethodErrorResult(mainClass, appView));
methodResults.add(typeName(NoSuchMethodError.class));
result
.asFailedResolution()
diff --git a/src/test/java/com/android/tools/r8/resolution/duplicatedefinitions/MaximallySpecificSingleProgramPartialTest.java b/src/test/java/com/android/tools/r8/resolution/duplicatedefinitions/MaximallySpecificSingleProgramPartialTest.java
index 3d22646..ca57c2f 100644
--- a/src/test/java/com/android/tools/r8/resolution/duplicatedefinitions/MaximallySpecificSingleProgramPartialTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/duplicatedefinitions/MaximallySpecificSingleProgramPartialTest.java
@@ -93,7 +93,7 @@
(resolution.getResolvedHolder().isProgramClass() ? "Program: " : "Library: ")
+ resolution.getResolvedMethod().getReference().toString());
} else {
- assertTrue(result.isNoSuchMethodErrorResult(mainClass, appInfo));
+ assertTrue(result.isNoSuchMethodErrorResult(mainClass, appView));
methodResults.add(typeName(NoSuchMethodError.class));
result
.asFailedResolution()
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java
index 200a3ad..91562c7 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java
@@ -67,7 +67,7 @@
appInfo.resolveMethodOnInterfaceLegacy(method.holder, method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java
index 3f9476e..cf0e5f4 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java
@@ -66,7 +66,7 @@
appInfo.resolveMethodOnInterfaceLegacy(method.holder, method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java
index 1579e3f..49ec9ea 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java
@@ -66,7 +66,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnInterfaceHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
@@ -115,7 +115,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnInterfaceHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DuplicateImportsTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DuplicateImportsTest.java
index 56e1a51..62c0d0c 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DuplicateImportsTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DuplicateImportsTest.java
@@ -66,7 +66,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnInterfaceHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/InvokeInterfaceWithStaticTargetTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/InvokeInterfaceWithStaticTargetTest.java
index 667b6c7..3c6d716 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/InvokeInterfaceWithStaticTargetTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/InvokeInterfaceWithStaticTargetTest.java
@@ -57,7 +57,7 @@
() ->
appInfo
.resolveMethodOnInterfaceHolderLegacy(method)
- .lookupVirtualDispatchTargets(context, appInfo));
+ .lookupVirtualDispatchTargets(context, appView));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java
index c01dc38..ba0ffb3 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java
@@ -66,7 +66,7 @@
appInfo.resolveMethodOnInterfaceLegacy(method.holder, method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/MultipleImplementsTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/MultipleImplementsTest.java
index 5dad4b6..455c14d 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/MultipleImplementsTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/MultipleImplementsTest.java
@@ -64,7 +64,7 @@
appInfo.resolveMethodOnInterfaceLegacy(method.holder, method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/SimpleInterfaceInvokeTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/SimpleInterfaceInvokeTest.java
index fab0e87..75af94a 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/SimpleInterfaceInvokeTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/SimpleInterfaceInvokeTest.java
@@ -64,7 +64,7 @@
appInfo.resolveMethodOnInterfaceLegacy(method.holder, method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
assertFalse(lookupResult.asLookupResultSuccess().hasLambdaTargets());
Set<String> targets = new HashSet<>();
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubInterfaceOverridesTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubInterfaceOverridesTest.java
index 4fb6ea3..c2727e5 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubInterfaceOverridesTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubInterfaceOverridesTest.java
@@ -66,7 +66,7 @@
appInfo.resolveMethodOnInterfaceLegacy(method.holder, method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
assertFalse(lookupResult.asLookupResultSuccess().hasLambdaTargets());
Set<String> targets = new HashSet<>();
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubTypeMissingOverridesTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubTypeMissingOverridesTest.java
index 5563d1c..a0c812a 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubTypeMissingOverridesTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubTypeMissingOverridesTest.java
@@ -63,7 +63,7 @@
appInfo.resolveMethodOnInterfaceLegacy(method.holder, method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
assertFalse(lookupResult.asLookupResultSuccess().hasLambdaTargets());
Set<String> targets = new HashSet<>();
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubTypeOverridesTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubTypeOverridesTest.java
index edc31a9..b5d846d 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubTypeOverridesTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/SubTypeOverridesTest.java
@@ -63,7 +63,7 @@
appInfo.resolveMethodOnInterfaceLegacy(method.holder, method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
assertFalse(lookupResult.asLookupResultSuccess().hasLambdaTargets());
Set<String> targets = new HashSet<>();
diff --git a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateClasspathWidenTest.java b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateClasspathWidenTest.java
index 8a36359..5da6e09 100644
--- a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateClasspathWidenTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateClasspathWidenTest.java
@@ -77,7 +77,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Abstract.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateInitialResolutionHolderTest.java b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateInitialResolutionHolderTest.java
index ae99bf7..68bcc86 100644
--- a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateInitialResolutionHolderTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateInitialResolutionHolderTest.java
@@ -66,7 +66,7 @@
appInfo.definitionForProgramType(
buildType(
Reference.classFromDescriptor(descriptor(Main.class)), appInfo.dexItemFactory()));
- assertEquals(OptionalBool.FALSE, resolutionResult.isAccessibleFrom(programClass, appInfo));
+ assertEquals(OptionalBool.FALSE, resolutionResult.isAccessibleFrom(programClass, appView));
DexType cType =
buildType(Reference.classFromDescriptor(newCDescriptor), appInfo.dexItemFactory());
DexProgramClass cClass = appView.definitionForProgramType(cType);
diff --git a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateReentryTest.java b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateReentryTest.java
index d6c548d..7513d4d 100644
--- a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateReentryTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateReentryTest.java
@@ -62,7 +62,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(A.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateReentryWithNarrowingTest.java b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateReentryWithNarrowingTest.java
index 7cbbb62..e4da615 100644
--- a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateReentryWithNarrowingTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateReentryWithNarrowingTest.java
@@ -66,7 +66,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(A.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateWithDefaultMethod2Test.java b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateWithDefaultMethod2Test.java
index 4bf6dc7..10e3530 100644
--- a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateWithDefaultMethod2Test.java
+++ b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateWithDefaultMethod2Test.java
@@ -76,7 +76,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(A.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateWithDefaultMethodTest.java b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateWithDefaultMethodTest.java
index 9984687..ead6a82 100644
--- a/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateWithDefaultMethodTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/packageprivate/PackagePrivateWithDefaultMethodTest.java
@@ -71,7 +71,7 @@
DexProgramClass context =
appView.definitionForProgramType(buildType(A.class, appInfo.dexItemFactory()));
assertTrue(resolutionResult.isAccessibleFrom(context, appView).isFalse());
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultFailure());
}
diff --git a/src/test/java/com/android/tools/r8/resolution/packageprivate/WidenAccessOutsidePackageTest.java b/src/test/java/com/android/tools/r8/resolution/packageprivate/WidenAccessOutsidePackageTest.java
index 8745ee1..21c346c 100644
--- a/src/test/java/com/android/tools/r8/resolution/packageprivate/WidenAccessOutsidePackageTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/packageprivate/WidenAccessOutsidePackageTest.java
@@ -63,7 +63,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(A.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertFalse(lookupResult.asLookupResultSuccess().hasLambdaTargets());
Set<String> targets = new HashSet<>();
lookupResult
diff --git a/src/test/java/com/android/tools/r8/resolution/singletarget/InstantiatedLowerBoundTest.java b/src/test/java/com/android/tools/r8/resolution/singletarget/InstantiatedLowerBoundTest.java
index 42733a1..788e55b 100644
--- a/src/test/java/com/android/tools/r8/resolution/singletarget/InstantiatedLowerBoundTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/singletarget/InstantiatedLowerBoundTest.java
@@ -136,7 +136,7 @@
DexProgramClass upperBound = appView.definitionForProgramType(typeA);
DexProgramClass lowerBound = appView.definitionForProgramType(typeC);
LookupResult lookupResult =
- resolution.lookupVirtualDispatchTargets(context, appInfo, upperBound, lowerBound);
+ resolution.lookupVirtualDispatchTargets(context, appView, upperBound, lowerBound);
Set<DexMethod> expected = Sets.newIdentityHashSet();
expected.add(fooA);
expected.add(fooB);
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/AbstractInMiddleTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/AbstractInMiddleTest.java
index ac915f2..f9c5927 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/AbstractInMiddleTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/AbstractInMiddleTest.java
@@ -62,7 +62,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultInterfaceMethodInSubInterfaceSubTypeTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultInterfaceMethodInSubInterfaceSubTypeTest.java
index efed293..a64145e 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultInterfaceMethodInSubInterfaceSubTypeTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultInterfaceMethodInSubInterfaceSubTypeTest.java
@@ -65,7 +65,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultInterfaceMethodInSubInterfaceTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultInterfaceMethodInSubInterfaceTest.java
index bfe1d1b..c227f79 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultInterfaceMethodInSubInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultInterfaceMethodInSubInterfaceTest.java
@@ -65,7 +65,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java
index 57b31a1..d9f121b 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java
@@ -66,7 +66,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/InvokeVirtualToInterfaceDefinitionTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/InvokeVirtualToInterfaceDefinitionTest.java
index 64e046a..edb66c9 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/InvokeVirtualToInterfaceDefinitionTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/InvokeVirtualToInterfaceDefinitionTest.java
@@ -65,7 +65,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/KeptTargetsIncompleteLookupTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/KeptTargetsIncompleteLookupTest.java
index a96b487..d2dae9b 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/KeptTargetsIncompleteLookupTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/KeptTargetsIncompleteLookupTest.java
@@ -94,7 +94,7 @@
.appInfo()
.definitionForWithoutExistenceAssert(
buildType(Unrelated.class, appInfo.dexItemFactory())));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
LookupResultSuccess lookupResultSuccess = lookupResult.asLookupResultSuccess();
Set<String> targets = new HashSet<>();
@@ -245,7 +245,7 @@
LookupResult lookupResult =
resolutionResult.lookupVirtualDispatchTargets(
classB,
- appInfo,
+ appView,
(type, subTypeConsumer, callSiteConsumer) -> {
if (type == typeB) {
subTypeConsumer.accept(classB);
@@ -276,7 +276,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Unrelated.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
LookupResultSuccess lookupResultSuccess = lookupResult.asLookupResultSuccess();
Set<String> targets = new HashSet<>();
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateChainTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateChainTest.java
index e1dad43..e1b4be1 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateChainTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateChainTest.java
@@ -65,7 +65,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(TopRunner.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java
index ad30339..4b5f8d2 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java
@@ -72,7 +72,7 @@
DexProgramClass context =
appView.definitionForProgramType(
buildType(ViewModelRunner.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
@@ -122,7 +122,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultFailure());
}
@@ -175,7 +175,7 @@
DexProgramClass context =
appView.definitionForProgramType(
buildType(ViewModelRunnerWithCast.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PrivateOverrideOfVirtualTargetTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PrivateOverrideOfVirtualTargetTest.java
index 536e845..a076a58 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PrivateOverrideOfVirtualTargetTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PrivateOverrideOfVirtualTargetTest.java
@@ -64,7 +64,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(B.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
Set<String> targets = new HashSet<>();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/ProtectedDifferentPackageLookupTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/ProtectedDifferentPackageLookupTest.java
index f7bff16..4ec5810 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/ProtectedDifferentPackageLookupTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/ProtectedDifferentPackageLookupTest.java
@@ -57,7 +57,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
// TODO(b/173363527): Should be an error.
assertTrue(lookupResult.isLookupResultSuccess());
}
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/ProtectedSamePackageLookupTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/ProtectedSamePackageLookupTest.java
index fcfd723..cc72a23 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/ProtectedSamePackageLookupTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/ProtectedSamePackageLookupTest.java
@@ -53,7 +53,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnClassHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
}
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/TargetInDefaultMethodTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/TargetInDefaultMethodTest.java
index 56fa675..8aef8bb 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/TargetInDefaultMethodTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/TargetInDefaultMethodTest.java
@@ -66,7 +66,7 @@
MethodResolutionResult resolutionResult = appInfo.resolveMethodOnInterfaceHolderLegacy(method);
DexProgramClass context =
appView.definitionForProgramType(buildType(Main.class, appInfo.dexItemFactory()));
- LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appInfo);
+ LookupResult lookupResult = resolutionResult.lookupVirtualDispatchTargets(context, appView);
assertTrue(lookupResult.isLookupResultSuccess());
assertFalse(lookupResult.asLookupResultSuccess().hasLambdaTargets());
Set<String> targets = new HashSet<>();