Transfer publicized bit to bridge in class merger

This is necessary in order for the "assert publicizedMethodIsPresentOnHolder(method, context)" in PublicizerLense to succeed (since the PublicizerLense looks up the method by signature, and therefore finds the bridge method instead of the original method).

Change-Id: I0a57d9096c5ff98924c9107c7558bba576e83117
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 69126be..3586d6d 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -758,6 +758,10 @@
       publicized = true;
     }
 
+    private void unsetPublicized() {
+      publicized = false;
+    }
+
     private void markUseIdentifierNameString() {
       useIdentifierNameString = true;
     }
@@ -835,6 +839,10 @@
     ensureMutableOI().markPublicized();
   }
 
+  synchronized public void unsetPublicized() {
+    ensureMutableOI().unsetPublicized();
+  }
+
   synchronized public void markUseIdentifierNameString() {
     ensureMutableOI().markUseIdentifierNameString();
   }
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 0ed3c11..4a36895 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -940,15 +940,15 @@
     }
 
     private DexEncodedMethod buildBridgeMethod(
-        DexEncodedMethod signature, DexMethod invocationTarget) {
+        DexEncodedMethod method, DexMethod invocationTarget) {
       DexType holder = target.type;
       DexProto proto = invocationTarget.proto;
-      DexString name = signature.method.name;
-      MethodAccessFlags accessFlags = signature.accessFlags.copy();
+      DexString name = method.method.name;
+      MethodAccessFlags accessFlags = method.accessFlags.copy();
       accessFlags.setBridge();
       accessFlags.setSynthetic();
       accessFlags.unsetAbstract();
-      return new DexEncodedMethod(
+      DexEncodedMethod bridge = new DexEncodedMethod(
           application.dexItemFactory.createMethod(holder, proto, name),
           accessFlags,
           DexAnnotationSet.empty(),
@@ -956,7 +956,14 @@
           new SynthesizedCode(
               new ForwardMethodSourceCode(holder, proto, holder, invocationTarget, Type.DIRECT),
               registry -> registry.registerInvokeDirect(invocationTarget)),
-          signature.hasClassFileVersion() ? signature.getClassFileVersion() : -1);
+          method.hasClassFileVersion() ? method.getClassFileVersion() : -1);
+      if (method.getOptimizationInfo().isPublicized()) {
+        // The bridge is now the public method serving the role of the original method, and should
+        // reflect that this method was publicized.
+        bridge.markPublicized();
+        method.unsetPublicized();
+      }
+      return bridge;
     }
 
     // Returns the method that shadows the given method, or null if method is not shadowed.