Model intrinsics checkNotNullParameter and throwParameterIsNullNPE

Bug: 139276374
Change-Id: If7651b00eafa33af2a41626937b1e6b37f3d4aa1
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 1e69a6b..40c2ce3 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -113,7 +113,11 @@
     this.extraNeverInlineMethods =
         appView.options().kotlinOptimizationOptions().disableKotlinSpecificOptimizations
             ? ImmutableSet.of()
-            : ImmutableSet.of(intrinsics.throwNpe, intrinsics.throwParameterIsNullException);
+            : ImmutableSet.of(
+                intrinsics.throwNpe,
+                intrinsics.throwParameterIsNullException,
+                intrinsics.throwParameterIsNullNPE,
+                intrinsics.throwParameterIsNullIAE);
     this.lensCodeRewriter = lensCodeRewriter;
     this.mainDexInfo = appView.appInfo().getMainDexInfo();
     this.singleInlineCallers =
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
index b5ced8c..d994add 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
@@ -101,6 +101,7 @@
 import com.android.tools.r8.ir.optimize.info.initializer.NonTrivialInstanceInitializerInfo;
 import com.android.tools.r8.ir.optimize.typechecks.CheckCastAndInstanceOfMethodSpecialization;
 import com.android.tools.r8.kotlin.Kotlin;
+import com.android.tools.r8.kotlin.Kotlin.Intrinsics;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.Timing;
@@ -744,11 +745,13 @@
     }
     // We need to ignore the holder, since Kotlin adds different versions of null-check machinery,
     // e.g., kotlin.collections.ArraysKt___ArraysKt... or kotlin.jvm.internal.ArrayIteratorKt...
-    DexMethod checkParameterIsNotNullMethod =
-        appView.dexItemFactory().kotlin.intrinsics.checkParameterIsNotNull;
+    Intrinsics intrinsics = appView.dexItemFactory().kotlin.intrinsics;
     DexMethod originalInvokedMethod =
         appView.graphLens().getOriginalMethodSignature(invoke.getInvokedMethod());
-    return originalInvokedMethod.match(checkParameterIsNotNullMethod)
+    boolean isCheckNotNullMethod =
+        originalInvokedMethod.match(intrinsics.checkParameterIsNotNull)
+            || originalInvokedMethod.match(intrinsics.checkNotNullParameter);
+    return isCheckNotNullMethod
         && invoke.getFirstArgument() == value
         && originalInvokedMethod.getHolderType().getPackageDescriptor().startsWith(Kotlin.NAME);
   }
@@ -763,11 +766,11 @@
     }
     // We need to ignore the holder, since Kotlin adds different versions of null-check machinery,
     // e.g., kotlin.collections.ArraysKt___ArraysKt... or kotlin.jvm.internal.ArrayIteratorKt...
-    DexMethod throwParameterIsNullExceptionMethod =
-        appView.dexItemFactory().kotlin.intrinsics.throwParameterIsNullException;
+    Intrinsics intrinsics = appView.dexItemFactory().kotlin.intrinsics;
     DexMethod originalInvokedMethod =
         appView.graphLens().getOriginalMethodSignature(invoke.getInvokedMethod());
-    return originalInvokedMethod.match(throwParameterIsNullExceptionMethod)
+    return (originalInvokedMethod.match(intrinsics.throwParameterIsNullException)
+            || originalInvokedMethod.match(intrinsics.throwParameterIsNullNPE))
         && originalInvokedMethod.getHolderType().getPackageDescriptor().startsWith(Kotlin.NAME);
   }
 
diff --git a/src/main/java/com/android/tools/r8/kotlin/Kotlin.java b/src/main/java/com/android/tools/r8/kotlin/Kotlin.java
index 9470367..eb3af79 100644
--- a/src/main/java/com/android/tools/r8/kotlin/Kotlin.java
+++ b/src/main/java/com/android/tools/r8/kotlin/Kotlin.java
@@ -164,9 +164,24 @@
     public final DexType type = factory.createType(PACKAGE_PREFIX + "jvm/internal/Intrinsics;");
     public final DexMethod throwParameterIsNullException = factory.createMethod(type,
         factory.createProto(factory.voidType, factory.stringType), "throwParameterIsNullException");
+    public final DexMethod throwParameterIsNullNPE =
+        factory.createMethod(
+            type,
+            factory.createProto(factory.voidType, factory.stringType),
+            "throwParameterIsNullNPE");
+    public final DexMethod throwParameterIsNullIAE =
+        factory.createMethod(
+            type,
+            factory.createProto(factory.voidType, factory.stringType),
+            "throwParameterIsNullIAE");
     public final DexMethod checkParameterIsNotNull = factory.createMethod(type,
         factory.createProto(factory.voidType, factory.objectType, factory.stringType),
         "checkParameterIsNotNull");
+    public final DexMethod checkNotNullParameter =
+        factory.createMethod(
+            type,
+            factory.createProto(factory.voidType, factory.objectType, factory.stringType),
+            "checkNotNullParameter");
     public final DexMethod throwNpe = factory.createMethod(
         type, factory.createProto(factory.voidType), "throwNpe");
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
index 4fcc710..802be75 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
@@ -81,8 +81,7 @@
                 assertEquals(allowAccessModification ? 0 : 1, checkParameterIsNotNull);
                 assertEquals(0, checkNotNullParameter);
               } else {
-                // TODO(b/139276374): Update such that this is call is inlined.
-                assertEquals(1, checkNotNullParameter);
+                assertEquals(allowAccessModification ? 0 : 1, checkNotNullParameter);
                 assertEquals(0, checkParameterIsNotNull);
               }
             });