Reuse util for getting first non-receiver argument index

Change-Id: I661c14ca8998a2b3cc89681ff279913f04067acc
diff --git a/src/main/java/com/android/tools/r8/graph/RewrittenPrototypeDescription.java b/src/main/java/com/android/tools/r8/graph/RewrittenPrototypeDescription.java
index bd96228..98bf1c3 100644
--- a/src/main/java/com/android/tools/r8/graph/RewrittenPrototypeDescription.java
+++ b/src/main/java/com/android/tools/r8/graph/RewrittenPrototypeDescription.java
@@ -12,7 +12,6 @@
 import com.android.tools.r8.ir.conversion.ExtraParameter;
 import com.android.tools.r8.ir.conversion.ExtraUnusedNullParameter;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import com.android.tools.r8.utils.BooleanUtils;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Ordering;
 import it.unimi.dsi.fastutil.ints.Int2ReferenceMap.Entry;
@@ -306,7 +305,7 @@
         return params;
       }
       DexType[] newParams = new DexType[params.length - numberOfRemovedArguments()];
-      int offset = encodedMethod.isStatic() ? 0 : 1;
+      int offset = encodedMethod.getFirstNonReceiverArgumentIndex();
       int newParamIndex = 0;
       for (int oldParamIndex = 0; oldParamIndex < params.length; oldParamIndex++) {
         ArgumentInfo argInfo = argumentInfos.get(oldParamIndex + offset);
@@ -369,7 +368,7 @@
         DexEncodedMethod method) {
       if (numberOfRemovedArguments() > 0 && !method.parameterAnnotationsList.isEmpty()) {
         return builder -> {
-          int firstArgumentIndex = BooleanUtils.intValue(!method.isStatic());
+          int firstArgumentIndex = method.getFirstNonReceiverArgumentIndex();
           builder.removeParameterAnnotations(
               oldIndex -> getArgumentInfo(oldIndex + firstArgumentIndex).isRemovedArgumentInfo());
         };
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index b35e2ca..b6ffb43 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -542,7 +542,7 @@
     int originalNumberOfArguments =
         method.getReference().proto.parameters.values.length
             + argumentsInfo.numberOfRemovedArguments()
-            + (method.isStatic() ? 0 : 1)
+            + method.getFirstNonReceiverArgumentIndex()
             - prototypeChanges.numberOfExtraParameters();
 
     int usedArgumentIndex = 0;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java b/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java
index b2e8366..df7eeb3 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java
@@ -305,7 +305,7 @@
 
     ArgumentInfoCollection.Builder argInfosBuilder = ArgumentInfoCollection.builder();
     DexProto proto = encodedMethod.getReference().proto;
-    int offset = encodedMethod.isStatic() ? 0 : 1;
+    int offset = encodedMethod.getFirstNonReceiverArgumentIndex();
     for (int i = 0; i < proto.parameters.size(); ++i) {
       DexType type = proto.parameters.values[i];
       if (type.isAlwaysNull(appView)) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/UnusedArgumentsCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/UnusedArgumentsCollector.java
index cc8f5b1..052e196 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/UnusedArgumentsCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/UnusedArgumentsCollector.java
@@ -282,7 +282,7 @@
         return null;
       }
     }
-    int offset = method.accessFlags.isStatic() ? 0 : 1;
+    int offset = method.getFirstNonReceiverArgumentIndex();
     int argumentCount = method.getReference().proto.parameters.size() + offset;
     CollectUsedArguments collector = new CollectUsedArguments();
     if (!method.accessFlags.isStatic()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
index d0c82cb..986ba65 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
@@ -85,7 +85,7 @@
   }
 
   private TypeElement[] getStaticTypes(AppView<?> appView, DexEncodedMethod method) {
-    int argOffset = method.isStatic() ? 0 : 1;
+    int argOffset = method.getFirstNonReceiverArgumentIndex();
     int size = method.getReference().getArity() + argOffset;
     TypeElement[] staticTypes = new TypeElement[size];
     if (!method.isStatic()) {