summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2015-01-30 18:39:49 +0100
committermikaelpeltier <mikaelpeltier@google.com>2015-01-30 18:39:49 +0100
commit9d54e1947f68f9ad4b646c6c4b72265729f4d563 (patch)
tree195529af8798c8160b2c4c5a0d3c8b321412a1f0
parentb8df617a69d15ae6c46e87980ae884d5aef20207 (diff)
downloadtoolchain_jill-9d54e1947f68f9ad4b646c6c4b72265729f4d563.zip
toolchain_jill-9d54e1947f68f9ad4b646c6c4b72265729f4d563.tar.gz
toolchain_jill-9d54e1947f68f9ad4b646c6c4b72265729f4d563.tar.bz2
Use LinkedHashSet and LinkedHashMap to keep order
Change-Id: I94c35e368ff5420e31a3542bbfd3f0b582aadd2a
-rw-r--r--jill/src/com/android/jill/frontend/java/MethodBodyWriter.java25
1 files changed, 10 insertions, 15 deletions
diff --git a/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java b/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
index 9c09c37..686037f 100644
--- a/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
+++ b/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
@@ -59,6 +59,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -76,10 +78,7 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
private final Map<String, Variable> nameToVar = new HashMap<String, Variable>();
@Nonnull
- private final List<Variable> parameter = new ArrayList<Variable>();
-
- @Nonnull
- private final List<Variable> parameter2Var = new ArrayList<Variable>();
+ private final Map<Variable, Variable> parameter2Var = new LinkedHashMap<Variable, Variable>();
public static final int CONSTRUCTOR = 0x10000;
@@ -404,11 +403,8 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
writer.writeOpen();
writer.writeOpenNodeList();
- Iterator<Variable> paramIt = parameter.iterator();
- Iterator<Variable> param2VarIt = parameter2Var.iterator();
-
- while (paramIt.hasNext()) {
- Variable p = paramIt.next();
+ for (Map.Entry<Variable, Variable> entry : parameter2Var.entrySet()) {
+ Variable p = entry.getKey();
sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
writer.writeCatchBlockIds(currentCatchList);
writer.writeKeyword(Token.EXPRESSION_STATEMENT);
@@ -416,7 +412,7 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
sourceInfoWriter.writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeLocalRef(param2VarIt.next());
+ writeLocalRef(entry.getValue());
if (p.getType() == Type.BOOLEAN_TYPE) {
writeCastOperation(Token.REINTERPRETCAST_OPERATION, p, Type.INT_TYPE.getDescriptor());
} else {
@@ -2176,7 +2172,8 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
@Nonnull
private Iterator<Variable> collectLocals() {
- List<Variable> locals = new ArrayList<Variable>();
+ Set<Variable> locals = new LinkedHashSet<Variable>();
+
Frame<BasicValue>[] frames = analyzer.getFrames();
for (int frameIdx = 0; frameIdx < frames.length; frameIdx++) {
currentPc = frameIdx;
@@ -2238,8 +2235,7 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
String lid = getUnnamedLocalId(parameterIdx, untypedParameter);
Variable local = getVariable(lid, lid, untypedParameter, null);
- parameter.add(p);
- parameter2Var.add(local);
+ parameter2Var.put(p, local);
} else {
assert parameterType.getDescriptor().equals(lvn.desc);
Variable p = getVariable(getNamedLocalId(lvn), lvn.name, parameterType, lvn.signature);
@@ -2260,8 +2256,7 @@ public class MethodBodyWriter extends JillWriter implements Opcodes {
String lid = getUnnamedLocalId(parameterIdx, untypedParameter);
Variable local = getVariable(lid, lid, untypedParameter, null);
- parameter.add(p);
- parameter2Var.add(local);
+ parameter2Var.put(p, local);
} else {
assert paramType.getDescriptor().equals(lvn.desc);
Variable p = getVariable(getNamedLocalId(lvn), lvn.name, paramType, lvn.signature);