diff --git a/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java b/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java index a02f8f83..f1b2801d 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java @@ -154,16 +154,10 @@ public class MethodAnalyzer { RegisterType.getRegisterType(RegisterType.REFERENCE, classPath.getClass(method.getDefiningClass()))); } - } - List parameters = method.getParameters(); - if (parameters != null) { - RegisterType[] parameterTypes = getParameterTypes(parameters); - for (int i=0; i parameters) { - RegisterType[] registerTypes = new RegisterType[parameters.size()]; - - int registerNum = 0; - for (MethodParameter parameter: parameters) { + private void propagateParameterTypes(int parameterStartRegister) { + int i=0; + for (MethodParameter parameter: method.getParameters()) { if (TypeUtils.isWideType(parameter)) { - registerTypes[registerNum++] = RegisterType.getWideRegisterType(parameter, true); - registerTypes[registerNum++] = RegisterType.getWideRegisterType(parameter, false); + setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++, + RegisterType.getWideRegisterType(parameter, true)); + setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++, + RegisterType.getWideRegisterType(parameter, false)); } else { - registerTypes[registerNum++] = RegisterType.getRegisterType(classPath, parameter); + setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++, + RegisterType.getRegisterType(classPath, parameter)); } } - return registerTypes; } public int getInstructionAddress(@Nonnull AnalyzedInstruction instruction) {