From 6649a7553258d7651a1d6c3ee010d380c6f90e7a Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Sun, 1 Feb 2015 20:16:39 -0800 Subject: [PATCH] Add some required runReadAction wrappers in SmaliCodeFragmentFactory --- .../debugging/SmaliCodeFragmentFactory.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliCodeFragmentFactory.java b/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliCodeFragmentFactory.java index 7b359bc4..bb45ce96 100644 --- a/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliCodeFragmentFactory.java +++ b/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliCodeFragmentFactory.java @@ -192,8 +192,12 @@ public class SmaliCodeFragmentFactory extends DefaultCodeFragmentFactory { @Override protected void action() throws Exception { int registerNumber = Integer.parseInt(name.substring(1)); if (name.charAt(0) == 'p') { - registerNumber += containingMethod.getRegisterCount() - - containingMethod.getParameterRegisterCount(); + registerNumber += ApplicationManager.getApplication().runReadAction(new Computable() { + @Override public Integer compute() { + return containingMethod.getRegisterCount() - + containingMethod.getParameterRegisterCount(); + } + }); } Value value = evaluateRegister(debuggerContext.createEvaluationContext(), containingMethod, @@ -265,15 +269,24 @@ public class SmaliCodeFragmentFactory extends DefaultCodeFragmentFactory { return ret[0]; } - private static int mapRegisterForArt(SmaliMethod smaliMethod, int register) { - int totalRegisters = smaliMethod.getRegisterCount(); - int parameterRegisters = smaliMethod.getParameterRegisterCount(); + private static int mapRegisterForArt(final SmaliMethod smaliMethod, final int register) { + return ApplicationManager.getApplication().runReadAction(new Computable() { + @Override public Integer compute() { - // For ART, the parameter registers are rotated to the front - if (register >= (totalRegisters - parameterRegisters)) { - return register - (totalRegisters - parameterRegisters); - } - return register + parameterRegisters; + int totalRegisters = smaliMethod.getRegisterCount(); + int parameterRegisters = smaliMethod.getParameterRegisterCount(); + + if (smaliMethod.getModifierList().hasModifierProperty("static")) { + return register; + } + + // For ART, the parameter registers are rotated to the front + if (register >= (totalRegisters - parameterRegisters)) { + return register - (totalRegisters - parameterRegisters); + } + return register + parameterRegisters; + } + }); } }