Pass worklist to EnqueuerFieldAccessAnalysis callbacks
Change-Id: I64ff459a93637d1d624e5d669e6abf1b704b4487
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/EnqueuerFieldAccessAnalysis.java b/src/main/java/com/android/tools/r8/graph/analysis/EnqueuerFieldAccessAnalysis.java
index eee1f34..d8dadc5 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/EnqueuerFieldAccessAnalysis.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/EnqueuerFieldAccessAnalysis.java
@@ -7,18 +7,35 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.FieldResolutionResult;
import com.android.tools.r8.graph.ProgramMethod;
+import com.android.tools.r8.shaking.EnqueuerWorklist;
public interface EnqueuerFieldAccessAnalysis {
- void traceInstanceFieldRead(
- DexField field, FieldResolutionResult resolutionResult, ProgramMethod context);
+ default void traceInstanceFieldRead(
+ DexField field,
+ FieldResolutionResult resolutionResult,
+ ProgramMethod context,
+ EnqueuerWorklist worklist) {}
+ ;
- void traceInstanceFieldWrite(
- DexField field, FieldResolutionResult resolutionResult, ProgramMethod context);
+ default void traceInstanceFieldWrite(
+ DexField field,
+ FieldResolutionResult resolutionResult,
+ ProgramMethod context,
+ EnqueuerWorklist worklist) {}
+ ;
- void traceStaticFieldRead(
- DexField field, FieldResolutionResult resolutionResult, ProgramMethod context);
+ default void traceStaticFieldRead(
+ DexField field,
+ FieldResolutionResult resolutionResult,
+ ProgramMethod context,
+ EnqueuerWorklist worklist) {}
+ ;
- void traceStaticFieldWrite(
- DexField field, FieldResolutionResult resolutionResult, ProgramMethod context);
+ default void traceStaticFieldWrite(
+ DexField field,
+ FieldResolutionResult resolutionResult,
+ ProgramMethod context,
+ EnqueuerWorklist worklist) {}
+ ;
}
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/GetArrayOfMissingTypeVerifyErrorWorkaround.java b/src/main/java/com/android/tools/r8/graph/analysis/GetArrayOfMissingTypeVerifyErrorWorkaround.java
index 74817d0..48ca34d 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/GetArrayOfMissingTypeVerifyErrorWorkaround.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/GetArrayOfMissingTypeVerifyErrorWorkaround.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.graph.FieldResolutionResult;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.shaking.Enqueuer;
+import com.android.tools.r8.shaking.EnqueuerWorklist;
import com.android.tools.r8.shaking.KeepInfo.Joiner;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.InternalOptions;
@@ -61,7 +62,10 @@
@Override
public void traceInstanceFieldRead(
- DexField field, FieldResolutionResult resolutionResult, ProgramMethod context) {
+ DexField field,
+ FieldResolutionResult resolutionResult,
+ ProgramMethod context,
+ EnqueuerWorklist worklist) {
if (isUnsafeToUseFieldOnDalvik(field)) {
enqueuer.getKeepInfo().joinMethod(context, Joiner::disallowOptimization);
}
@@ -69,7 +73,10 @@
@Override
public void traceStaticFieldRead(
- DexField field, FieldResolutionResult resolutionResult, ProgramMethod context) {
+ DexField field,
+ FieldResolutionResult resolutionResult,
+ ProgramMethod context,
+ EnqueuerWorklist worklist) {
if (isUnsafeToUseFieldOnDalvik(field)) {
enqueuer.getKeepInfo().joinMethod(context, Joiner::disallowOptimization);
}
@@ -95,13 +102,19 @@
@Override
public void traceInstanceFieldWrite(
- DexField field, FieldResolutionResult resolutionResult, ProgramMethod context) {
+ DexField field,
+ FieldResolutionResult resolutionResult,
+ ProgramMethod context,
+ EnqueuerWorklist worklist) {
// Intentionally empty.
}
@Override
public void traceStaticFieldWrite(
- DexField field, FieldResolutionResult resolutionResult, ProgramMethod context) {
+ DexField field,
+ FieldResolutionResult resolutionResult,
+ ProgramMethod context,
+ EnqueuerWorklist worklist) {
// Intentionally empty.
}
}
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 7a0c559..1622376 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -1463,7 +1463,8 @@
FieldResolutionResult resolutionResult = resolveField(fieldReference, currentMethod);
fieldAccessAnalyses.forEach(
analysis ->
- analysis.traceInstanceFieldRead(fieldReference, resolutionResult, currentMethod));
+ analysis.traceInstanceFieldRead(
+ fieldReference, resolutionResult, currentMethod, workList));
if (resolutionResult.isFailedOrUnknownResolution()) {
// Must trace the types from the field reference even if it does not exist.
@@ -1521,7 +1522,8 @@
FieldResolutionResult resolutionResult = resolveField(fieldReference, currentMethod);
fieldAccessAnalyses.forEach(
analysis ->
- analysis.traceInstanceFieldWrite(fieldReference, resolutionResult, currentMethod));
+ analysis.traceInstanceFieldWrite(
+ fieldReference, resolutionResult, currentMethod, workList));
if (resolutionResult.isFailedOrUnknownResolution()) {
// Must trace the types from the field reference even if it does not exist.
@@ -1576,7 +1578,9 @@
FieldResolutionResult resolutionResult = resolveField(fieldReference, currentMethod);
fieldAccessAnalyses.forEach(
- analysis -> analysis.traceStaticFieldRead(fieldReference, resolutionResult, currentMethod));
+ analysis ->
+ analysis.traceStaticFieldRead(
+ fieldReference, resolutionResult, currentMethod, workList));
if (resolutionResult.isFailedOrUnknownResolution()) {
// Must trace the types from the field reference even if it does not exist.
@@ -1648,7 +1652,8 @@
FieldResolutionResult resolutionResult = resolveField(fieldReference, currentMethod);
fieldAccessAnalyses.forEach(
analysis ->
- analysis.traceStaticFieldWrite(fieldReference, resolutionResult, currentMethod));
+ analysis.traceStaticFieldWrite(
+ fieldReference, resolutionResult, currentMethod, workList));
if (resolutionResult.isFailedOrUnknownResolution()) {
// Must trace the types from the field reference even if it does not exist.