Search in sources :

Example 6 with SmaliMethod

use of org.jf.smalidea.psi.impl.SmaliMethod in project smali by JesusFreke.

the class SmaliCodeFragmentFactory method evaluateRegister.

@Nullable
public static Value evaluateRegister(EvaluationContext context, final SmaliMethod smaliMethod, final int registerNum, final String type) throws EvaluateException {
    if (registerNum >= smaliMethod.getRegisterCount()) {
        return null;
    }
    final StackFrameProxy frameProxy = context.getSuspendContext().getFrameProxy();
    if (frameProxy == null) {
        return null;
    }
    VirtualMachine vm = frameProxy.getStackFrame().virtualMachine();
    Location currentLocation = frameProxy.location();
    if (currentLocation == null) {
        return null;
    }
    Method method = currentLocation.method();
    try {
        final Constructor<LocalVariableImpl> localVariableConstructor = LocalVariableImpl.class.getDeclaredConstructor(VirtualMachine.class, Method.class, Integer.TYPE, Location.class, Location.class, String.class, String.class, String.class);
        localVariableConstructor.setAccessible(true);
        Constructor<LocationImpl> locationConstructor = LocationImpl.class.getDeclaredConstructor(VirtualMachine.class, Method.class, Long.TYPE);
        locationConstructor.setAccessible(true);
        int methodSize = 0;
        for (SmaliInstruction instruction : smaliMethod.getInstructions()) {
            methodSize += instruction.getInstructionSize();
        }
        Location endLocation = null;
        for (int endCodeIndex = (methodSize / 2) - 1; endCodeIndex >= 0; endCodeIndex--) {
            endLocation = method.locationOfCodeIndex(endCodeIndex);
            if (endLocation != null) {
                break;
            }
        }
        if (endLocation == null) {
            return null;
        }
        LocalVariable localVariable = localVariableConstructor.newInstance(vm, method, mapRegister(frameProxy.getStackFrame().virtualMachine(), smaliMethod, registerNum), method.location(), endLocation, String.format("v%d", registerNum), type, null);
        return frameProxy.getStackFrame().getValue(localVariable);
    } catch (NoSuchMethodException e) {
        return null;
    } catch (InstantiationException e) {
        return null;
    } catch (IllegalAccessException e) {
        return null;
    } catch (InvocationTargetException e) {
        return null;
    }
}
Also used : LocalVariableImpl(com.sun.tools.jdi.LocalVariableImpl) StackFrameProxy(com.intellij.debugger.engine.jdi.StackFrameProxy) PsiLocalVariable(com.intellij.psi.PsiLocalVariable) SmaliMethod(org.jf.smalidea.psi.impl.SmaliMethod) SmaliInstruction(org.jf.smalidea.psi.impl.SmaliInstruction) InvocationTargetException(java.lang.reflect.InvocationTargetException) LocationImpl(com.sun.tools.jdi.LocationImpl) Nullable(javax.annotation.Nullable)

Example 7 with SmaliMethod

use of org.jf.smalidea.psi.impl.SmaliMethod in project smali by JesusFreke.

the class SmalideaMethodTest method testArrayData.

public void testArrayData() {
    String text = ".class public LFormat31t;\n" + ".super Ljava/lang/Object;\n" + ".source \"Format31t.smali\"" + "\n" + ".method public test_fill-array-data()V\n" + "    .registers 3\n" + "    .annotation runtime Lorg/junit/Test;\n" + "    .end annotation\n" + "\n" + "    const v0, 6\n" + "    new-array v0, v0, [I\n" + "    fill-array-data v0, :ArrayData\n" + "\n" + "    const v1, 0\n" + "    aget v2, v0, v1\n" + "    const v1, 1\n" + "    invoke-static {v1, v2}, LAssert;->assertEquals(II)V\n" + "\n" + "    const v1, 1\n" + "    aget v2, v0, v1\n" + "    const v1, 2\n" + "    invoke-static {v1, v2}, LAssert;->assertEquals(II)V\n" + "\n" + "    const v1, 2\n" + "    aget v2, v0, v1\n" + "    const v1, 3\n" + "    invoke-static {v1, v2}, LAssert;->assertEquals(II)V\n" + "\n" + "    const v1, 3\n" + "    aget v2, v0, v1\n" + "    const v1, 4\n" + "    invoke-static {v1, v2}, LAssert;->assertEquals(II)V\n" + "\n" + "    const v1, 4\n" + "    aget v2, v0, v1\n" + "    const v1, 5\n" + "    invoke-static {v1, v2}, LAssert;->assertEquals(II)V\n" + "\n" + "    const v1, 5\n" + "    aget v2, v0, v1\n" + "    const v1, 6\n" + "    invoke-static {v1, v2}, LAssert;->assertEquals(II)V\n" + "\n" + "    return-void\n" + "\n" + ":ArrayData\n" + "    .array-data 4\n" + "        1 2 128 -256 65536 0x7fffffff\n" + "    .end array-data\n" + ".end method";
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", text);
    SmaliClass smaliClass = file.getPsiClass();
    SmaliMethod smaliMethod = smaliClass.getMethods()[0];
    SmalideaMethod method = new SmalideaMethod(smaliMethod);
    MethodImplementation impl = method.getImplementation();
    Assert.assertNotNull(impl);
    List<Instruction> instructions = Lists.newArrayList(impl.getInstructions());
    ArrayPayload arrayPayload = (ArrayPayload) instructions.get(28);
    Assert.assertEquals(4, arrayPayload.getElementWidth());
    List<Number> elements = arrayPayload.getArrayElements();
    Assert.assertEquals(6, elements.size());
    Assert.assertEquals(1L, elements.get(0).longValue());
    Assert.assertEquals(2L, elements.get(1).longValue());
    Assert.assertEquals(128L, elements.get(2));
    Assert.assertEquals(-256L, elements.get(3));
    Assert.assertEquals(65536L, elements.get(4));
    Assert.assertEquals(0x7fffffffL, elements.get(5));
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) MethodImplementation(org.jf.dexlib2.iface.MethodImplementation) SmaliClass(org.jf.smalidea.psi.impl.SmaliClass) SmaliMethod(org.jf.smalidea.psi.impl.SmaliMethod) Instruction(org.jf.dexlib2.iface.instruction.Instruction)

Example 8 with SmaliMethod

use of org.jf.smalidea.psi.impl.SmaliMethod in project smali by JesusFreke.

the class SmalideaMethodTest method testPackedSwitch.

public void testPackedSwitch() {
    String text = ".class public LFormat31t;\n" + ".super Ljava/lang/Object;\n" + ".source \"Format31t.smali\"" + "\n" + ".method public test_packed-switch()V\n" + "    .registers 1\n" + "    .annotation runtime Lorg/junit/Test;\n" + "    .end annotation\n" + "\n" + "    const v0, 12\n" + "\n" + ":switch\n" + "    packed-switch v0, :PackedSwitch\n" + "\n" + ":Label10\n" + "    invoke-static {}, Lorg/junit/Assert;->fail()V\n" + "    return-void\n" + "\n" + ":Label11\n" + "    invoke-static {}, Lorg/junit/Assert;->fail()V\n" + "    return-void\n" + "\n" + ":Label12\n" + "    return-void\n" + "\n" + ":Label13\n" + "    invoke-static {}, Lorg/junit/Assert;->fail()V\n" + "    return-void\n" + "\n" + ":PackedSwitch\n" + "    .packed-switch 10\n" + "        :Label10\n" + "        :Label11\n" + "        :Label12\n" + "        :Label13\n" + "    .end packed-switch\n" + ".end method";
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", text);
    SmaliClass smaliClass = file.getPsiClass();
    SmaliMethod smaliMethod = smaliClass.getMethods()[0];
    SmalideaMethod method = new SmalideaMethod(smaliMethod);
    MethodImplementation impl = method.getImplementation();
    Assert.assertNotNull(impl);
    List<Instruction> instructions = Lists.newArrayList(impl.getInstructions());
    PackedSwitchPayload packedSwitchPayload = (PackedSwitchPayload) instructions.get(9);
    List<? extends SwitchElement> switchElements = packedSwitchPayload.getSwitchElements();
    Assert.assertEquals(4, switchElements.size());
    checkSwitchElement(switchElements.get(0), 10, 6);
    checkSwitchElement(switchElements.get(1), 11, 14);
    checkSwitchElement(switchElements.get(2), 12, 22);
    checkSwitchElement(switchElements.get(3), 13, 24);
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) MethodImplementation(org.jf.dexlib2.iface.MethodImplementation) SmaliClass(org.jf.smalidea.psi.impl.SmaliClass) SmaliMethod(org.jf.smalidea.psi.impl.SmaliMethod) Instruction(org.jf.dexlib2.iface.instruction.Instruction)

Example 9 with SmaliMethod

use of org.jf.smalidea.psi.impl.SmaliMethod in project smali by JesusFreke.

the class SmalideaMethodTest method testCatchBlocks.

public void testCatchBlocks() {
    String text = ".class public Lmy/pkg/blah; .super Ljava/lang/Object;\n" + ".method public onCreateEngine()Landroid/service/wallpaper/WallpaperService$Engine;\n" + "    .registers 5\n" + "\n" + "    .prologue\n" + "    .line 88\n" + "    new-instance v0, Lorg/jf/Penroser/PenroserLiveWallpaper$PenroserGLEngine;\n" + "\n" + "    invoke-direct {v0, p0}, Lorg/jf/Penroser/PenroserLiveWallpaper$PenroserGLEngine;-><init>(Lorg/jf/Penroser/PenroserLiveWallpaper;)V\n" + "\n" + "    .line 89\n" + "    .local v0, \"engine\":Lorg/jf/Penroser/PenroserLiveWallpaper$PenroserGLEngine;\n" + "    sget-object v1, Lorg/jf/Penroser/PenroserLiveWallpaper;->engines:Ljava/util/LinkedList;\n" + "\n" + "    monitor-enter v1\n" + "\n" + "    .line 90\n" + "    :try_start_8\n" + "    sget-object v2, Lorg/jf/Penroser/PenroserLiveWallpaper;->engines:Ljava/util/LinkedList;\n" + "\n" + "    new-instance v3, Ljava/lang/ref/WeakReference;\n" + "\n" + "    invoke-direct {v3, v0}, Ljava/lang/ref/WeakReference;-><init>(Ljava/lang/Object;)V\n" + "\n" + "    invoke-virtual {v2, v3}, Ljava/util/LinkedList;->addLast(Ljava/lang/Object;)V\n" + "\n" + "    .line 91\n" + "    monitor-exit v1\n" + "\n" + "    .line 92\n" + "    return-object v0\n" + "\n" + "    .line 91\n" + "    :catchall_14\n" + "    move-exception v2\n" + "\n" + "    monitor-exit v1\n" + "    :try_end_16\n" + "    .catch Ljava/lang/RuntimeException; {:try_start_8 .. :try_end_16} :newcatch\n" + "    .catchall {:try_start_8 .. :try_end_16} :catchall_14\n" + "\n" + "    throw v2\n" + "\n" + "    :newcatch\n" + "    move-exception v2\n" + "    throw v2\n" + ".end method";
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", text);
    SmaliClass smaliClass = file.getPsiClass();
    SmaliMethod smaliMethod = smaliClass.getMethods()[0];
    SmalideaMethod method = new SmalideaMethod(smaliMethod);
    MethodImplementation impl = method.getImplementation();
    Assert.assertNotNull(impl);
    List<? extends TryBlock<? extends ExceptionHandler>> tryBlocks = impl.getTryBlocks();
    Assert.assertEquals(2, tryBlocks.size());
    TryBlock<? extends ExceptionHandler> tryBlock = tryBlocks.get(0);
    Assert.assertEquals(8, tryBlock.getStartCodeAddress());
    Assert.assertEquals(14, tryBlock.getCodeUnitCount());
    Assert.assertEquals(1, tryBlock.getExceptionHandlers().size());
    Assert.assertEquals("Ljava/lang/RuntimeException;", tryBlock.getExceptionHandlers().get(0).getExceptionType());
    Assert.assertEquals(23, tryBlock.getExceptionHandlers().get(0).getHandlerCodeAddress());
    tryBlock = tryBlocks.get(1);
    Assert.assertEquals(8, tryBlock.getStartCodeAddress());
    Assert.assertEquals(14, tryBlock.getCodeUnitCount());
    Assert.assertEquals(1, tryBlock.getExceptionHandlers().size());
    Assert.assertEquals(null, tryBlock.getExceptionHandlers().get(0).getExceptionType());
    Assert.assertEquals(20, tryBlock.getExceptionHandlers().get(0).getHandlerCodeAddress());
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) MethodImplementation(org.jf.dexlib2.iface.MethodImplementation) SmaliClass(org.jf.smalidea.psi.impl.SmaliClass) SmaliMethod(org.jf.smalidea.psi.impl.SmaliMethod)

Example 10 with SmaliMethod

use of org.jf.smalidea.psi.impl.SmaliMethod in project smali by JesusFreke.

the class SmalideaMethodTest method testSmalideaMethod.

public void testSmalideaMethod() {
    String text = ".class public Lmy/pkg/blah; .super Ljava/lang/Object;\n" + ".method public someMethodName(I)I\n" + "    .registers 4\n" + "    .param p1, \"edge\"    # I\n" + "    goto :here  #0: 10t\n" + "    :here\n" + "    return-void  #1: 21c\n" + "    const/4 v0, 1234 #2: 11n\n" + "    monitor-enter v1, #3: 11x\n" + "    move v1, v0 #4: 12x\n" + "    goto/16 :here #5: 20t\n" + "    sget v0, La/b/c;->blah:I #6: 21c\n" + "    const/high16 v0, 0x12340000 #7: 21ih\n" + "    const-wide/high16 v0, 0x1234000000000000L #8: 21lh\n" + "    const-wide/16 v0, 1234 #9: 21s\n" + "    if-eqz v0, :here #10: 21t\n" + "    add-int/lit8 v0, v1, 123 #11: 22b\n" + "    iget v1, v2, Labc;->blort:Z #12: 22c\n" + "    add-int/lit16 v0, v1, 1234 #13: 22s\n" + "    if-eq v0, v1, :here #14: 22t\n" + "    move/from16 v0, v1 #15: 22x\n" + "    cmpl-float v0, v1, v2 #16: 23x\n" + "    goto/32 :here #17: 30t\n" + "    const-string/jumbo v0, \"abcd\" #18: 31c\n" + "    const v0, 1234 #19: 31i\n" + "    move/16 v0, v1 #20: 32x\n" + "    invoke-virtual {v0, v1, v2, v3, v4}, Lblah;->blort(IIII)I #21: 35c\n" + "    invoke-virtual/range {v0..v4}, Lblah;->blort(IIII)I #22: 3rc\n" + "    const-wide v0, 0x1234567890L #23: 51i\n" + ".end method";
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", text);
    SmaliClass smaliClass = file.getPsiClass();
    SmaliMethod smaliMethod = smaliClass.getMethods()[0];
    SmalideaMethod method = new SmalideaMethod(smaliMethod);
    Assert.assertEquals("Lmy/pkg/blah;", method.getDefiningClass());
    Assert.assertEquals("someMethodName", method.getName());
    Assert.assertEquals("I", method.getReturnType());
    List<? extends CharSequence> parameterTypes = method.getParameterTypes();
    Assert.assertEquals(1, parameterTypes.size());
    Assert.assertEquals("I", parameterTypes.get(0));
    List<? extends MethodParameter> parameters = method.getParameters();
    Assert.assertEquals(1, parameters.size());
    Assert.assertEquals("I", parameters.get(0).getType());
    Assert.assertEquals("edge", parameters.get(0).getName());
    Assert.assertEquals(AccessFlags.PUBLIC.getValue(), method.getAccessFlags());
    MethodImplementation impl = method.getImplementation();
    Assert.assertNotNull(impl);
    Assert.assertEquals(4, impl.getRegisterCount());
    List<? extends Instruction> instructions = Lists.newArrayList(impl.getInstructions());
    {
        Instruction10t instruction = (Instruction10t) instructions.get(0);
        Assert.assertEquals(Opcode.GOTO, instruction.getOpcode());
        Assert.assertEquals(1, instruction.getCodeOffset());
    }
    {
        Instruction10x instruction = (Instruction10x) instructions.get(1);
        Assert.assertEquals(Opcode.RETURN_VOID, instruction.getOpcode());
    }
    {
        Instruction11n instruction = (Instruction11n) instructions.get(2);
        Assert.assertEquals(Opcode.CONST_4, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(1234, instruction.getNarrowLiteral());
    }
    {
        Instruction11x instruction = (Instruction11x) instructions.get(3);
        Assert.assertEquals(Opcode.MONITOR_ENTER, instruction.getOpcode());
        Assert.assertEquals(1, instruction.getRegisterA());
    }
    {
        Instruction12x instruction = (Instruction12x) instructions.get(4);
        Assert.assertEquals(Opcode.MOVE, instruction.getOpcode());
        Assert.assertEquals(1, instruction.getRegisterA());
        Assert.assertEquals(0, instruction.getRegisterB());
    }
    {
        Instruction20t instruction = (Instruction20t) instructions.get(5);
        Assert.assertEquals(Opcode.GOTO_16, instruction.getOpcode());
        Assert.assertEquals(-4, instruction.getCodeOffset());
    }
    {
        Instruction21c instruction = (Instruction21c) instructions.get(6);
        Assert.assertEquals(Opcode.SGET, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals("La/b/c;->blah:I", ReferenceUtil.getFieldDescriptor((FieldReference) instruction.getReference()));
    }
    {
        Instruction21ih instruction = (Instruction21ih) instructions.get(7);
        Assert.assertEquals(Opcode.CONST_HIGH16, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(0x1234, instruction.getHatLiteral());
        Assert.assertEquals(0x12340000, instruction.getNarrowLiteral());
        Assert.assertEquals(0x12340000, instruction.getWideLiteral());
    }
    {
        Instruction21lh instruction = (Instruction21lh) instructions.get(8);
        Assert.assertEquals(Opcode.CONST_WIDE_HIGH16, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(0x1234, instruction.getHatLiteral());
        Assert.assertEquals(0x1234000000000000L, instruction.getWideLiteral());
    }
    {
        Instruction21s instruction = (Instruction21s) instructions.get(9);
        Assert.assertEquals(Opcode.CONST_WIDE_16, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(1234, instruction.getWideLiteral());
    }
    {
        Instruction21t instruction = (Instruction21t) instructions.get(10);
        Assert.assertEquals(Opcode.IF_EQZ, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(-14, instruction.getCodeOffset());
    }
    {
        Instruction22b instruction = (Instruction22b) instructions.get(11);
        Assert.assertEquals(Opcode.ADD_INT_LIT8, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(1, instruction.getRegisterB());
        Assert.assertEquals(123, instruction.getNarrowLiteral());
    }
    {
        Instruction22c instruction = (Instruction22c) instructions.get(12);
        Assert.assertEquals(Opcode.IGET, instruction.getOpcode());
        Assert.assertEquals(1, instruction.getRegisterA());
        Assert.assertEquals(2, instruction.getRegisterB());
        Assert.assertEquals("Labc;->blort:Z", ReferenceUtil.getFieldDescriptor((FieldReference) instruction.getReference()));
    }
    {
        Instruction22s instruction = (Instruction22s) instructions.get(13);
        Assert.assertEquals(Opcode.ADD_INT_LIT16, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(1, instruction.getRegisterB());
        Assert.assertEquals(1234, instruction.getNarrowLiteral());
    }
    {
        Instruction22t instruction = (Instruction22t) instructions.get(14);
        Assert.assertEquals(Opcode.IF_EQ, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(1, instruction.getRegisterB());
        Assert.assertEquals(-22, instruction.getCodeOffset());
    }
    {
        Instruction22x instruction = (Instruction22x) instructions.get(15);
        Assert.assertEquals(Opcode.MOVE_FROM16, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(1, instruction.getRegisterB());
    }
    {
        Instruction23x instruction = (Instruction23x) instructions.get(16);
        Assert.assertEquals(Opcode.CMPL_FLOAT, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(1, instruction.getRegisterB());
        Assert.assertEquals(2, instruction.getRegisterC());
    }
    {
        Instruction30t instruction = (Instruction30t) instructions.get(17);
        Assert.assertEquals(Opcode.GOTO_32, instruction.getOpcode());
        Assert.assertEquals(-28, instruction.getCodeOffset());
    }
    {
        Instruction31c instruction = (Instruction31c) instructions.get(18);
        Assert.assertEquals(Opcode.CONST_STRING_JUMBO, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals("abcd", ((StringReference) instruction.getReference()).getString());
    }
    {
        Instruction31i instruction = (Instruction31i) instructions.get(19);
        Assert.assertEquals(Opcode.CONST, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(1234, instruction.getNarrowLiteral());
    }
    {
        Instruction32x instruction = (Instruction32x) instructions.get(20);
        Assert.assertEquals(Opcode.MOVE_16, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(1, instruction.getRegisterB());
    }
    {
        Instruction35c instruction = (Instruction35c) instructions.get(21);
        Assert.assertEquals(Opcode.INVOKE_VIRTUAL, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterC());
        Assert.assertEquals(1, instruction.getRegisterD());
        Assert.assertEquals(2, instruction.getRegisterE());
        Assert.assertEquals(3, instruction.getRegisterF());
        Assert.assertEquals(4, instruction.getRegisterG());
        Assert.assertEquals("Lblah;->blort(IIII)I", ReferenceUtil.getReferenceString(instruction.getReference()));
    }
    {
        Instruction3rc instruction = (Instruction3rc) instructions.get(22);
        Assert.assertEquals(Opcode.INVOKE_VIRTUAL_RANGE, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getStartRegister());
        Assert.assertEquals(5, instruction.getRegisterCount());
        Assert.assertEquals("Lblah;->blort(IIII)I", ReferenceUtil.getReferenceString(instruction.getReference()));
    }
    {
        Instruction51l instruction = (Instruction51l) instructions.get(23);
        Assert.assertEquals(Opcode.CONST_WIDE, instruction.getOpcode());
        Assert.assertEquals(0, instruction.getRegisterA());
        Assert.assertEquals(0x1234567890L, instruction.getWideLiteral());
    }
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) MethodImplementation(org.jf.dexlib2.iface.MethodImplementation) SmaliClass(org.jf.smalidea.psi.impl.SmaliClass) SmaliMethod(org.jf.smalidea.psi.impl.SmaliMethod) StringReference(org.jf.dexlib2.iface.reference.StringReference)

Aggregations

SmaliMethod (org.jf.smalidea.psi.impl.SmaliMethod)11 SmaliClass (org.jf.smalidea.psi.impl.SmaliClass)7 SmaliFile (org.jf.smalidea.psi.impl.SmaliFile)7 MethodImplementation (org.jf.dexlib2.iface.MethodImplementation)5 Instruction (org.jf.dexlib2.iface.instruction.Instruction)4 SmaliInstruction (org.jf.smalidea.psi.impl.SmaliInstruction)3 PsiLocalVariable (com.intellij.psi.PsiLocalVariable)2 StackFrameProxy (com.intellij.debugger.engine.jdi.StackFrameProxy)1 JavaCodeFragment (com.intellij.psi.JavaCodeFragment)1 JavaRecursiveElementVisitor (com.intellij.psi.JavaRecursiveElementVisitor)1 PsiElement (com.intellij.psi.PsiElement)1 PsiModifierList (com.intellij.psi.PsiModifierList)1 LocalVariableImpl (com.sun.tools.jdi.LocalVariableImpl)1 LocationImpl (com.sun.tools.jdi.LocationImpl)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Nullable (javax.annotation.Nullable)1 Nullable (org.jetbrains.annotations.Nullable)1 AnalyzedInstruction (org.jf.dexlib2.analysis.AnalyzedInstruction)1 RegisterType (org.jf.dexlib2.analysis.RegisterType)1 StringReference (org.jf.dexlib2.iface.reference.StringReference)1