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;