diff options
author | mikaelpeltier <mikaelpeltier@google.com> | 2015-01-30 18:39:49 +0100 |
---|---|---|
committer | mikaelpeltier <mikaelpeltier@google.com> | 2015-01-30 18:39:49 +0100 |
commit | 9d54e1947f68f9ad4b646c6c4b72265729f4d563 (patch) | |
tree | 195529af8798c8160b2c4c5a0d3c8b321412a1f0 | |
parent | b8df617a69d15ae6c46e87980ae884d5aef20207 (diff) | |
download | toolchain_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.java | 25 |
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); |