Check for class initializer before removing visibility bridge

Bug: 220667525
Change-Id: I0c41da7a8742908d37f48e2e50fd10377d68cae8
diff --git a/src/main/java/com/android/tools/r8/optimize/VisibilityBridgeRemover.java b/src/main/java/com/android/tools/r8/optimize/VisibilityBridgeRemover.java
index f24cac2..8055dc4 100644
--- a/src/main/java/com/android/tools/r8/optimize/VisibilityBridgeRemover.java
+++ b/src/main/java/com/android/tools/r8/optimize/VisibilityBridgeRemover.java
@@ -52,9 +52,16 @@
       return false;
     }
     // This is a visibility forward, so check for the direct target.
-    DexEncodedMethod targetMethod =
-        appView.appInfo().unsafeResolveMethodDueToDexFormat(target).getSingleTarget();
-    if (targetMethod == null || !targetMethod.accessFlags.isPublic()) {
+    ProgramMethod targetMethod =
+        appView.appInfo().unsafeResolveMethodDueToDexFormat(target).getResolvedProgramMethod();
+    if (targetMethod == null || !targetMethod.getAccessFlags().isPublic()) {
+      return false;
+    }
+    if (definition.isStatic()
+        && method.getHolder().hasClassInitializer()
+        && method
+            .getHolder()
+            .classInitializationMayHaveSideEffectsInContext(appView, targetMethod)) {
       return false;
     }
     if (Log.ENABLED) {
diff --git a/src/test/java/com/android/tools/r8/shaking/RemoveCallToStaticInitTest.java b/src/test/java/com/android/tools/r8/shaking/RemoveCallToStaticInitTest.java
index 0d1fb3d..27c98f6 100644
--- a/src/test/java/com/android/tools/r8/shaking/RemoveCallToStaticInitTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/RemoveCallToStaticInitTest.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.shaking;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.NeverInline;
@@ -51,14 +50,12 @@
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
         .run(parameters.getRuntime(), Main.class)
-        // TODO(b/220667525): R8 should emit EXPECTED
-        .assertSuccessWithOutputLines(R8_EXPECTED)
+        .assertSuccessWithOutputLines(EXPECTED)
         .inspect(
             inspector -> {
               ClassSubject clazz = inspector.clazz(B.class);
               assertThat(clazz, isPresent());
-              // TODO(b/220667525): Should not remove bridge due to class init.
-              assertThat(clazz.uniqueMethodWithName("foo"), not(isPresent()));
+              assertThat(clazz.uniqueMethodWithName("foo"), isPresent());
             });
   }