Add some required runReadAction wrappers in SmaliCodeFragmentFactory

This commit is contained in:
Ben Gruver 2015-02-01 20:16:39 -08:00
parent e6da8cd564
commit 6649a75532

View File

@ -192,9 +192,13 @@ public class SmaliCodeFragmentFactory extends DefaultCodeFragmentFactory {
@Override protected void action() throws Exception { @Override protected void action() throws Exception {
int registerNumber = Integer.parseInt(name.substring(1)); int registerNumber = Integer.parseInt(name.substring(1));
if (name.charAt(0) == 'p') { if (name.charAt(0) == 'p') {
registerNumber += containingMethod.getRegisterCount() - registerNumber += ApplicationManager.getApplication().runReadAction(new Computable<Integer>() {
@Override public Integer compute() {
return containingMethod.getRegisterCount() -
containingMethod.getParameterRegisterCount(); containingMethod.getParameterRegisterCount();
} }
});
}
Value value = evaluateRegister(debuggerContext.createEvaluationContext(), Value value = evaluateRegister(debuggerContext.createEvaluationContext(),
containingMethod, containingMethod,
registerNumber, registerNumber,
@ -265,15 +269,24 @@ public class SmaliCodeFragmentFactory extends DefaultCodeFragmentFactory {
return ret[0]; return ret[0];
} }
private static int mapRegisterForArt(SmaliMethod smaliMethod, int register) { private static int mapRegisterForArt(final SmaliMethod smaliMethod, final int register) {
return ApplicationManager.getApplication().runReadAction(new Computable<Integer>() {
@Override public Integer compute() {
int totalRegisters = smaliMethod.getRegisterCount(); int totalRegisters = smaliMethod.getRegisterCount();
int parameterRegisters = smaliMethod.getParameterRegisterCount(); int parameterRegisters = smaliMethod.getParameterRegisterCount();
if (smaliMethod.getModifierList().hasModifierProperty("static")) {
return register;
}
// For ART, the parameter registers are rotated to the front // For ART, the parameter registers are rotated to the front
if (register >= (totalRegisters - parameterRegisters)) { if (register >= (totalRegisters - parameterRegisters)) {
return register - (totalRegisters - parameterRegisters); return register - (totalRegisters - parameterRegisters);
} }
return register + parameterRegisters; return register + parameterRegisters;
} }
});
}
} }