Check the existence of JvmConstructorExtension by using visitor.

Bug: 70169921
Change-Id: I1920844a9e1a8653fdb805efbd9c0e295a9e724d
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataJvmExtensionUtils.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataJvmExtensionUtils.java
index 66208ad..85e3540 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataJvmExtensionUtils.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataJvmExtensionUtils.java
@@ -6,6 +6,9 @@
 import com.google.common.collect.ImmutableList;
 import java.util.Arrays;
 import java.util.List;
+import kotlinx.metadata.KmConstructor;
+import kotlinx.metadata.KmConstructorExtensionVisitor;
+import kotlinx.metadata.KmConstructorVisitor;
 import kotlinx.metadata.KmExtensionType;
 import kotlinx.metadata.KmFunction;
 import kotlinx.metadata.KmFunctionExtensionVisitor;
@@ -13,6 +16,7 @@
 import kotlinx.metadata.KmProperty;
 import kotlinx.metadata.KmPropertyExtensionVisitor;
 import kotlinx.metadata.KmPropertyVisitor;
+import kotlinx.metadata.jvm.JvmConstructorExtensionVisitor;
 import kotlinx.metadata.jvm.JvmFieldSignature;
 import kotlinx.metadata.jvm.JvmFunctionExtensionVisitor;
 import kotlinx.metadata.jvm.JvmMethodSignature;
@@ -73,6 +77,32 @@
     }
   }
 
+  static class KmConstructorProcessor {
+    private JvmMethodSignature signature = null;
+
+    KmConstructorProcessor(KmConstructor kmConstructor) {
+      kmConstructor.accept(new KmConstructorVisitor() {
+        @Override
+        public KmConstructorExtensionVisitor visitExtensions(KmExtensionType type) {
+          if (type != JvmConstructorExtensionVisitor.TYPE) {
+            return null;
+          }
+          return new JvmConstructorExtensionVisitor() {
+            @Override
+            public void visit(JvmMethodSignature desc) {
+              assert signature == null : signature.asString();
+              signature = desc;
+            }
+          };
+        }
+      });
+    }
+
+    JvmMethodSignature signature() {
+      return signature;
+    }
+  }
+
   static class KmFunctionProcessor {
     // Custom name via @JvmName("..."). Otherwise, null.
     private JvmMethodSignature signature = null;
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java
index 80069a2..5f7843f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java
@@ -16,11 +16,11 @@
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.kotlin.KotlinMetadataJvmExtensionUtils.KmConstructorProcessor;
 import com.android.tools.r8.kotlin.KotlinMetadataJvmExtensionUtils.KmFunctionProcessor;
 import com.android.tools.r8.kotlin.KotlinMetadataJvmExtensionUtils.KmPropertyProcessor;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import com.android.tools.r8.utils.Box;
 import java.util.List;
 import kotlinx.metadata.KmConstructor;
 import kotlinx.metadata.KmFunction;
@@ -263,9 +263,10 @@
     }
     // TODO(b/70169921): {@link KmConstructor.extensions} is private, i.e., no way to alter!
     //   Thus, we rely on original metadata for now.
-    Box<Boolean> hasJvmExtension = new Box<>(false);
+    KmConstructorProcessor kmConstructorProcessor = new KmConstructorProcessor(original);
+    JvmMethodSignature jvmMethodSignature = kmConstructorProcessor.signature();
     KmConstructor kmConstructor =
-        hasJvmExtension.get()
+        jvmMethodSignature != null
             ? original
             // TODO(b/70169921): Consult kotlinx.metadata.Flag.Constructor to set IS_PRIMARY.
             : new KmConstructor(method.accessFlags.getAsKotlinFlags());