Extend profile rewriting to AssertionError rewriter

Bug: b/265729283
Change-Id: I136817014c7ae28c5959cc084b9108d798a620b7
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 64734f8..b008176 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -765,7 +765,8 @@
     timing.end();
     if (assertionErrorTwoArgsConstructorRewriter != null) {
       timing.begin("Rewrite AssertionError");
-      assertionErrorTwoArgsConstructorRewriter.rewrite(code, methodProcessingContext);
+      assertionErrorTwoArgsConstructorRewriter.rewrite(
+          code, methodProcessor, methodProcessingContext);
       timing.end();
     }
     timing.begin("Run CSE");
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/MethodProcessorEventConsumer.java b/src/main/java/com/android/tools/r8/ir/conversion/MethodProcessorEventConsumer.java
index 16c6ce0..e360a95 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/MethodProcessorEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/MethodProcessorEventConsumer.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.ProgramMethod;
+import com.android.tools.r8.ir.optimize.AssertionErrorTwoArgsConstructorRewriterEventConsumer;
 import com.android.tools.r8.ir.optimize.ServiceLoaderRewriterEventConsumer;
 import com.android.tools.r8.ir.optimize.UtilityMethodsForCodeOptimizationsEventConsumer;
 import com.android.tools.r8.ir.optimize.api.InstanceInitializerOutlinerEventConsumer;
@@ -16,7 +17,8 @@
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 
 public abstract class MethodProcessorEventConsumer
-    implements EnumUnboxerMethodProcessorEventConsumer,
+    implements AssertionErrorTwoArgsConstructorRewriterEventConsumer,
+        EnumUnboxerMethodProcessorEventConsumer,
         InstanceInitializerOutlinerEventConsumer,
         ServiceLoaderRewriterEventConsumer,
         UtilityMethodsForCodeOptimizationsEventConsumer {
@@ -50,6 +52,11 @@
     }
 
     @Override
+    public void acceptAssertionErrorCreateMethod(ProgramMethod method, ProgramMethod context) {
+      // Intentionally empty.
+    }
+
+    @Override
     public void acceptEnumUnboxerCheckNotZeroContext(ProgramMethod method, ProgramMethod context) {
       // Intentionally empty.
     }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriter.java
index 6d5083c..e464f9c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriter.java
@@ -21,6 +21,7 @@
 import com.android.tools.r8.ir.code.InvokeStatic;
 import com.android.tools.r8.ir.code.NewInstance;
 import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.MethodProcessor;
 import com.android.tools.r8.ir.desugar.backports.BackportedMethods;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
 import com.android.tools.r8.utils.InternalOptions;
@@ -42,7 +43,10 @@
     this.dexItemFactory = appView.dexItemFactory();
   }
 
-  public void rewrite(IRCode code, MethodProcessingContext methodProcessingContext) {
+  public void rewrite(
+      IRCode code,
+      MethodProcessor methodProcessor,
+      MethodProcessingContext methodProcessingContext) {
     if (options.canUseAssertionErrorTwoArgumentConstructor()) {
       return;
     }
@@ -66,7 +70,8 @@
             }
             InvokeStatic invoke =
                 InvokeStatic.builder()
-                    .setMethod(createSynthetic(methodProcessingContext).getReference())
+                    .setMethod(
+                        createSynthetic(methodProcessor, methodProcessingContext).getReference())
                     .setFreshOutValue(
                         code, dexItemFactory.assertionErrorType.toTypeElement(appView))
                     .setPosition(current)
@@ -94,7 +99,8 @@
     return synthesizedMethods;
   }
 
-  private ProgramMethod createSynthetic(MethodProcessingContext methodProcessingContext) {
+  private ProgramMethod createSynthetic(
+      MethodProcessor methodProcessor, MethodProcessingContext methodProcessingContext) {
     DexItemFactory factory = appView.dexItemFactory();
     DexProto proto =
         factory.createProto(factory.assertionErrorType, factory.stringType, factory.throwableType);
@@ -126,6 +132,9 @@
                       .toTypeElement(appView, Nullability.definitelyNotNull())
                       .asClassType()));
     }
+    methodProcessor
+        .getEventConsumer()
+        .acceptAssertionErrorCreateMethod(method, methodProcessingContext.getMethodContext());
     return method;
   }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriterEventConsumer.java b/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriterEventConsumer.java
new file mode 100644
index 0000000..8b15685
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriterEventConsumer.java
@@ -0,0 +1,12 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.optimize;
+
+import com.android.tools.r8.graph.ProgramMethod;
+
+public interface AssertionErrorTwoArgsConstructorRewriterEventConsumer {
+
+  void acceptAssertionErrorCreateMethod(ProgramMethod method, ProgramMethod context);
+}
diff --git a/src/main/java/com/android/tools/r8/profile/art/rewriting/ArtProfileRewritingMethodProcessorEventConsumer.java b/src/main/java/com/android/tools/r8/profile/art/rewriting/ArtProfileRewritingMethodProcessorEventConsumer.java
index 4835091..8363e62 100644
--- a/src/main/java/com/android/tools/r8/profile/art/rewriting/ArtProfileRewritingMethodProcessorEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/profile/art/rewriting/ArtProfileRewritingMethodProcessorEventConsumer.java
@@ -43,6 +43,12 @@
   }
 
   @Override
+  public void acceptAssertionErrorCreateMethod(ProgramMethod method, ProgramMethod context) {
+    additionsCollection.addMethodAndHolderIfContextIsInProfile(method, context);
+    parent.acceptAssertionErrorCreateMethod(method, context);
+  }
+
+  @Override
   public void acceptEnumUnboxerCheckNotZeroContext(ProgramMethod method, ProgramMethod context) {
     additionsCollection.applyIfContextIsInProfile(
         context, additionsBuilder -> additionsBuilder.addRule(method));