Do not publicize indirectly kept methods.

Previously, publicizer checks noShrinking and noObfuscation, which refer
to items that are directly mentioned at keep rules. It should have taken
into account indirectly kept items: pinned items.

Bug: 123575857, 121005865
Change-Id: I387bc653a8ffc164acf44e6e05d97e6499d3b418
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index cb038b3..6c3e47e 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -368,9 +368,12 @@
         timing.end();
       }
 
+      assert appView.appInfo().hasLiveness();
+
       if (options.getProguardConfiguration().isAccessModificationAllowed()) {
         GraphLense publicizedLense =
-            ClassAndMemberPublicizer.run(executorService, timing, application, appView, rootSet);
+            ClassAndMemberPublicizer.run(
+                executorService, timing, application, appView.withLiveness(), rootSet);
         if (publicizedLense != appView.graphLense()) {
           appView.setGraphLense(publicizedLense);
           // We can now remove visibility bridges. Note that we do not need to update the
@@ -481,8 +484,6 @@
             new EnumOrdinalMapCollector(appViewWithLiveness, options).run());
       }
 
-      assert appView.appInfo().hasLiveness();
-
       timing.begin("Create IR");
       Set<DexCallSite> desugaredCallSites;
       CfgPrinter printer = options.printCfg ? new CfgPrinter() : null;
diff --git a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
index fc48225..f080071 100644
--- a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
+++ b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.ir.optimize.MethodPoolCollection;
 import com.android.tools.r8.optimize.PublicizerLense.PublicizedLenseBuilder;
+import com.android.tools.r8.shaking.Enqueuer.AppInfoWithLiveness;
 import com.android.tools.r8.shaking.RootSetBuilder.RootSet;
 import com.android.tools.r8.utils.Timing;
 import java.util.LinkedHashSet;
@@ -22,13 +23,16 @@
 public final class ClassAndMemberPublicizer {
 
   private final DexApplication application;
-  private final AppView appView;
+  private final AppView<? extends AppInfoWithLiveness> appView;
   private final RootSet rootSet;
   private final MethodPoolCollection methodPoolCollection;
 
   private final PublicizedLenseBuilder lenseBuilder = PublicizerLense.createBuilder();
 
-  private ClassAndMemberPublicizer(DexApplication application, AppView appView, RootSet rootSet) {
+  private ClassAndMemberPublicizer(
+      DexApplication application,
+      AppView<? extends AppInfoWithLiveness> appView,
+      RootSet rootSet) {
     this.application = application;
     this.appView = appView;
     this.methodPoolCollection = new MethodPoolCollection(application);
@@ -45,7 +49,7 @@
       ExecutorService executorService,
       Timing timing,
       DexApplication application,
-      AppView appView,
+      AppView<? extends AppInfoWithLiveness> appView,
       RootSet rootSet)
       throws ExecutionException {
     return new ClassAndMemberPublicizer(application, appView, rootSet).run(executorService, timing);
@@ -107,7 +111,7 @@
 
     if (!accessFlags.isStatic()) {
       // If this method is mentioned in keep rules, do not transform (rule applications changed).
-      if (rootSet.noShrinking.containsKey(encodedMethod.method)) {
+      if (appView.appInfo().isPinned(encodedMethod.method)) {
         return false;
       }
 
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
index 80a4ffb..8fc4c6f 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
@@ -132,8 +132,6 @@
 
   @Test
   public void testR8_withKeepRules() throws Exception {
-    // TODO(b/123575857): even with -allowaccessmodification, they should not be publicized.
-    assumeTrue(!accessModification);
     R8TestCompileResult result = testForR8(backend)
         .addProgramClasses(CLASSES)
         .enableClassInliningAnnotations()
diff --git a/src/test/java/com/android/tools/r8/naming/NamingTestBase.java b/src/test/java/com/android/tools/r8/naming/NamingTestBase.java
index 4f4639a..7b6052a 100644
--- a/src/test/java/com/android/tools/r8/naming/NamingTestBase.java
+++ b/src/test/java/com/android/tools/r8/naming/NamingTestBase.java
@@ -9,7 +9,6 @@
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.GraphLense;
-import com.android.tools.r8.optimize.ClassAndMemberPublicizer;
 import com.android.tools.r8.shaking.Enqueuer;
 import com.android.tools.r8.shaking.ProguardConfiguration;
 import com.android.tools.r8.shaking.RootSetBuilder;
@@ -74,12 +73,6 @@
     RootSet rootSet =
         new RootSetBuilder(appView, program, configuration.getRules(), options).run(executor);
 
-    if (options.getProguardConfiguration().isAccessModificationAllowed()) {
-      ClassAndMemberPublicizer.run(executor, timing, program, appView, rootSet);
-      rootSet =
-          new RootSetBuilder(appView, program, configuration.getRules(), options).run(executor);
-    }
-
     Enqueuer enqueuer = new Enqueuer(appView, options, null, options.forceProguardCompatibility);
     AppInfoWithSubtyping appInfo =
         enqueuer.traceApplication(rootSet, configuration.getDontWarnPatterns(), executor, timing);