| .class public LMain; |
| .super Ljava/lang/Object; |
| |
| |
| #expected output: |
| #@ClassAnnotation() |
| #@MethodAnnotation() |
| #@FieldAnnotation() |
| #@ParameterAnnotation() |
| |
| |
| .method public static main([Ljava/lang/String;)V |
| .registers 1 |
| |
| invoke-static {}, LMain;->testClassAnnotation()V |
| |
| invoke-static {}, LMain;->testMethodAnnotation()V |
| |
| invoke-static {}, LMain;->testFieldAnnotation()V |
| |
| const-string v0, "" |
| |
| invoke-static {v0}, LMain;->testParameterAnnotation(Ljava/lang/String;)V |
| |
| return-void |
| .end method |
| |
| .annotation runtime LClassAnnotation; |
| .end annotation |
| |
| .method public static testClassAnnotation()V |
| .registers 3 |
| |
| sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; |
| |
| const-class v1, LMain; |
| const-class v2, LClassAnnotation; |
| |
| 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 |
| |
| |
| |
| .method public static testMethodAnnotation()V |
| .registers 4 |
| |
| .annotation runtime LMethodAnnotation; |
| .end annotation |
| |
| sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; |
| |
| const-class v1, LMain; |
| const-string v2, "testMethodAnnotation" |
| |
| const/4 v3, 0 |
| new-array v3, v3, [Ljava/lang/Class; |
| |
| invoke-virtual {v1, v2, v3}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; |
| move-result-object v1 |
| |
| const-class v2, LMethodAnnotation; |
| |
| invoke-virtual {v1, v2}, Ljava/lang/reflect/Method;->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 |
| |
| |
| .field public static fieldAnnotationTest:Ljava/lang/Object; |
| .annotation runtime LFieldAnnotation; |
| .end annotation |
| .end field |
| |
| .method public static testFieldAnnotation()V |
| .registers 3 |
| |
| sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; |
| |
| const-class v1, LMain; |
| const-string v2, "fieldAnnotationTest" |
| |
| invoke-virtual {v1, v2}, Ljava/lang/Class;->getField(Ljava/lang/String;)Ljava/lang/reflect/Field; |
| move-result-object v1 |
| |
| const-class v2, LFieldAnnotation; |
| |
| invoke-virtual {v1, v2}, Ljava/lang/reflect/Field;->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 |
| |
| |
| .method public static testParameterAnnotation(Ljava/lang/String;)V |
| .registers 6 |
| |
| .param p0 # Ljava/lang/String; |
| .annotation runtime LParameterAnnotation; |
| .end annotation |
| .end param |
| |
| |
| sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; |
| |
| const-class v1, LMain; |
| const-string v2, "testParameterAnnotation" |
| |
| const/4 v3, 1 |
| new-array v3, v3, [Ljava/lang/Class; |
| |
| const-class v4, Ljava/lang/String; |
| const/4 v5, 0 |
| aput-object v4, v3, v5 |
| |
| invoke-virtual {v1, v2, v3}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; |
| move-result-object v1 |
| |
| |
| invoke-virtual {v1}, Ljava/lang/reflect/Method;->getParameterAnnotations()[[Ljava/lang/annotation/Annotation; |
| move-result-object v1 |
| |
| aget-object v1, v1, v5 |
| aget-object v1, v1, v5 |
| |
| invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V |
| |
| return-void |
| .end method |