Bypass missing classes check for reflective accesses
Bug: 160818086
Change-Id: Ifc9f676d3662a43576a5965a86c695c2e99be908
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 f2cdfea..6fdcb48 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -589,6 +589,12 @@
return clazz != null && clazz.isProgramClass() ? clazz.asProgramClass() : null;
}
+ private DexProgramClass getProgramClassOrNullFromReflectiveAccess(DexType type) {
+ // This is using appInfo.definitionForWithoutExistenceAssert() to avoid that we report
+ // reflectively accessed types as missing.
+ return asProgramClassOrNull(appInfo().definitionForWithoutExistenceAssert(type));
+ }
+
private void warnIfLibraryTypeInheritsFromProgramType(DexLibraryClass clazz) {
if (clazz.superType != null) {
ensureFromLibraryOrThrow(clazz.superType, clazz);
@@ -3672,11 +3678,7 @@
return;
}
if (identifierItem.isDexType()) {
- // This is using appView.definitionFor() to avoid that we report reflectively accessed types
- // as missing.
- DexProgramClass clazz =
- asProgramClassOrNull(
- appInfo().definitionForWithoutExistenceAssert(identifierItem.asDexType()));
+ DexProgramClass clazz = getProgramClassOrNullFromReflectiveAccess(identifierItem.asDexType());
if (clazz == null) {
return;
}
@@ -3756,7 +3758,7 @@
return;
}
- DexProgramClass clazz = getProgramClassOrNull(instantiatedType);
+ DexProgramClass clazz = getProgramClassOrNullFromReflectiveAccess(instantiatedType);
if (clazz == null) {
return;
}