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
|
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[]):
catch java.lang.UnsupportedOperationException -> E0
| NEW DynamicHelloWorld (line 12)
| DUP
| INVOKESPECIAL DynamicHelloWorld.<init> ()V
| LDC "hello"
| GETSTATIC java.util.Collections.EMPTY_LIST Ljava/util/List;
| INVOKEVIRTUAL DynamicHelloWorld.doit (Ljava/lang/String;Ljava/util/List;)Ljava/lang/String;
| POP
| GOTO L0
catch java.lang.UnsupportedOperationException -> E0
E0: ASTORE_1 (line 13)
GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 14)
NEW java.lang.StringBuffer
DUP
LDC "expected and caught: "
INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V
ALOAD_1 // java.lang.UnsupportedOperationException t
INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer;
INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String;
INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V
RETURN (line 15)
L0: NEW java.lang.RuntimeException (line 17)
DUP
LDC "should have caught exception"
INVOKESPECIAL java.lang.RuntimeException.<init> (Ljava/lang/String;)V
ATHROW
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))
| INVOKESTATIC MyTrace.aspectOf ()LMyTrace;
| ALOAD_0
| INVOKEVIRTUAL Trace.ajc$before$Trace$1$26352be2 (Ljava/lang/Object;)V
| ALOAD_0
| ALOAD_3
| ALOAD 4
| INVOKESTATIC MyTrace.aspectOf ()LMyTrace;
| ACONST_NULL
| INVOKESTATIC DynamicHelloWorld.doit_aroundBody3$advice (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;LTrace;Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
| CHECKCAST java.lang.String
| GOTO L0
| L0: DUP
| ASTORE 5
| INVOKESTATIC MyTrace.aspectOf ()LMyTrace;
| ALOAD_0
| ALOAD 5
| INVOKEVIRTUAL MyTrace.ajc$afterReturning$MyTrace$1$2b31dfa3 (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)
private static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List):
ALOAD_2 (line 21)
ALOAD_1
INVOKEINTERFACE java.util.List.add (Ljava/lang/Object;)Z
POP
ALOAD_2 (line 22)
INVOKEVIRTUAL java.lang.Object.toString ()Ljava/lang/String;
ARETURN
end private static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List)
private static final Object doit_aroundBody1$advice(DynamicHelloWorld, String, java.util.List, Trace, Object, org.aspectj.runtime.internal.AroundClosure):
GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 17)
NEW java.lang.StringBuffer
DUP
LDC "start around(2): "
INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V
ALOAD 4
INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer;
INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String;
INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V
ALOAD 4 (line 18)
ALOAD 5
ASTORE 7
ASTORE 8
ALOAD 8
CHECKCAST DynamicHelloWorld
ALOAD_1
ALOAD_2
INVOKESTATIC DynamicHelloWorld.doit_aroundBody0 (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String;
ASTORE 6
GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 19)
NEW java.lang.StringBuffer
DUP
LDC "exiting around with(2): "
INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V
ALOAD 6
INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer;
INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String;
INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V
ALOAD 6 (line 20)
ARETURN
end private static final Object doit_aroundBody1$advice(DynamicHelloWorld, String, java.util.List, Trace, Object, org.aspectj.runtime.internal.AroundClosure)
private static final String doit_aroundBody2(DynamicHelloWorld, String, java.util.List):
ALOAD_0
ALOAD_1
ALOAD_2
INVOKESTATIC MyTrace.aspectOf ()LMyTrace;
ALOAD_0
ACONST_NULL
INVOKESTATIC DynamicHelloWorld.doit_aroundBody1$advice (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;LTrace;Ljava/lang/Object;Lorg/aspectj/runtime/internal/AroundClosure;)Ljava/lang/Object;
CHECKCAST java.lang.String
ARETURN
end private static final String doit_aroundBody2(DynamicHelloWorld, String, java.util.List)
private static final Object doit_aroundBody3$advice(DynamicHelloWorld, String, java.util.List, Trace, org.aspectj.runtime.internal.AroundClosure):
LDC "Hi" (line 9)
ASTORE 5
GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 10)
NEW java.lang.StringBuffer
DUP
LDC "start around: "
INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V
ALOAD 5
INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer;
INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String;
INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V
ALOAD 4 (line 11)
ASTORE 7
ALOAD_0
ALOAD_1
ALOAD_2
INVOKESTATIC DynamicHelloWorld.doit_aroundBody2 (LDynamicHelloWorld;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String;
ASTORE 6
GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 12)
NEW java.lang.StringBuffer
DUP
LDC "exiting around with: "
INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V
ALOAD 6
INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer;
INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String;
INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V
ALOAD 6 (line 13)
ARETURN
end private static final Object doit_aroundBody3$advice(DynamicHelloWorld, String, java.util.List, Trace, org.aspectj.runtime.internal.AroundClosure)
end public class DynamicHelloWorld
|