1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
public class DynamicHelloWorld extends java.lang.Object implements java.io.Serializable:
public void <init>():
ALOAD_0 // DynamicHelloWorld this (line 8)
INVOKESPECIAL java.lang.Object.<init> ()V
constructor-execution(void DynamicHelloWorld.<init>())
| RETURN
constructor-execution(void DynamicHelloWorld.<init>())
end public void <init>()
public static void main(String[]):
method-execution(void DynamicHelloWorld.main(java.lang.String[]))
| catch java.lang.UnsupportedOperationException -> E0
| | NEW DynamicHelloWorld (line 12)
| | DUP
| | constructor-call(void DynamicHelloWorld.<init>())
| | | INVOKESPECIAL DynamicHelloWorld.<init> ()V
| | constructor-call(void DynamicHelloWorld.<init>())
| | LDC "hello"
| | field-get(java.util.List java.util.Collections.EMPTY_LIST)
| | | GETSTATIC java.util.Collections.EMPTY_LIST Ljava/util/List;
| | field-get(java.util.List java.util.Collections.EMPTY_LIST)
| | method-call(java.lang.String DynamicHelloWorld.doit(java.lang.String, java.util.List))
| | | INVOKEVIRTUAL DynamicHelloWorld.doit (Ljava/lang/String;Ljava/util/List;)Ljava/lang/String;
| | method-call(java.lang.String DynamicHelloWorld.doit(java.lang.String, java.util.List))
| | POP
| | GOTO L0
| catch java.lang.UnsupportedOperationException -> E0
| E0: ASTORE_1 (line 13)
| field-get(java.io.PrintStream java.lang.System.out)
| | GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 14)
| field-get(java.io.PrintStream java.lang.System.out)
| NEW java.lang.StringBuffer
| DUP
| LDC "expected and caught: "
| constructor-call(void java.lang.StringBuffer.<init>(java.lang.String))
| | INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V
| constructor-call(void java.lang.StringBuffer.<init>(java.lang.String))
| ALOAD_1 // java.lang.UnsupportedOperationException t
| method-call(java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.Object))
| | INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer;
| method-call(java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.Object))
| method-call(java.lang.String java.lang.StringBuffer.toString())
| | INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String;
| method-call(java.lang.String java.lang.StringBuffer.toString())
| method-call(void java.io.PrintStream.println(java.lang.String))
| | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V
| method-call(void java.io.PrintStream.println(java.lang.String))
| RETURN (line 15)
| L0: NEW java.lang.RuntimeException (line 17)
| DUP
| LDC "should have caught exception"
| constructor-call(void java.lang.RuntimeException.<init>(java.lang.String))
| | INVOKESPECIAL java.lang.RuntimeException.<init> (Ljava/lang/String;)V
| constructor-call(void java.lang.RuntimeException.<init>(java.lang.String))
| ATHROW
method-execution(void DynamicHelloWorld.main(java.lang.String[]))
end public static void main(String[])
String doit(String, java.util.List):
ALOAD_1
ASTORE_3
ALOAD_2
ASTORE 4
method-execution(java.lang.String DynamicHelloWorld.doit(java.lang.String, java.util.List))
| GETSTATIC MyTrace.ajc$perSingletonInstance LMyTrace;
| ALOAD_0
| INVOKEVIRTUAL Trace.ajc$before$Trace$51 (Ljava/lang/Object;)V
| GETSTATIC MyTrace.ajc$perSingletonInstance LMyTrace;
| BIPUSH 3
| ANEWARRAY java.lang.Object
| ASTORE 6
| ALOAD 6
| BIPUSH 0
| ALOAD_0
| AASTORE
| ALOAD 6
| BIPUSH 1
| ALOAD_3
| AASTORE
| ALOAD 6
| BIPUSH 2
| ALOAD 4
| AASTORE
| NEW DynamicHelloWorld$AjcClosure3
| DUP
| ALOAD 6
| INVOKESPECIAL DynamicHelloWorld$AjcClosure3.<init> ([Ljava/lang/Object;)V
| INVOKEVIRTUAL Trace.ajc$around$Trace$cc (Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
| CHECKCAST java.lang.String
| GOTO L0
| L0: DUP
| ASTORE 7
| GETSTATIC MyTrace.ajc$perSingletonInstance LMyTrace;
| ALOAD_0
| ALOAD 7
| INVOKEVIRTUAL MyTrace.ajc$afterReturning$MyTrace$6e (Ljava/lang/Object;Ljava/lang/Object;)V
| ARETURN
method-execution(java.lang.String DynamicHelloWorld.doit(java.lang.String, java.util.List))
end String doit(String, java.util.List)
static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List):
ALOAD_2 (line 21)
ALOAD_1
method-call(boolean java.util.List.add(java.lang.Object))
| INVOKEINTERFACE java.util.List.add (Ljava/lang/Object;)Z
method-call(boolean java.util.List.add(java.lang.Object))
POP
ALOAD_2 (line 22)
method-call(java.lang.String java.lang.Object.toString())
| INVOKEVIRTUAL java.lang.Object.toString ()Ljava/lang/String;
method-call(java.lang.String java.lang.Object.toString())
ARETURN
end static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List)
static final String doit_aroundBody2(DynamicHelloWorld, String, java.util.List):
GETSTATIC MyTrace.ajc$perSingletonInstance LMyTrace;
ALOAD_0
BIPUSH 3
ANEWARRAY java.lang.Object
ASTORE_3
ALOAD_3
BIPUSH 0
ALOAD_0
AASTORE
ALOAD_3
BIPUSH 1
ALOAD_1
AASTORE
ALOAD_3
BIPUSH 2
ALOAD_2
AASTORE
NEW DynamicHelloWorld$AjcClosure1
DUP
ALOAD_3
INVOKESPECIAL DynamicHelloWorld$AjcClosure1.<init> ([Ljava/lang/Object;)V
INVOKEVIRTUAL Trace.ajc$around$Trace$1bc (Ljava/lang/Object;Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
CHECKCAST java.lang.String
ARETURN
end static final String doit_aroundBody2(DynamicHelloWorld, String, java.util.List)
end public class DynamicHelloWorld
public class DynamicHelloWorld$AjcClosure1 extends org.aspectj.runtime.internal.AroundClosure:
public void <init>(Object[]):
ALOAD_0
ALOAD_1
INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
RETURN
end public void <init>(Object[])
public Object run(Object[]):
ALOAD_0
GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
ASTORE_2
ALOAD_1
BIPUSH 0
AALOAD
CHECKCAST DynamicHelloWorld
ALOAD_2
BIPUSH 1
AALOAD
CHECKCAST java.lang.String
ALOAD_2
BIPUSH 2
AALOAD
CHECKCAST java.util.List
INVOKESTATIC DynamicHelloWorld.doit_aroundBody0 (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String;
ARETURN
end public Object run(Object[])
end public class DynamicHelloWorld$AjcClosure1
public class DynamicHelloWorld$AjcClosure3 extends org.aspectj.runtime.internal.AroundClosure:
public void <init>(Object[]):
ALOAD_0
ALOAD_1
INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
RETURN
end public void <init>(Object[])
public Object run(Object[]):
ALOAD_0
GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
ASTORE_2
ALOAD_2
BIPUSH 0
AALOAD
CHECKCAST DynamicHelloWorld
ALOAD_2
BIPUSH 1
AALOAD
CHECKCAST java.lang.String
ALOAD_2
BIPUSH 2
AALOAD
CHECKCAST java.util.List
INVOKESTATIC DynamicHelloWorld.doit_aroundBody2 (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String;
ARETURN
end public Object run(Object[])
end public class DynamicHelloWorld$AjcClosure3
|