Disallow optimization of modeled proto fields

Change-Id: I9767ac2677d68723bf5dce62e6f06b359ff7fa02
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 b19d297..809f0ad 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
@@ -14,9 +14,11 @@
 import com.android.tools.r8.graph.AccessControl;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexMember;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.ProgramMember;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.analysis.proto.schema.ProtoMessageInfo;
 import com.android.tools.r8.ir.analysis.proto.schema.ProtoObject;
@@ -110,6 +112,16 @@
             }
           });
     }
+
+    DexProgramClass rawMessageInfoClass =
+        asProgramClassOrNull(
+            appView.appInfo().definitionForWithoutExistenceAssert(references.rawMessageInfoType));
+    if (rawMessageInfoClass != null) {
+      disallowOptimization(
+          rawMessageInfoClass, references.rawMessageInfoInfoField, dependentMinimumKeepInfo);
+      disallowOptimization(
+          rawMessageInfoClass, references.rawMessageInfoObjectsField, dependentMinimumKeepInfo);
+    }
   }
 
   private void disallowSignatureOptimizations(KeepMethodInfo.Joiner methodJoiner) {
@@ -124,6 +136,18 @@
         .disallowUnusedReturnValueOptimization();
   }
 
+  private void disallowOptimization(
+      DexProgramClass clazz,
+      DexMember<?, ?> reference,
+      DependentMinimumKeepInfoCollection dependentMinimumKeepInfo) {
+    ProgramMember<?, ?> member = clazz.lookupProgramMember(reference);
+    if (member != null) {
+      dependentMinimumKeepInfo
+          .getOrCreateUnconditionalMinimumKeepInfoFor(reference)
+          .disallowOptimization();
+    }
+  }
+
   public void run(IRCode code) {
     ProgramMethod method = code.context();
     if (references.isDynamicMethod(method.getReference())) {