Clear initialized classes info after final round of tree shaking
Change-Id: Ibc027f17f729b85a4d0a63c12e186621aa58755c
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 261c4e6..7cabfb6 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -33,7 +33,6 @@
import com.android.tools.r8.graph.PrunedItems;
import com.android.tools.r8.graph.SubtypingInfo;
import com.android.tools.r8.graph.analysis.ClassInitializerAssertionEnablingAnalysis;
-import com.android.tools.r8.graph.analysis.InitializedClassesInInstanceMethodsAnalysis;
import com.android.tools.r8.horizontalclassmerging.HorizontalClassMerger;
import com.android.tools.r8.inspector.internal.InspectorImpl;
import com.android.tools.r8.ir.conversion.IRConverter;
@@ -1141,9 +1140,6 @@
appView, profileCollectionAdditions, executorService, subtypingInfo);
enqueuer.setKeepDeclarations(keepDeclarations);
enqueuer.setAnnotationRemoverBuilder(annotationRemoverBuilder);
- if (appView.options().enableInitializedClassesInInstanceMethodsAnalysis) {
- enqueuer.registerAnalysis(new InitializedClassesInInstanceMethodsAnalysis(appView));
- }
if (AssertionsRewriter.isEnabled(appView.options())) {
ClassInitializerAssertionEnablingAnalysis analysis =
new ClassInitializerAssertionEnablingAnalysis(
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/InitializedClassesInInstanceMethodsAnalysis.java b/src/main/java/com/android/tools/r8/graph/analysis/InitializedClassesInInstanceMethodsAnalysis.java
index 5b7d4e2..ddb64d7 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/InitializedClassesInInstanceMethodsAnalysis.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/InitializedClassesInInstanceMethodsAnalysis.java
@@ -85,6 +85,16 @@
this.appView = appView;
}
+ public static void register(
+ AppView<? extends AppInfoWithClassHierarchy> appView, Enqueuer enqueuer) {
+ if (appView.options().enableInitializedClassesInInstanceMethodsAnalysis
+ && enqueuer.getMode().isInitialTreeShaking()) {
+ enqueuer.registerAnalysis(new InitializedClassesInInstanceMethodsAnalysis(appView));
+ } else {
+ appView.setInitializedClassesInInstanceMethods(null);
+ }
+ }
+
@Override
public void processNewlyInstantiatedClass(
DexProgramClass clazz, ProgramMethod context, EnqueuerWorklist worklist) {
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 5120e8b..78023f5 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -98,6 +98,7 @@
import com.android.tools.r8.graph.analysis.EnqueuerNewInstanceAnalysis;
import com.android.tools.r8.graph.analysis.EnqueuerTypeAccessAnalysis;
import com.android.tools.r8.graph.analysis.GetArrayOfMissingTypeVerifyErrorWorkaround;
+import com.android.tools.r8.graph.analysis.InitializedClassesInInstanceMethodsAnalysis;
import com.android.tools.r8.graph.analysis.InvokeVirtualToInterfaceVerifyErrorWorkaround;
import com.android.tools.r8.graph.analysis.ResourceAccessAnalysis;
import com.android.tools.r8.ir.analysis.proto.ProtoEnqueuerUseRegistry;
@@ -519,6 +520,7 @@
}
if (mode.isTreeShaking()) {
GetArrayOfMissingTypeVerifyErrorWorkaround.register(appView, this);
+ InitializedClassesInInstanceMethodsAnalysis.register(appView, this);
InvokeVirtualToInterfaceVerifyErrorWorkaround.register(appView, this);
if (options.protoShrinking().enableGeneratedMessageLiteShrinking) {
registerAnalysis(new ProtoEnqueuerExtension(appView));