Make GeneratedMessageLiteShrinker accessible from AppView
Change-Id: I1896e01ef97a232cc617d1f89a2fd315fbc27cd4
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 7163e4e..7ba24cf 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -7,6 +7,7 @@
import com.android.tools.r8.OptionalBool;
import com.android.tools.r8.graph.analysis.InitializedClassesInInstanceMethodsAnalysis.InitializedClassesInInstanceMethods;
import com.android.tools.r8.ir.analysis.proto.GeneratedExtensionRegistryShrinker;
+import com.android.tools.r8.ir.analysis.proto.GeneratedMessageLiteShrinker;
import com.android.tools.r8.ir.analysis.proto.ProtoShrinker;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.shaking.RootSetBuilder.RootSet;
@@ -166,6 +167,12 @@
return defaultValue;
}
+ public void withGeneratedMessageLiteShrinker(Consumer<GeneratedMessageLiteShrinker> consumer) {
+ if (protoShrinker != null && protoShrinker.generatedMessageLiteShrinker != null) {
+ consumer.accept(protoShrinker.generatedMessageLiteShrinker);
+ }
+ }
+
public GraphLense graphLense() {
return graphLense;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
index 3b842eb..f0f35bb 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
@@ -37,11 +37,14 @@
private final TypeLatticeElement objectArrayType;
private final TypeLatticeElement stringType;
- public GeneratedMessageLiteShrinker(AppView<AppInfoWithLiveness> appView) {
+ public GeneratedMessageLiteShrinker(
+ AppView<AppInfoWithLiveness> appView,
+ RawMessageInfoDecoder decoder,
+ ProtoReferences references) {
this.appView = appView;
- this.decoder = appView.protoShrinker().decoder;
+ this.decoder = decoder;
this.encoder = new RawMessageInfoEncoder(appView.dexItemFactory());
- this.references = appView.protoShrinker().references;
+ this.references = references;
this.throwingInfo = ThrowingInfo.defaultForConstString(appView.options());
// Types.
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoShrinker.java
index 599bb84..21f8ff9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoShrinker.java
@@ -13,6 +13,7 @@
public final RawMessageInfoDecoder decoder;
public final ProtoFieldTypeFactory factory;
public final GeneratedExtensionRegistryShrinker generatedExtensionRegistryShrinker;
+ public final GeneratedMessageLiteShrinker generatedMessageLiteShrinker;
public final ProtoReferences references;
public ProtoShrinker(AppView<AppInfoWithLiveness> appView) {
@@ -24,6 +25,10 @@
appView.options().enableGeneratedExtensionRegistryShrinking
? new GeneratedExtensionRegistryShrinker(appView, references)
: null;
+ this.generatedMessageLiteShrinker =
+ appView.options().enableGeneratedMessageLiteShrinking
+ ? new GeneratedMessageLiteShrinker(appView, decoder, references)
+ : null;
this.references = references;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index be491f4..f7d9077 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -31,7 +31,6 @@
import com.android.tools.r8.ir.analysis.InitializedClassesOnNormalExitAnalysis;
import com.android.tools.r8.ir.analysis.TypeChecker;
import com.android.tools.r8.ir.analysis.constant.SparseConditionalConstantPropagation;
-import com.android.tools.r8.ir.analysis.proto.GeneratedMessageLiteShrinker;
import com.android.tools.r8.ir.analysis.sideeffect.ClassInitializerSideEffectAnalysis;
import com.android.tools.r8.ir.analysis.sideeffect.ClassInitializerSideEffectAnalysis.ClassInitializerSideEffect;
import com.android.tools.r8.ir.analysis.type.Nullability;
@@ -128,7 +127,6 @@
private final Outliner outliner;
private final ClassInitializerDefaultsOptimization classInitializerDefaultsOptimization;
private final DynamicTypeOptimization dynamicTypeOptimization;
- private final GeneratedMessageLiteShrinker generatedMessageLiteShrinker;
private final LibraryMethodOverrideAnalysis libraryMethodOverrideAnalysis;
private final StringConcatRewriter stringConcatRewriter;
private final StringOptimizer stringOptimizer;
@@ -212,7 +210,6 @@
this.classInliner = null;
this.classStaticizer = null;
this.dynamicTypeOptimization = null;
- this.generatedMessageLiteShrinker = null;
this.libraryMethodOverrideAnalysis = null;
this.inliner = null;
this.outliner = null;
@@ -259,10 +256,6 @@
options.enableDynamicTypeOptimization
? new DynamicTypeOptimization(appViewWithLiveness)
: null;
- this.generatedMessageLiteShrinker =
- options.enableGeneratedMessageLiteShrinking
- ? new GeneratedMessageLiteShrinker(appViewWithLiveness)
- : null;
this.libraryMethodOverrideAnalysis =
options.enableTreeShakingOfLibraryMethodOverrides
? new LibraryMethodOverrideAnalysis(appViewWithLiveness)
@@ -289,7 +282,6 @@
this.classInliner = null;
this.classStaticizer = null;
this.dynamicTypeOptimization = null;
- this.generatedMessageLiteShrinker = null;
this.libraryMethodOverrideAnalysis = null;
this.inliner = null;
this.outliner = null;
@@ -1074,9 +1066,7 @@
dynamicTypeOptimization.insertAssumeDynamicTypeInstructions(code);
}
- if (generatedMessageLiteShrinker != null) {
- generatedMessageLiteShrinker.run(method, code);
- }
+ appView.withGeneratedMessageLiteShrinker(shrinker -> shrinker.run(method, code));
previous = printMethod(code, "IR after null tracking (SSA)", previous);