use of org.jf.smalidea.psi.impl.SmaliClass 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());
}
use of org.jf.smalidea.psi.impl.SmaliClass 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);
}
use of org.jf.smalidea.psi.impl.SmaliClass in project smali by JesusFreke.
the class ClassReferenceTest method testSmaliReferenceFromJava.
/**
* Test a reference to a smali class from a java class
*/
public void testSmaliReferenceFromJava() throws Exception {
createFile("blarg.smali", ".class public Lblarg; .super Ljava/lang/Object;");
PsiReference reference = configureByFileText("public class blah extends bla<ref>rg { }", "blah.java");
SmaliClass smaliClass = (SmaliClass) reference.resolve();
Assert.assertNotNull(smaliClass);
Assert.assertEquals("blarg", smaliClass.getQualifiedName());
}
use of org.jf.smalidea.psi.impl.SmaliClass in project smali by JesusFreke.
the class ClassReferenceTest method testSmaliReferenceFromSmali.
/**
* Test a reference to a smali class from a smali class
*/
public void testSmaliReferenceFromSmali() throws Exception {
createFile("blarg.smali", ".class public Lblarg; .super Ljava/lang/Object;");
SmaliClassTypeElement typeElement = (SmaliClassTypeElement) configureByFileText(".class public Lblah; .super L<ref>blarg;", "blah.smali");
Assert.assertEquals("blarg", typeElement.getName());
SmaliClass smaliClass = (SmaliClass) typeElement.resolve();
Assert.assertNotNull(smaliClass);
Assert.assertEquals("blarg", smaliClass.getQualifiedName());
JavaResolveResult resolveResult = typeElement.advancedResolve(false);
Assert.assertNotNull(resolveResult.getElement());
Assert.assertEquals("blarg", ((PsiClass) resolveResult.getElement()).getQualifiedName());
JavaResolveResult[] resolveResults = typeElement.multiResolve(false);
Assert.assertEquals(1, resolveResults.length);
Assert.assertNotNull(resolveResults[0].getElement());
Assert.assertEquals("blarg", ((PsiClass) resolveResults[0].getElement()).getQualifiedName());
}
use of org.jf.smalidea.psi.impl.SmaliClass 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));
}
Aggregations