Minor cleanup using utils

Change-Id: I76ffcbe07ee0ab79f457d72ec0bce25d284e307e
diff --git a/src/main/java/com/android/tools/r8/graph/DexTypeList.java b/src/main/java/com/android/tools/r8/graph/DexTypeList.java
index 3716f4e..734e83d 100644
--- a/src/main/java/com/android/tools/r8/graph/DexTypeList.java
+++ b/src/main/java/com/android/tools/r8/graph/DexTypeList.java
@@ -60,6 +60,10 @@
     return values[index];
   }
 
+  public DexType getLast() {
+    return get(size() - 1);
+  }
+
   public DexType[] getBacking() {
     return values;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryConversionCfProvider.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryConversionCfProvider.java
index 7dcacb4..adda377 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryConversionCfProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryConversionCfProvider.java
@@ -46,6 +46,7 @@
 import com.android.tools.r8.ir.synthetic.apiconverter.APIConversionCfCodeProvider;
 import com.android.tools.r8.ir.synthetic.apiconverter.EqualsCfCodeProvider;
 import com.android.tools.r8.ir.synthetic.apiconverter.HashCodeCfCodeProvider;
+import com.android.tools.r8.utils.ArrayUtils;
 import com.android.tools.r8.utils.OptionalBool;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -291,20 +292,17 @@
             context,
             methodProcessingContext::createUniqueContext);
 
-    int parameterSize = invokedMethod.getParameters().size();
     ArrayList<CfInstruction> cfInstructions = new ArrayList<>();
-    if (parameterSize != 0) {
+    if (!invokedMethod.getParameters().isEmpty()) {
       // If only the last 2 parameters require conversion, we do everything inlined.
       // If other parameters require conversion, we outline the parameter conversion but keep the
-      // API
-      // call inlined. The returned value is always converted inlined.
+      // API call inlined. The returned value is always converted inlined.
       boolean requireOutlinedParameterConversion = false;
       for (int i = 0; i < parameterConversions.length - 2; i++) {
         requireOutlinedParameterConversion |= parameterConversions[i] != null;
       }
       // We cannot use the swap instruction if the last parameter is wide.
-      requireOutlinedParameterConversion |=
-          invokedMethod.getParameters().get(parameterSize - 1).isWideType();
+      requireOutlinedParameterConversion |= invokedMethod.getParameters().getLast().isWideType();
 
       if (requireOutlinedParameterConversion) {
         addOutlineParameterConversionInstructions(
@@ -437,18 +435,14 @@
       DexMethod[] parameterConversions,
       ArrayList<CfInstruction> cfInstructions,
       DexMethod invokedMethod) {
-    if (parameterConversions.length > 0
-        && parameterConversions[parameterConversions.length - 1] != null) {
+    if (ArrayUtils.lastOrDefault(parameterConversions, null) != null) {
       cfInstructions.add(
           new CfInvoke(
               Opcodes.INVOKESTATIC, parameterConversions[parameterConversions.length - 1], false));
     }
     if (parameterConversions.length > 1
         && parameterConversions[parameterConversions.length - 2] != null) {
-      assert !invokedMethod
-          .getParameters()
-          .get(invokedMethod.getParameters().size() - 1)
-          .isWideType();
+      assert !invokedMethod.getParameters().getLast().isWideType();
       cfInstructions.add(new CfStackInstruction(Opcode.Swap));
       cfInstructions.add(
           new CfInvoke(
diff --git a/src/main/java/com/android/tools/r8/utils/ArrayUtils.java b/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
index e842e5f..d0bd1a9 100644
--- a/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
@@ -109,6 +109,10 @@
     return array[array.length - 1];
   }
 
+  public static <T> T lastOrDefault(T[] array, T defaultValue) {
+    return isEmpty(array) ? defaultValue : array[array.length - 1];
+  }
+
   public static int lastOrDefault(int[] array, int defaultValue) {
     return isEmpty(array) ? defaultValue : array[array.length - 1];
   }