Search in sources :

Example 21 with SmaliFile

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

the class SmaliFileTest method testFile.

public void testFile() {
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", ".class public Lmy/pkg/blah; .super Ljava/lang/Object;");
    Assert.assertEquals(SmaliFileType.INSTANCE, file.getFileType());
    SmaliClass smaliClass = file.getPsiClass();
    Assert.assertNotNull(smaliClass);
    SmaliClass[] smaliClasses = file.getClasses();
    Assert.assertNotNull(smaliClasses);
    Assert.assertEquals(1, smaliClasses.length);
    Assert.assertEquals(smaliClass, smaliClasses[0]);
    String packageName = file.getPackageName();
    Assert.assertEquals("my.pkg", packageName);
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) SmaliClass(org.jf.smalidea.psi.impl.SmaliClass)

Example 22 with SmaliFile

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

the class SmaliImplementsExtendsTest method testNormalClass.

public void testNormalClass() {
    myFixture.addFileToProject("my/pkg/base.smali", ".class public Lmy/pkg/base; .super Ljava/lang/Object;");
    myFixture.addFileToProject("my/pkg/iface.smali", ".class public Lmy/pkg/iface; .super Ljava/lang/Object;");
    myFixture.addFileToProject("my/pkg/iface2.smali", ".class public Lmy/pkg/iface2; .super Ljava/lang/Object;");
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", ".class public Lmy/pkg/blah; .implements Lmy/pkg/iface; .super Lmy/pkg/base; " + ".implements Lmy/pkg/iface2;");
    SmaliClass smaliClass = file.getPsiClass();
    SmaliExtendsList extendsList = smaliClass.getExtendsList();
    Assert.assertEquals(1, extendsList.getReferencedTypes().length);
    Assert.assertEquals("my.pkg.base", extendsList.getReferencedTypes()[0].getCanonicalText());
    Assert.assertEquals(1, extendsList.getReferenceNames().length);
    Assert.assertEquals("my.pkg.base", extendsList.getReferenceNames()[0]);
    Assert.assertEquals(1, smaliClass.getExtendsListTypes().length);
    Assert.assertEquals("my.pkg.base", smaliClass.getExtendsListTypes()[0].getCanonicalText());
    PsiClass resolvedSuper = extendsList.getReferencedTypes()[0].resolve();
    Assert.assertNotNull(resolvedSuper);
    Assert.assertEquals("my.pkg.base", resolvedSuper.getQualifiedName());
    SmaliImplementsList implementsList = smaliClass.getImplementsList();
    Assert.assertEquals(2, implementsList.getReferencedTypes().length);
    Assert.assertEquals("my.pkg.iface", implementsList.getReferencedTypes()[0].getCanonicalText());
    Assert.assertEquals("my.pkg.iface2", implementsList.getReferencedTypes()[1].getCanonicalText());
    Assert.assertEquals(2, implementsList.getReferenceNames().length);
    Assert.assertEquals("my.pkg.iface", implementsList.getReferenceNames()[0]);
    Assert.assertEquals("my.pkg.iface2", implementsList.getReferenceNames()[1]);
    Assert.assertEquals(2, smaliClass.getImplementsListTypes().length);
    Assert.assertEquals("my.pkg.iface", smaliClass.getImplementsListTypes()[0].getCanonicalText());
    Assert.assertEquals("my.pkg.iface2", smaliClass.getImplementsListTypes()[1].getCanonicalText());
    PsiClass resolvedInterface = implementsList.getReferencedTypes()[0].resolve();
    Assert.assertNotNull(resolvedInterface);
    Assert.assertEquals("my.pkg.iface", resolvedInterface.getQualifiedName());
    resolvedInterface = implementsList.getReferencedTypes()[1].resolve();
    Assert.assertNotNull(resolvedInterface);
    Assert.assertEquals("my.pkg.iface2", resolvedInterface.getQualifiedName());
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) SmaliClass(org.jf.smalidea.psi.impl.SmaliClass) PsiClass(com.intellij.psi.PsiClass) SmaliExtendsList(org.jf.smalidea.psi.impl.SmaliExtendsList) SmaliImplementsList(org.jf.smalidea.psi.impl.SmaliImplementsList)

Example 23 with SmaliFile

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

the class SmaliImplementsExtendsTest method testInterface.

public void testInterface() {
    myFixture.addFileToProject("my/pkg/iface.smali", ".class public Lmy/pkg/iface; .super Ljava/lang/Object;");
    myFixture.addFileToProject("my/pkg/iface2.smali", ".class public Lmy/pkg/iface2; .super Ljava/lang/Object;");
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", ".class public interface Lmy/pkg/blah; .implements Lmy/pkg/iface; .super Ljava/lang/Object; " + ".implements Lmy/pkg/iface2;");
    SmaliClass smaliClass = file.getPsiClass();
    SmaliExtendsList extendsList = smaliClass.getExtendsList();
    Assert.assertEquals(2, extendsList.getReferencedTypes().length);
    Assert.assertEquals("my.pkg.iface", extendsList.getReferencedTypes()[0].getCanonicalText());
    Assert.assertEquals("my.pkg.iface2", extendsList.getReferencedTypes()[1].getCanonicalText());
    Assert.assertEquals(2, extendsList.getReferenceNames().length);
    Assert.assertEquals("my.pkg.iface", extendsList.getReferenceNames()[0]);
    Assert.assertEquals("my.pkg.iface2", extendsList.getReferenceNames()[1]);
    Assert.assertEquals(2, smaliClass.getExtendsListTypes().length);
    Assert.assertEquals("my.pkg.iface", smaliClass.getExtendsListTypes()[0].getCanonicalText());
    Assert.assertEquals("my.pkg.iface2", smaliClass.getExtendsListTypes()[1].getCanonicalText());
    PsiClass resolvedInterface = extendsList.getReferencedTypes()[0].resolve();
    Assert.assertNotNull(resolvedInterface);
    Assert.assertEquals("my.pkg.iface", resolvedInterface.getQualifiedName());
    resolvedInterface = extendsList.getReferencedTypes()[1].resolve();
    Assert.assertNotNull(resolvedInterface);
    Assert.assertEquals("my.pkg.iface2", resolvedInterface.getQualifiedName());
    SmaliImplementsList implementsList = smaliClass.getImplementsList();
    Assert.assertEquals(0, implementsList.getReferencedTypes().length);
    Assert.assertEquals(0, implementsList.getReferenceNames().length);
    Assert.assertEquals(0, smaliClass.getImplementsListTypes().length);
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) SmaliClass(org.jf.smalidea.psi.impl.SmaliClass) PsiClass(com.intellij.psi.PsiClass) SmaliExtendsList(org.jf.smalidea.psi.impl.SmaliExtendsList) SmaliImplementsList(org.jf.smalidea.psi.impl.SmaliImplementsList)

Example 24 with SmaliFile

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

the class SmaliInstructionTest method testMultipleInstructions.

public void testMultipleInstructions() {
    String text = ".class public Lmy/pkg/blah; .super Ljava/lang/Object;\n" + ".method blah(IJLjava/lang/String;)I\n" + "    .locals 1\n" + "    const v0, 1234\n" + "    r<ref>eturn v0\n" + ".end method";
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", text.replace("<ref>", ""));
    PsiElement leafElement = file.findElementAt(text.indexOf("<ref>"));
    Assert.assertNotNull(leafElement);
    SmaliInstruction instructionElement = (SmaliInstruction) leafElement.getParent();
    Assert.assertNotNull(instructionElement);
    Assert.assertEquals(Opcode.RETURN, instructionElement.getOpcode());
    Assert.assertEquals(6, instructionElement.getOffset());
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) SmaliInstruction(org.jf.smalidea.psi.impl.SmaliInstruction) PsiElement(com.intellij.psi.PsiElement)

Example 25 with SmaliFile

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

the class SmaliLiteralTest method doTest.

private void doTest(long expectedValue, String literalValue) {
    String text = ".class public Lmy/pkg/blah; .super Ljava/lang/Object;\n" + ".method blah()V\n" + "    .registers <ref>" + literalValue + "\n" + "    return-void\n" + ".end method";
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", text.replace("<ref>", ""));
    PsiElement leafElement = file.findElementAt(text.indexOf("<ref>"));
    Assert.assertNotNull(leafElement);
    SmaliLiteral literalElement = (SmaliLiteral) leafElement.getParent();
    Assert.assertNotNull(literalElement);
    Assert.assertEquals(expectedValue, literalElement.getIntegralValue());
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) SmaliLiteral(org.jf.smalidea.psi.impl.SmaliLiteral) PsiElement(com.intellij.psi.PsiElement)

Aggregations

SmaliFile (org.jf.smalidea.psi.impl.SmaliFile)42 SmaliClass (org.jf.smalidea.psi.impl.SmaliClass)28 PsiElement (com.intellij.psi.PsiElement)7 SmaliMethod (org.jf.smalidea.psi.impl.SmaliMethod)7 SmaliModifierList (org.jf.smalidea.psi.impl.SmaliModifierList)7 PsiClass (com.intellij.psi.PsiClass)5 PsiField (com.intellij.psi.PsiField)5 MethodImplementation (org.jf.dexlib2.iface.MethodImplementation)5 SmaliClassType (org.jf.smalidea.psi.impl.SmaliClassType)5 SmaliClassTypeElement (org.jf.smalidea.psi.impl.SmaliClassTypeElement)5 Instruction (org.jf.dexlib2.iface.instruction.Instruction)3 SmaliField (org.jf.smalidea.psi.impl.SmaliField)3 PsiPrimitiveType (com.intellij.psi.PsiPrimitiveType)2 PsiTypeElement (com.intellij.psi.PsiTypeElement)2 SmaliAnnotation (org.jf.smalidea.psi.impl.SmaliAnnotation)2 SmaliExtendsList (org.jf.smalidea.psi.impl.SmaliExtendsList)2 SmaliImplementsList (org.jf.smalidea.psi.impl.SmaliImplementsList)2 SmaliInstruction (org.jf.smalidea.psi.impl.SmaliInstruction)2 SmaliLiteral (org.jf.smalidea.psi.impl.SmaliLiteral)2 DebugProcess (com.intellij.debugger.engine.DebugProcess)1