1 .class public LMain; 2 .super Ljava/lang/Object; 3 4 5 #expected output: 6 #@ClassAnnotation() 7 #@MethodAnnotation() 8 #@FieldAnnotation() 9 #@ParameterAnnotation() 10 11 12 .method public static main([Ljava/lang/String;)V 13 .registers 1 14 15 invoke-static {}, LMain;->testClassAnnotation()V 16 17 invoke-static {}, LMain;->testMethodAnnotation()V 18 19 invoke-static {}, LMain;->testFieldAnnotation()V 20 21 const-string v0, "" 22 23 invoke-static {v0}, LMain;->testParameterAnnotation(Ljava/lang/String;)V 24 25 return-void 26 .end method 27 28 .annotation runtime LClassAnnotation; 29 .end annotation 30 31 .method public static testClassAnnotation()V 32 .registers 3 33 34 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; 35 36 const-class v1, LMain; 37 const-class v2, LClassAnnotation; 38 39 invoke-virtual {v1, v2}, Ljava/lang/Class;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation; 40 move-result-object v1 41 42 invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V 43 44 return-void 45 .end method 46 47 48 49 .method public static testMethodAnnotation()V 50 .registers 4 51 52 .annotation runtime LMethodAnnotation; 53 .end annotation 54 55 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; 56 57 const-class v1, LMain; 58 const-string v2, "testMethodAnnotation" 59 60 const/4 v3, 0 61 new-array v3, v3, [Ljava/lang/Class; 62 63 invoke-virtual {v1, v2, v3}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; 64 move-result-object v1 65 66 const-class v2, LMethodAnnotation; 67 68 invoke-virtual {v1, v2}, Ljava/lang/reflect/Method;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation; 69 move-result-object v1 70 71 invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V 72 73 return-void 74 .end method 75 76 77 .field public static fieldAnnotationTest:Ljava/lang/Object; 78 .annotation runtime LFieldAnnotation; 79 .end annotation 80 .end field 81 82 .method public static testFieldAnnotation()V 83 .registers 3 84 85 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; 86 87 const-class v1, LMain; 88 const-string v2, "fieldAnnotationTest" 89 90 invoke-virtual {v1, v2}, Ljava/lang/Class;->getField(Ljava/lang/String;)Ljava/lang/reflect/Field; 91 move-result-object v1 92 93 const-class v2, LFieldAnnotation; 94 95 invoke-virtual {v1, v2}, Ljava/lang/reflect/Field;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation; 96 move-result-object v1 97 98 invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V 99 100 return-void 101 .end method 102 103 104 .method public static testParameterAnnotation(Ljava/lang/String;)V 105 .registers 6 106 107 .parameter 108 .annotation runtime LParameterAnnotation; 109 .end annotation 110 .end parameter 111 112 113 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; 114 115 const-class v1, LMain; 116 const-string v2, "testParameterAnnotation" 117 118 const/4 v3, 1 119 new-array v3, v3, [Ljava/lang/Class; 120 121 const-class v4, Ljava/lang/String; 122 const/4 v5, 0 123 aput-object v4, v3, v5 124 125 invoke-virtual {v1, v2, v3}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; 126 move-result-object v1 127 128 129 invoke-virtual {v1}, Ljava/lang/reflect/Method;->getParameterAnnotations()[[Ljava/lang/annotation/Annotation; 130 move-result-object v1 131 132 aget-object v1, v1, v5 133 aget-object v1, v1, v5 134 135 invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V 136 137 return-void 138 .end method