diff --git a/src/test/resources/examples/RecursiveAnnotation/Main.smali b/src/test/resources/examples/RecursiveAnnotation/Main.smali new file mode 100644 index 00000000..4cf3dcdb --- /dev/null +++ b/src/test/resources/examples/RecursiveAnnotation/Main.smali @@ -0,0 +1,24 @@ +.class public LMain; +.super Ljava/lang/Object; + +;expected output (using the dalvik's default stack size) +;@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=java.lang.StackOverflowError)))))))))))))))))))))))))))))) + +.method public static main([Ljava/lang/String;)V + .registers 3 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + + const-class v1, LMain; + const-class v2, LRecursiveAnnotation; + + invoke-virtual {v1, v2}, Ljava/lang/Class;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation; + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V + + return-void +.end method + +.annotation runtime LRecursiveAnnotation; +.end annotation diff --git a/src/test/resources/examples/RecursiveAnnotation/RecursiveAnnotation.smali b/src/test/resources/examples/RecursiveAnnotation/RecursiveAnnotation.smali new file mode 100644 index 00000000..dbacafa7 --- /dev/null +++ b/src/test/resources/examples/RecursiveAnnotation/RecursiveAnnotation.smali @@ -0,0 +1,18 @@ +.class public abstract interface annotation LRecursiveAnnotation; +.super Ljava/lang/Object; +.implements Ljava/lang/annotation/Annotation; + +;this is a recursive annotation that has a default value of itself. +;Trying to print .toString() on an instance of this annotation +;will cause a stack overflow + +.method public abstract value()LRecursiveAnnotation; +.end method + +.annotation system Ldalvik/annotation/AnnotationDefault; + value = .subannotation LRecursiveAnnotation; + value = .subannotation LRecursiveAnnotation; + .end subannotation + .end subannotation +.end annotation +