Respect -keep rules in publicizing of fields

Bug: b/131130038
Change-Id: I169aa1d9d2f20746fe92bb49dee52123cf93851f
diff --git a/src/main/java/com/android/tools/r8/optimize/AccessModifier.java b/src/main/java/com/android/tools/r8/optimize/AccessModifier.java
index 7661768..d8b5946 100644
--- a/src/main/java/com/android/tools/r8/optimize/AccessModifier.java
+++ b/src/main/java/com/android/tools/r8/optimize/AccessModifier.java
@@ -27,7 +27,6 @@
 import com.android.tools.r8.ir.optimize.MethodPoolCollection;
 import com.android.tools.r8.optimize.PublicizerLens.PublicizedLensBuilder;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import com.android.tools.r8.shaking.KeepFieldInfo;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.MethodSignatureEquivalence;
 import com.android.tools.r8.utils.OptionalBool;
@@ -134,17 +133,17 @@
   }
 
   private void processField(ProgramField field) {
-    finalizeField(field);
-    publicizeField(field);
+    if (appView.appInfo().isAccessModificationAllowed(field)) {
+      finalizeField(field);
+      publicizeField(field);
+    }
   }
 
   private void finalizeField(ProgramField field) {
     FieldAccessFlags flags = field.getAccessFlags();
     FieldAccessInfo accessInfo =
         appView.appInfo().getFieldAccessInfoCollection().get(field.getReference());
-    KeepFieldInfo keepInfo = appView.getKeepInfo(field);
-    if (keepInfo.isAccessModificationAllowed(options)
-        && !keepInfo.isPinned(options)
+    if (!appView.getKeepInfo(field).isPinned(options)
         && !accessInfo.hasReflectiveWrite()
         && !accessInfo.isWrittenFromMethodHandle()
         && accessInfo.isWrittenOnlyInMethodSatisfying(
@@ -159,17 +158,9 @@
 
   private void publicizeField(ProgramField field) {
     FieldAccessFlags flags = field.getAccessFlags();
-    if (flags.isPublic()) {
-      return;
+    if (!flags.isPublic()) {
+      flags.promoteToPublic();
     }
-    if (!appView.appInfo().isAccessModificationAllowed(field)) {
-      // TODO(b/131130038): Also do not publicize package-private and protected fields that
-      //  are kept.
-      if (flags.isPrivate()) {
-        return;
-      }
-    }
-    flags.promoteToPublic();
   }
 
   private boolean publicizeMethod(ProgramMethod method) {
diff --git a/src/test/examples/naming044/keep-rules-001.txt b/src/test/examples/naming044/keep-rules-001.txt
index a191b54..4d818ad 100644
--- a/src/test/examples/naming044/keep-rules-001.txt
+++ b/src/test/examples/naming044/keep-rules-001.txt
@@ -6,6 +6,6 @@
 
 -repackageclasses ''
 
--keep,allowobfuscation class * {
+-keep,allowaccessmodification,allowobfuscation class * {
   *;
 }
diff --git a/src/test/examples/naming044/keep-rules-002.txt b/src/test/examples/naming044/keep-rules-002.txt
index c6e495b..084e4ea 100644
--- a/src/test/examples/naming044/keep-rules-002.txt
+++ b/src/test/examples/naming044/keep-rules-002.txt
@@ -6,6 +6,6 @@
 
 -repackageclasses 'p44.x'
 
--keep,allowobfuscation class * {
+-keep,allowaccessmodification,allowobfuscation class * {
   *;
 }
diff --git a/src/test/examples/naming044/keep-rules-003.txt b/src/test/examples/naming044/keep-rules-003.txt
index 10b2856..e6780a0 100644
--- a/src/test/examples/naming044/keep-rules-003.txt
+++ b/src/test/examples/naming044/keep-rules-003.txt
@@ -6,6 +6,6 @@
 
 -flattenpackagehierarchy ''
 
--keep,allowobfuscation class * {
+-keep,allowaccessmodification,allowobfuscation class * {
   *;
 }
diff --git a/src/test/examples/naming044/keep-rules-004.txt b/src/test/examples/naming044/keep-rules-004.txt
index 3785014..3d3ef56 100644
--- a/src/test/examples/naming044/keep-rules-004.txt
+++ b/src/test/examples/naming044/keep-rules-004.txt
@@ -6,6 +6,6 @@
 
 -flattenpackagehierarchy 'p44.y'
 
--keep,allowobfuscation class * {
+-keep,allowaccessmodification,allowobfuscation class * {
   *;
 }
diff --git a/src/test/examples/naming044/keep-rules-005.txt b/src/test/examples/naming044/keep-rules-005.txt
index 5583ccf..b4b4bcc 100644
--- a/src/test/examples/naming044/keep-rules-005.txt
+++ b/src/test/examples/naming044/keep-rules-005.txt
@@ -4,6 +4,6 @@
 
 -allowaccessmodification
 
--keep,allowobfuscation class * {
+-keep,allowaccessmodification,allowobfuscation class * {
   *;
 }
diff --git a/src/test/examples/naming101/keep-rules-001.txt b/src/test/examples/naming101/keep-rules-001.txt
index a191b54..4d818ad 100644
--- a/src/test/examples/naming101/keep-rules-001.txt
+++ b/src/test/examples/naming101/keep-rules-001.txt
@@ -6,6 +6,6 @@
 
 -repackageclasses ''
 
--keep,allowobfuscation class * {
+-keep,allowaccessmodification,allowobfuscation class * {
   *;
 }
diff --git a/src/test/examples/naming101/keep-rules-002.txt b/src/test/examples/naming101/keep-rules-002.txt
index bbdde22..cdeb26a 100644
--- a/src/test/examples/naming101/keep-rules-002.txt
+++ b/src/test/examples/naming101/keep-rules-002.txt
@@ -6,10 +6,10 @@
 
 -repackageclasses 'naming101.a'
 
--keep public class **.a {
+-keep,allowaccessmodification public class **.a {
   *;
 }
 
--keep,allowobfuscation class * {
+-keep,allowaccessmodification,allowobfuscation class * {
   *;
 }
diff --git a/src/test/examples/naming101/keep-rules-003.txt b/src/test/examples/naming101/keep-rules-003.txt
index 10b2856..e6780a0 100644
--- a/src/test/examples/naming101/keep-rules-003.txt
+++ b/src/test/examples/naming101/keep-rules-003.txt
@@ -6,6 +6,6 @@
 
 -flattenpackagehierarchy ''
 
--keep,allowobfuscation class * {
+-keep,allowaccessmodification,allowobfuscation class * {
   *;
 }
diff --git a/src/test/examples/naming101/keep-rules-005.txt b/src/test/examples/naming101/keep-rules-005.txt
index 5583ccf..b4b4bcc 100644
--- a/src/test/examples/naming101/keep-rules-005.txt
+++ b/src/test/examples/naming101/keep-rules-005.txt
@@ -4,6 +4,6 @@
 
 -allowaccessmodification
 
--keep,allowobfuscation class * {
+-keep,allowaccessmodification,allowobfuscation class * {
   *;
 }
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/accessrelaxation/IfRuleWithAccessRelaxationTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/accessrelaxation/IfRuleWithAccessRelaxationTest.java
index 882076c..5a27372 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/accessrelaxation/IfRuleWithAccessRelaxationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/accessrelaxation/IfRuleWithAccessRelaxationTest.java
@@ -41,7 +41,9 @@
             .addInnerClasses(IfRuleWithAccessRelaxationTest.class)
             .addKeepMainRule(TestClass.class)
             .addKeepRules(
-                "-keep class " + TestClass.class.getTypeName() + " { int field; }",
+                "-keep,allowaccessmodification class " + TestClass.class.getTypeName() + " {",
+                "  int field;",
+                "}",
                 "-if class " + TestClass.class.getTypeName() + " { protected int field; }",
                 "-keep class " + Unused1.class.getTypeName(),
                 "-if class " + TestClass.class.getTypeName() + " {",