diff --git a/baksmali/src/test/smali/deodex_test2/app_classes/main.smali b/baksmali/src/test/smali/deodex_test2/app_classes/main.smali new file mode 100644 index 00000000..9c1846ed --- /dev/null +++ b/baksmali/src/test/smali/deodex_test2/app_classes/main.smali @@ -0,0 +1,41 @@ +.class public Lmain; + +.super Ljava/lang/Object; + +.method public static main([Ljava/lang/String;)V + .registers 6 + + const v2, 0 + + + const v3, 1 + const v4, 0 + new-array v1, v3, [Lsubclass1; + new-instance v0, Lsubclass1; + invoke-direct {v0}, Lsubclass1;->()V + aput-object v0, v1, v4 + + goto here2: + + here: + const v2, 1 + + here2: + + #this is tricky, because it has to merge two array types, [Lsubclass1; and [Lsubclass2 + #which should result in [Lsuperclass;. However, this dex file won't have a reference + #to [Lsuperclass; + aget-object v5, v1, v4 + + invoke-virtual {v5}, Lsupersuperclass;->somemethod()V + + + new-array v1, v3, [Lsubclass2; + new-instance v0, Lsubclass2; + invoke-direct {v0}, Lsubclass2;->()V + aput-object v0, v1, v4 + + if-eqz v2, here: + + return-void +.end method \ No newline at end of file diff --git a/baksmali/src/test/smali/deodex_test2/bootclass_classes/randomclass.smali b/baksmali/src/test/smali/deodex_test2/bootclass_classes/randomclass.smali new file mode 100644 index 00000000..3c02f137 --- /dev/null +++ b/baksmali/src/test/smali/deodex_test2/bootclass_classes/randomclass.smali @@ -0,0 +1,18 @@ +.class public Lrandomclass; + +.super Ljava/lang/Object; + +.method public constructor ()V + .registers 1 + invoke-direct {p0}, Ljava/lang/Object;->()V + return-void +.end method + +.method public getSuperclass()Lsuperclass; + .registers 2 + + new-instance v0, Lsuperclass; + invoke-direct {v0}, Lsuperclass;->()V + + return-object v0 +.end method \ No newline at end of file diff --git a/baksmali/src/test/smali/deodex_test2/bootclass_classes/subclass1.smali b/baksmali/src/test/smali/deodex_test2/bootclass_classes/subclass1.smali new file mode 100644 index 00000000..d7b840f3 --- /dev/null +++ b/baksmali/src/test/smali/deodex_test2/bootclass_classes/subclass1.smali @@ -0,0 +1,21 @@ +.class public Lsubclass1; + +.super Lsuperclass; + +.method public constructor ()V + .registers 1 + invoke-direct {p0}, Lsuperclass;->()V + return-void +.end method + +.method public somemethod()V + .registers 2 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + + const-string v1, "subclass1.somemethod" + + invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + return-void +.end method \ No newline at end of file diff --git a/baksmali/src/test/smali/deodex_test2/bootclass_classes/subclass2.smali b/baksmali/src/test/smali/deodex_test2/bootclass_classes/subclass2.smali new file mode 100644 index 00000000..605cccb7 --- /dev/null +++ b/baksmali/src/test/smali/deodex_test2/bootclass_classes/subclass2.smali @@ -0,0 +1,21 @@ +.class public Lsubclass2; + +.super Lsuperclass; + +.method public constructor ()V + .registers 1 + invoke-direct {p0}, Lsuperclass;->()V + return-void +.end method + +.method public somemethod()V + .registers 2 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + + const-string v1, "subclass2.somemethod" + + invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + return-void +.end method \ No newline at end of file diff --git a/baksmali/src/test/smali/deodex_test2/bootclass_classes/superclass.smali b/baksmali/src/test/smali/deodex_test2/bootclass_classes/superclass.smali new file mode 100644 index 00000000..e44a17a2 --- /dev/null +++ b/baksmali/src/test/smali/deodex_test2/bootclass_classes/superclass.smali @@ -0,0 +1,21 @@ +.class public Lsuperclass; + +.super Lsupersuperclass; + +.method public constructor ()V + .registers 1 + invoke-direct {p0}, Lsupersuperclass;->()V + return-void +.end method + +.method public somemethod()V + .registers 2 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + + const-string v1, "superclass.somemethod" + + invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + return-void +.end method \ No newline at end of file diff --git a/baksmali/src/test/smali/deodex_test2/bootclass_classes/supersuperclass.smali b/baksmali/src/test/smali/deodex_test2/bootclass_classes/supersuperclass.smali new file mode 100644 index 00000000..9621e14c --- /dev/null +++ b/baksmali/src/test/smali/deodex_test2/bootclass_classes/supersuperclass.smali @@ -0,0 +1,21 @@ +.class public Lsupersuperclass; + +.super Ljava/lang/Object; + +.method public constructor ()V + .registers 1 + invoke-direct {p0}, Ljava/lang/Object;->()V + return-void +.end method + +.method public somemethod()V + .registers 2 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + + const-string v1, "supersuperclass.somemethod" + + invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + return-void +.end method \ No newline at end of file