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);