Merge "Add getArity getter to DexMethod."
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
index c468613..9ddfce2 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
@@ -111,7 +111,7 @@
     if (startLine == NO_LINE_INFO) {
       return null;
     }
-    DexString[] params = new DexString[method.method.proto.parameters.values.length];
+    DexString[] params = new DexString[method.method.getArity()];
     if (arguments != null) {
       assert params.length == arguments.size();
       for (int i = 0; i < arguments.size(); i++) {
@@ -159,7 +159,7 @@
 
   private void startArgument(Argument argument) {
     if (arguments == null) {
-      arguments = new ArrayList<>(method.method.proto.parameters.values.length);
+      arguments = new ArrayList<>(method.method.getArity());
     }
     if (!argument.outValue().isThis()) {
       arguments.add(argument.getLocalInfo());
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 572bea9..400b42f 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -144,7 +144,7 @@
   public void setCode(
       IRCode ir, RegisterAllocator registerAllocator, DexItemFactory dexItemFactory) {
     final DexBuilder builder = new DexBuilder(ir, registerAllocator, dexItemFactory);
-    code = builder.build(method.proto.parameters.values.length);
+    code = builder.build(method.getArity());
   }
 
   // Replaces the dex code in the method by setting code to result of compiling the IR.
@@ -152,7 +152,7 @@
       DexItemFactory dexItemFactory, DexString firstJumboString) {
     final DexBuilder builder =
         new DexBuilder(ir, registerAllocator, dexItemFactory, firstJumboString);
-    code = builder.build(method.proto.parameters.values.length);
+    code = builder.build(method.getArity());
   }
 
   public String toString() {
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethod.java b/src/main/java/com/android/tools/r8/graph/DexMethod.java
index a066d24..f8b3c8c 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethod.java
@@ -32,6 +32,10 @@
     return "Method " + holder + "." + name + " " + proto.toString();
   }
 
+  public int getArity() {
+    return proto.parameters.size();
+  }
+
   @Override
   public void collectIndexedItems(IndexedItemCollection indexedItems) {
     if (indexedItems.addMethod(this)) {
@@ -132,7 +136,7 @@
     builder.append(".");
     builder.append(name);
     builder.append("(");
-    for (int i = 0; i < proto.parameters.values.length; i++) {
+    for (int i = 0; i < getArity(); i++) {
       if (i != 0) {
         builder.append(", ");
       }
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 39226d8..5de71a1 100644
--- a/src/main/java/com/android/tools/r8/graph/DexTypeList.java
+++ b/src/main/java/com/android/tools/r8/graph/DexTypeList.java
@@ -58,6 +58,10 @@
     return values.length == 0;
   }
 
+  public int size() {
+    return values.length;
+  }
+
   @Override
   public String toString() {
     StringBuilder builder = new StringBuilder();
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCode.java b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
index e1e9a99..7c37649 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCode.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
@@ -363,7 +363,7 @@
       }
     }
     assert arguments.size()
-        == method.method.proto.parameters.values.length + (method.accessFlags.isStatic() ? 0 : 1);
+        == method.method.getArity() + (method.accessFlags.isStatic() ? 0 : 1);
     return arguments;
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
index 9b1aa3f..9e07ad6 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
@@ -234,7 +234,7 @@
   }
 
   private List<MoveType> computeArgumentTypes() {
-    List<MoveType> types = new ArrayList<>(proto.parameters.values.length);
+    List<MoveType> types = new ArrayList<>(proto.parameters.size());
     String shorty = proto.shorty.toString();
     for (int i = 1; i < proto.shorty.size; i++) {
       MoveType moveType = MoveType.fromTypeDescriptorChar(shorty.charAt(i));
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
index d1b1577..a84e082 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
@@ -62,8 +62,7 @@
         // TODO(ager): Should we give the new first parameter an actual name? Maybe 'this'?
         dexCode.setDebugInfo(dexCode.debugInfoWithAdditionalFirstParameter(null));
         assert (dexCode.getDebugInfo() == null)
-            || (companionMethod.proto.parameters.values.length
-                == dexCode.getDebugInfo().parameters.length);
+            || (companionMethod.getArity() == dexCode.getDebugInfo().parameters.length);
 
         companionMethods.add(new DexEncodedMethod(companionMethod,
             newFlags, virtual.annotations, virtual.parameterAnnotations, code));
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index c2600b4..55e6296 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -459,8 +459,7 @@
           DexCode dexCode = newMethod.getCode().asDexCode();
           dexCode.setDebugInfo(dexCode.debugInfoWithAdditionalFirstParameter(null));
           assert (dexCode.getDebugInfo() == null)
-              || (callTarget.proto.parameters.values.length
-              == dexCode.getDebugInfo().parameters.length);
+              || (callTarget.getArity() == dexCode.getDebugInfo().parameters.length);
           directMethods[i] = newMethod;
           return true;
         }
diff --git a/src/main/java/com/android/tools/r8/naming/MemberNaming.java b/src/main/java/com/android/tools/r8/naming/MemberNaming.java
index 9c45617..1537f05 100644
--- a/src/main/java/com/android/tools/r8/naming/MemberNaming.java
+++ b/src/main/java/com/android/tools/r8/naming/MemberNaming.java
@@ -271,7 +271,7 @@
     }
 
     public static MethodSignature fromDexMethod(DexMethod method) {
-      String[] paramNames = new String[method.proto.parameters.values.length];
+      String[] paramNames = new String[method.getArity()];
       DexType[] values = method.proto.parameters.values;
       for (int i = 0; i < values.length; i++) {
         paramNames[i] = values[i].toSourceString();
diff --git a/src/main/java/com/android/tools/r8/optimize/BridgeMethodAnalysis.java b/src/main/java/com/android/tools/r8/optimize/BridgeMethodAnalysis.java
index 1a28332..f538125 100644
--- a/src/main/java/com/android/tools/r8/optimize/BridgeMethodAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/BridgeMethodAnalysis.java
@@ -12,7 +12,6 @@
 import com.android.tools.r8.graph.GraphLense;
 import com.android.tools.r8.logging.Log;
 import com.android.tools.r8.optimize.InvokeSingleTargetExtractor.InvokeKind;
-
 import java.util.IdentityHashMap;
 import java.util.Map;
 
@@ -40,8 +39,7 @@
       method.getCode().registerReachableDefinitions(targetExtractor);
       DexMethod target = targetExtractor.getTarget();
       InvokeKind kind = targetExtractor.getKind();
-      if (target != null &&
-          target.proto.parameters.values.length == method.method.proto.parameters.values.length) {
+      if (target != null && target.getArity() == method.method.getArity()) {
         assert !method.accessFlags.isPrivate() && !method.accessFlags.isConstructor();
         target = lense.lookupMethod(target, method);
         if (kind == InvokeKind.STATIC) {
@@ -73,7 +71,6 @@
   }
 
 
-
   private static class BridgeLense extends GraphLense {
 
     private final GraphLense previousLense;
diff --git a/src/main/java/com/android/tools/r8/shaking/SimpleClassMerger.java b/src/main/java/com/android/tools/r8/shaking/SimpleClassMerger.java
index d03c74b..e01439d 100644
--- a/src/main/java/com/android/tools/r8/shaking/SimpleClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/SimpleClassMerger.java
@@ -571,7 +571,7 @@
       for (DexMethod method : invokes) {
         Int2IntMap positionsMap = seenPositions.get(method.name);
         if (positionsMap != null) {
-          int arity = method.proto.parameters.values.length;
+          int arity = method.getArity();
           int previous = positionsMap.get(arity);
           if (previous != NOT_FOUND) {
             assert previous != 0;