Hi,
I am not an expert of javap analysis.
I try to join the whole trace.
I think you are right. decompiling the TestingClass with JD-GUI, doesn't
show any line number.
has i made something wrong, at compilation time ?
extract of javap -verbose TestingClass :
public class jlp.aspectj.test.TestingClass extends java.lang.Object
implements java.lang.Runnable
minor version: 0
major version: 49
Constant pool:
const #1 = Field #40.#69; //
jlp/aspectj/test/TestingClass.name:Ljava/lang/String;
const #2 = Method #44.#70; // java/lang/Object."<init>":()V
const #3 = String #71; //
const #4 = Field #40.#72; // jlp/aspectj/test/TestingClass.running:Z
const #5 = int 1000000;
const #6 = Field #40.#73; // jlp/aspectj/test/TestingClass.limit:I
const #7 = class #74; // java/lang/Thread
const #8 = Method #7.#75; //
java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
const #9 = Field #40.#76; //
jlp/aspectj/test/TestingClass.thread:Ljava/lang/Thread;
const #10 = String #77; // no_name
const #11 = Method #40.#78; //
jlp/aspectj/test/TestingClass."<init>":(Ljava/lang/String;)V
const #12 = Field #79.#80; //
java/lang/System.out:Ljava/io/PrintStream;
const #13 = class #81; // java/lang/StringBuilder
const #14 = Method #13.#70; // java/lang/StringBuilder."<init>":()V
const #15 = Method #13.#82; //
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
const #16 = String #83; // .myShortMethod : I will sleep for 100 ms
const #17 = Method #13.#84; //
java/lang/StringBuilder.toString:()Ljava/lang/String;
const #18 = Method #85.#86; //
java/io/PrintStream.println:(Ljava/lang/String;)V
const #19 = long 100l;
const #21 = Method #7.#87; // java/lang/Thread.sleep:(J)V
const #22 = class #88; // java/lang/InterruptedException
const #23 = Method #22.#89; //
java/lang/InterruptedException.printStackTrace:()V
const #24 = String #90; // .myLongMethod : I will sleep for 1s
const #25 = long 1000l;
const #27 = class #91; // java/util/HashMap
const #28 = Method #27.#70; // java/util/HashMap."<init>":()V
const #29 = String #92; // .myStressingMethod : limit=
const #30 = Method #13.#93; //
java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
const #31 = class #94; // java/lang/Integer
const #32 = Method #31.#95; // java/lang/Integer."<init>":(I)V
const #33 = Method #31.#84; //
java/lang/Integer.toString:()Ljava/lang/String;
const #34 = Method #27.#96; //
java/util/HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
const #35 = Method #27.#97; // java/util/HashMap.clear:()V
const #36 = Method #40.#98; //
jlp/aspectj/test/TestingClass.myShortMethod:()V
const #37 = Method #40.#99; //
jlp/aspectj/test/TestingClass.myStressingMethod:(I)V
const #38 = Method #40.#100; //
jlp/aspectj/test/TestingClass.myLongMethod:()V
const #39 = Method #31.#101; //
java/lang/Integer.parseInt:(Ljava/lang/String;)I
const #40 = class #102; // jlp/aspectj/test/TestingClass
const #41 = String #103; // thread_
const #42 = Method #40.#104; //
jlp/aspectj/test/TestingClass."<init>":(Ljava/lang/String;I)V
const #43 = Method #7.#105; // java/lang/Thread.start:()V
const #44 = class #106; // java/lang/Object
const #45 = class #107; // java/lang/Runnable
const #46 = Asciz name;
const #47 = Asciz Ljava/lang/String;;
const #48 = Asciz running;
const #49 = Asciz Z;
const #50 = Asciz limit;
const #51 = Asciz I;
const #52 = Asciz thread;
const #53 = Asciz Ljava/lang/Thread;;
const #54 = Asciz getName;
const #55 = Asciz ()Ljava/lang/String;;
const #56 = Asciz Code;
const #57 = Asciz setName;
const #58 = Asciz (Ljava/lang/String;)V;
const #59 = Asciz <init>;
const #60 = Asciz (Ljava/lang/String;I)V;
const #61 = Asciz ()V;
const #62 = Asciz myShortMethod;
const #63 = Asciz myLongMethod;
const #64 = Asciz myStressingMethod;
const #65 = Asciz (I)V;
const #66 = Asciz run;
const #67 = Asciz main;
const #68 = Asciz ([Ljava/lang/String;)V;
const #69 = NameAndType #46:#47;// name:Ljava/lang/String;
const #70 = NameAndType #59:#61;// "<init>":()V
const #71 = Asciz ;
const #72 = NameAndType #48:#49;// running:Z
const #73 = NameAndType #50:#51;// limit:I
const #74 = Asciz java/lang/Thread;
const #75 = NameAndType #59:#108;// "<init>":(Ljava/lang/Runnable;)V
const #76 = NameAndType #52:#53;// thread:Ljava/lang/Thread;
const #77 = Asciz no_name;
const #78 = NameAndType #59:#58;// "<init>":(Ljava/lang/String;)V
const #79 = class #109; // java/lang/System
const #80 = NameAndType #110:#111;// out:Ljava/io/PrintStream;
const #81 = Asciz java/lang/StringBuilder;
const #82 = NameAndType #112:#113;//
append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
const #83 = Asciz .myShortMethod : I will sleep for 100 ms;
const #84 = NameAndType #114:#55;// toString:()Ljava/lang/String;
const #85 = class #115; // java/io/PrintStream
const #86 = NameAndType #116:#58;// println:(Ljava/lang/String;)V
const #87 = NameAndType #117:#118;// sleep:(J)V
const #88 = Asciz java/lang/InterruptedException;
const #89 = NameAndType #119:#61;// printStackTrace:()V
const #90 = Asciz .myLongMethod : I will sleep for 1s;
const #91 = Asciz java/util/HashMap;
const #92 = Asciz .myStressingMethod : limit=;
const #93 = NameAndType #112:#120;// append:(I)Ljava/lang/StringBuilder;
const #94 = Asciz java/lang/Integer;
const #95 = NameAndType #59:#65;// "<init>":(I)V
const #96 = NameAndType #121:#122;//
put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
const #97 = NameAndType #123:#61;// clear:()V
const #98 = NameAndType #62:#61;// myShortMethod:()V
const #99 = NameAndType #64:#65;// myStressingMethod:(I)V
const #100 = NameAndType #63:#61;// myLongMethod:()V
const #101 = NameAndType #124:#125;// parseInt:(Ljava/lang/String;)I
const #102 = Asciz jlp/aspectj/test/TestingClass;
const #103 = Asciz thread_;
const #104 = NameAndType #59:#60;// "<init>":(Ljava/lang/String;I)V
const #105 = NameAndType #126:#61;// start:()V
const #106 = Asciz java/lang/Object;
const #107 = Asciz java/lang/Runnable;
const #108 = Asciz (Ljava/lang/Runnable;)V;
const #109 = Asciz java/lang/System;
const #110 = Asciz out;
const #111 = Asciz Ljava/io/PrintStream;;
const #112 = Asciz append;
const #113 = Asciz (Ljava/lang/String;)Ljava/lang/StringBuilder;;
const #114 = Asciz toString;
const #115 = Asciz java/io/PrintStream;
const #116 = Asciz println;
const #117 = Asciz sleep;
const #118 = Asciz (J)V;
const #119 = Asciz printStackTrace;
const #120 = Asciz (I)Ljava/lang/StringBuilder;;
const #121 = Asciz put;
const #122 = Asciz (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;;
const #123 = Asciz clear;
const #124 = Asciz parseInt;
const #125 = Asciz (Ljava/lang/String;)I;
const #126 = Asciz start;
Le 28/12/2012 02:54, Andy Clement a écrit :
Hi,
Can you confirm if the code you are load time weaving into has line
number table entries? Use javap with -verbose to see them if they are
there, look for one attached to each method. If they are missing that
explains it, if they are not missing it seems like a bug.
cheers,
Andy
On 24 December 2012 07:37, Pasturel <[email protected]
<mailto:[email protected]>> wrote:
Le 24/12/2012 16:04, Pasturel a écrit :
Le 24/12/2012 12:25, Pasturel a écrit :
Hi,
withAspectJ Compiler 1.7.1 (DEVELOPMENT - Built: Wednesday Oct
24, 2012 at 18:06:22 GMT) and LTW,
the call
thisJoinPoint.getStaticPart().getSourceLocation().getLine()
always returns 0
My advice is an around advice. I test if( null !=
thisJoinPoint.getStaticPart().getSourceLocation())
The pointcut is correctly weaved, and the advice excecutes
correctly ( except for retrieving the noLine)
How can we explain this? a bug ?
I give below the code to test ( my tests give always a getLine()
=0) :
The Class :
package jlp.aspectj.test;
import java.util.HashMap;
public class TestingClass implements Runnable {
private String name = "";
public boolean running = true;
private int limit = 1000000;
Thread thread = new Thread(this);
public String getName() {
return name;
}
public void setName(String name) {
this.name <http://this.name> = name;
}
public TestingClass(String name, int limit) {
this.name <http://this.name> = name;
this.limit = limit;
}
public TestingClass(String name) {
this.name <http://this.name> = name;
}
public TestingClass() {
this("no_name");
}
public void myShortMethod() {
System.out.println("I will sleep for 100 ms");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void myLongMethod() {
System.out.println("I will sleep for 1s");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void myStressingMethod(int limit) {
HashMap<String, Integer> hm = new HashMap<String, Integer>();
System.out.println("Entering in myStressingMethod limit="
+ limit);
for (int i = 0; i < limit; i++) {
hm.put(new Integer(i % 100).toString(), new Integer(i
% 1000));
}
hm.clear();
}
public void run() {
while (running) {
myShortMethod();
myStressingMethod(limit);
myLongMethod();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestingClass[] tabRunners = new
TestingClass[Integer.parseInt(args[0])];
for (int i = 0; i < tabRunners.length; i++) {
tabRunners[i] = new TestingClass("thread_" + i,
Integer.parseInt(args[1]));
tabRunners[i].thread.start();
}
}
}
The AspectJ to (LTW) weave :
package jlp.perf.aspects.concreteAspects;
public aspect ConcreteTester {
public pointcut methods():execution(public * *..*.*(..));
Object around() : methods()
{
Object ret = proceed();
String str="Aspect ConcreteTester
:"+thisJoinPointStaticPart.getSignature().getDeclaringTypeName()+"."+
thisJoinPointStaticPart.getSignature().getName()+";"+thisJoinPointStaticPart
.getSourceLocation().getLine();
System.out.println(str);
return ret;
}
}
_______________________________________________
aspectj-users mailing list
[email protected] <mailto:[email protected]>
https://dev.eclipse.org/mailman/listinfo/aspectj-users
but Compile Time Weaving makes the Aspect running correctly, as
shown by the traces below :
I will sleep for 1s
Aspect ConcreteTester
:jlp.aspectj.test.TestingClass.myShortMethod;*39*
Entering in myStressingMethod limit=1000000
Aspect ConcreteTester
:jlp.aspectj.test.TestingClass.myStressingMethod*;61*
I will sleep for 1s
Aspect ConcreteTester :jlp.aspectj.test.TestingClass.myShortMethod;39
Entering in myStressingMethod limit=1000000
Aspect ConcreteTester
:jlp.aspectj.test.TestingClass.myLongMethod;*49*
I will sleep for 100 ms
Aspect ConcreteTester
:jlp.aspectj.test.TestingClass.myStressingMethod;61
I will sleep for 1s
Aspect ConcreteTester :jlp.aspectj.test.TestingClass.myShortMethod;39
Entering in myStressingMethod limit=1000000
Aspect ConcreteTester :jlp.aspectj.test.TestingClass.myLongMethod;49
I will sleep for 100 ms
Aspect ConcreteTester
:jlp.aspectj.test.TestingClass.myStressingMethod;61
I will sleep for 1s
Aspect ConcreteTester
:jlp.aspectj.test.TestingClass.myStressingMethod;61
I will sleep for 1s
Aspect ConcreteTester :jlp.aspectj.test.TestingClass.myShortMethod;39
Entering in myStressingMethod limit=1000000
Aspect ConcreteTester :jlp.aspectj.test.TestingClass.myShortMethod;39
Entering in myStressingMethod limit=1000000
Aspect ConcreteTester
:jlp.aspectj.test.TestingClass.myStressingMethod;61
I will sleep for 1s
Aspect ConcreteTester
:jlp.aspectj.test.TestingClass.myStressingMethod;61
I will sleep for 1s
_______________________________________________
aspectj-users mailing list
[email protected] <mailto:[email protected]>
https://dev.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users
public class jlp.aspectj.test.TestingClass extends java.lang.Object implements
java.lang.Runnable
minor version: 0
major version: 49
Constant pool:
const #1 = Field #40.#69; //
jlp/aspectj/test/TestingClass.name:Ljava/lang/String;
const #2 = Method #44.#70; // java/lang/Object."<init>":()V
const #3 = String #71; //
const #4 = Field #40.#72; //
jlp/aspectj/test/TestingClass.running:Z
const #5 = int 1000000;
const #6 = Field #40.#73; //
jlp/aspectj/test/TestingClass.limit:I
const #7 = class #74; // java/lang/Thread
const #8 = Method #7.#75; //
java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
const #9 = Field #40.#76; //
jlp/aspectj/test/TestingClass.thread:Ljava/lang/Thread;
const #10 = String #77; // no_name
const #11 = Method #40.#78; //
jlp/aspectj/test/TestingClass."<init>":(Ljava/lang/String;)V
const #12 = Field #79.#80; //
java/lang/System.out:Ljava/io/PrintStream;
const #13 = class #81; // java/lang/StringBuilder
const #14 = Method #13.#70; // java/lang/StringBuilder."<init>":()V
const #15 = Method #13.#82; //
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
const #16 = String #83; // .myShortMethod : I will sleep for 100 ms
const #17 = Method #13.#84; //
java/lang/StringBuilder.toString:()Ljava/lang/String;
const #18 = Method #85.#86; //
java/io/PrintStream.println:(Ljava/lang/String;)V
const #19 = long 100l;
const #21 = Method #7.#87; // java/lang/Thread.sleep:(J)V
const #22 = class #88; // java/lang/InterruptedException
const #23 = Method #22.#89; //
java/lang/InterruptedException.printStackTrace:()V
const #24 = String #90; // .myLongMethod : I will sleep for 1s
const #25 = long 1000l;
const #27 = class #91; // java/util/HashMap
const #28 = Method #27.#70; // java/util/HashMap."<init>":()V
const #29 = String #92; // .myStressingMethod : limit=
const #30 = Method #13.#93; //
java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
const #31 = class #94; // java/lang/Integer
const #32 = Method #31.#95; // java/lang/Integer."<init>":(I)V
const #33 = Method #31.#84; //
java/lang/Integer.toString:()Ljava/lang/String;
const #34 = Method #27.#96; //
java/util/HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
const #35 = Method #27.#97; // java/util/HashMap.clear:()V
const #36 = Method #40.#98; //
jlp/aspectj/test/TestingClass.myShortMethod:()V
const #37 = Method #40.#99; //
jlp/aspectj/test/TestingClass.myStressingMethod:(I)V
const #38 = Method #40.#100; //
jlp/aspectj/test/TestingClass.myLongMethod:()V
const #39 = Method #31.#101; //
java/lang/Integer.parseInt:(Ljava/lang/String;)I
const #40 = class #102; // jlp/aspectj/test/TestingClass
const #41 = String #103; // thread_
const #42 = Method #40.#104; //
jlp/aspectj/test/TestingClass."<init>":(Ljava/lang/String;I)V
const #43 = Method #7.#105; // java/lang/Thread.start:()V
const #44 = class #106; // java/lang/Object
const #45 = class #107; // java/lang/Runnable
const #46 = Asciz name;
const #47 = Asciz Ljava/lang/String;;
const #48 = Asciz running;
const #49 = Asciz Z;
const #50 = Asciz limit;
const #51 = Asciz I;
const #52 = Asciz thread;
const #53 = Asciz Ljava/lang/Thread;;
const #54 = Asciz getName;
const #55 = Asciz ()Ljava/lang/String;;
const #56 = Asciz Code;
const #57 = Asciz setName;
const #58 = Asciz (Ljava/lang/String;)V;
const #59 = Asciz <init>;
const #60 = Asciz (Ljava/lang/String;I)V;
const #61 = Asciz ()V;
const #62 = Asciz myShortMethod;
const #63 = Asciz myLongMethod;
const #64 = Asciz myStressingMethod;
const #65 = Asciz (I)V;
const #66 = Asciz run;
const #67 = Asciz main;
const #68 = Asciz ([Ljava/lang/String;)V;
const #69 = NameAndType #46:#47;// name:Ljava/lang/String;
const #70 = NameAndType #59:#61;// "<init>":()V
const #71 = Asciz ;
const #72 = NameAndType #48:#49;// running:Z
const #73 = NameAndType #50:#51;// limit:I
const #74 = Asciz java/lang/Thread;
const #75 = NameAndType #59:#108;// "<init>":(Ljava/lang/Runnable;)V
const #76 = NameAndType #52:#53;// thread:Ljava/lang/Thread;
const #77 = Asciz no_name;
const #78 = NameAndType #59:#58;// "<init>":(Ljava/lang/String;)V
const #79 = class #109; // java/lang/System
const #80 = NameAndType #110:#111;// out:Ljava/io/PrintStream;
const #81 = Asciz java/lang/StringBuilder;
const #82 = NameAndType #112:#113;//
append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
const #83 = Asciz .myShortMethod : I will sleep for 100 ms;
const #84 = NameAndType #114:#55;// toString:()Ljava/lang/String;
const #85 = class #115; // java/io/PrintStream
const #86 = NameAndType #116:#58;// println:(Ljava/lang/String;)V
const #87 = NameAndType #117:#118;// sleep:(J)V
const #88 = Asciz java/lang/InterruptedException;
const #89 = NameAndType #119:#61;// printStackTrace:()V
const #90 = Asciz .myLongMethod : I will sleep for 1s;
const #91 = Asciz java/util/HashMap;
const #92 = Asciz .myStressingMethod : limit=;
const #93 = NameAndType #112:#120;// append:(I)Ljava/lang/StringBuilder;
const #94 = Asciz java/lang/Integer;
const #95 = NameAndType #59:#65;// "<init>":(I)V
const #96 = NameAndType #121:#122;//
put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
const #97 = NameAndType #123:#61;// clear:()V
const #98 = NameAndType #62:#61;// myShortMethod:()V
const #99 = NameAndType #64:#65;// myStressingMethod:(I)V
const #100 = NameAndType #63:#61;// myLongMethod:()V
const #101 = NameAndType #124:#125;// parseInt:(Ljava/lang/String;)I
const #102 = Asciz jlp/aspectj/test/TestingClass;
const #103 = Asciz thread_;
const #104 = NameAndType #59:#60;// "<init>":(Ljava/lang/String;I)V
const #105 = NameAndType #126:#61;// start:()V
const #106 = Asciz java/lang/Object;
const #107 = Asciz java/lang/Runnable;
const #108 = Asciz (Ljava/lang/Runnable;)V;
const #109 = Asciz java/lang/System;
const #110 = Asciz out;
const #111 = Asciz Ljava/io/PrintStream;;
const #112 = Asciz append;
const #113 = Asciz (Ljava/lang/String;)Ljava/lang/StringBuilder;;
const #114 = Asciz toString;
const #115 = Asciz java/io/PrintStream;
const #116 = Asciz println;
const #117 = Asciz sleep;
const #118 = Asciz (J)V;
const #119 = Asciz printStackTrace;
const #120 = Asciz (I)Ljava/lang/StringBuilder;;
const #121 = Asciz put;
const #122 = Asciz
(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;;
const #123 = Asciz clear;
const #124 = Asciz parseInt;
const #125 = Asciz (Ljava/lang/String;)I;
const #126 = Asciz start;
{
public boolean running;
java.lang.Thread thread;
public java.lang.String getName();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: getfield #1; //Field name:Ljava/lang/String;
4: areturn
public void setName(java.lang.String);
Code:
Stack=2, Locals=2, Args_size=2
0: aload_0
1: aload_1
2: putfield #1; //Field name:Ljava/lang/String;
5: return
public jlp.aspectj.test.TestingClass(java.lang.String, int);
Code:
Stack=4, Locals=3, Args_size=3
0: aload_0
1: invokespecial #2; //Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #3; //String
7: putfield #1; //Field name:Ljava/lang/String;
10: aload_0
11: iconst_1
12: putfield #4; //Field running:Z
15: aload_0
16: ldc #5; //int 1000000
18: putfield #6; //Field limit:I
21: aload_0
22: new #7; //class java/lang/Thread
25: dup
26: aload_0
27: invokespecial #8; //Method
java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
30: putfield #9; //Field thread:Ljava/lang/Thread;
33: aload_0
34: aload_1
35: putfield #1; //Field name:Ljava/lang/String;
38: aload_0
39: iload_2
40: putfield #6; //Field limit:I
43: return
public jlp.aspectj.test.TestingClass(java.lang.String);
Code:
Stack=4, Locals=2, Args_size=2
0: aload_0
1: invokespecial #2; //Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #3; //String
7: putfield #1; //Field name:Ljava/lang/String;
10: aload_0
11: iconst_1
12: putfield #4; //Field running:Z
15: aload_0
16: ldc #5; //int 1000000
18: putfield #6; //Field limit:I
21: aload_0
22: new #7; //class java/lang/Thread
25: dup
26: aload_0
27: invokespecial #8; //Method
java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
30: putfield #9; //Field thread:Ljava/lang/Thread;
33: aload_0
34: aload_1
35: putfield #1; //Field name:Ljava/lang/String;
38: return
public jlp.aspectj.test.TestingClass();
Code:
Stack=2, Locals=1, Args_size=1
0: aload_0
1: ldc #10; //String no_name
3: invokespecial #11; //Method "<init>":(Ljava/lang/String;)V
6: return
public void myShortMethod();
Code:
Stack=3, Locals=2, Args_size=1
0: getstatic #12; //Field java/lang/System.out:Ljava/io/PrintStream;
3: new #13; //class java/lang/StringBuilder
6: dup
7: invokespecial #14; //Method java/lang/StringBuilder."<init>":()V
10: aload_0
11: getfield #1; //Field name:Ljava/lang/String;
14: invokevirtual #15; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
17: ldc #16; //String .myShortMethod : I will sleep for 100 ms
19: invokevirtual #15; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
22: invokevirtual #17; //Method
java/lang/StringBuilder.toString:()Ljava/lang/String;
25: invokevirtual #18; //Method
java/io/PrintStream.println:(Ljava/lang/String;)V
28: ldc2_w #19; //long 100l
31: invokestatic #21; //Method java/lang/Thread.sleep:(J)V
34: goto 42
37: astore_1
38: aload_1
39: invokevirtual #23; //Method
java/lang/InterruptedException.printStackTrace:()V
42: return
Exception table:
from to target type
28 34 37 Class java/lang/InterruptedException
public void myLongMethod();
Code:
Stack=3, Locals=2, Args_size=1
0: getstatic #12; //Field java/lang/System.out:Ljava/io/PrintStream;
3: new #13; //class java/lang/StringBuilder
6: dup
7: invokespecial #14; //Method java/lang/StringBuilder."<init>":()V
10: aload_0
11: getfield #1; //Field name:Ljava/lang/String;
14: invokevirtual #15; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
17: ldc #24; //String .myLongMethod : I will sleep for 1s
19: invokevirtual #15; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
22: invokevirtual #17; //Method
java/lang/StringBuilder.toString:()Ljava/lang/String;
25: invokevirtual #18; //Method
java/io/PrintStream.println:(Ljava/lang/String;)V
28: ldc2_w #25; //long 1000l
31: invokestatic #21; //Method java/lang/Thread.sleep:(J)V
34: goto 42
37: astore_1
38: aload_1
39: invokevirtual #23; //Method
java/lang/InterruptedException.printStackTrace:()V
42: return
Exception table:
from to target type
28 34 37 Class java/lang/InterruptedException
public void myStressingMethod(int);
Code:
Stack=6, Locals=4, Args_size=2
0: new #27; //class java/util/HashMap
3: dup
4: invokespecial #28; //Method java/util/HashMap."<init>":()V
7: astore_2
8: getstatic #12; //Field java/lang/System.out:Ljava/io/PrintStream;
11: new #13; //class java/lang/StringBuilder
14: dup
15: invokespecial #14; //Method java/lang/StringBuilder."<init>":()V
18: aload_0
19: getfield #1; //Field name:Ljava/lang/String;
22: invokevirtual #15; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
25: ldc #29; //String .myStressingMethod : limit=
27: invokevirtual #15; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
30: iload_1
31: invokevirtual #30; //Method
java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
34: invokevirtual #17; //Method
java/lang/StringBuilder.toString:()Ljava/lang/String;
37: invokevirtual #18; //Method
java/io/PrintStream.println:(Ljava/lang/String;)V
40: iconst_0
41: istore_3
42: iload_3
43: iload_1
44: if_icmpge 84
47: aload_2
48: new #31; //class java/lang/Integer
51: dup
52: iload_3
53: bipush 100
55: irem
56: invokespecial #32; //Method java/lang/Integer."<init>":(I)V
59: invokevirtual #33; //Method
java/lang/Integer.toString:()Ljava/lang/String;
62: new #31; //class java/lang/Integer
65: dup
66: iload_3
67: sipush 1000
70: irem
71: invokespecial #32; //Method java/lang/Integer."<init>":(I)V
74: invokevirtual #34; //Method
java/util/HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
77: pop
78: iinc 3, 1
81: goto 42
84: aload_2
85: invokevirtual #35; //Method java/util/HashMap.clear:()V
88: return
public void run();
Code:
Stack=2, Locals=1, Args_size=1
0: aload_0
1: getfield #4; //Field running:Z
4: ifeq 26
7: aload_0
8: invokevirtual #36; //Method myShortMethod:()V
11: aload_0
12: aload_0
13: getfield #6; //Field limit:I
16: invokevirtual #37; //Method myStressingMethod:(I)V
19: aload_0
20: invokevirtual #38; //Method myLongMethod:()V
23: goto 0
26: return
public static void main(java.lang.String[]);
Code:
Stack=7, Locals=3, Args_size=1
0: aload_0
1: iconst_0
2: aaload
3: invokestatic #39; //Method
java/lang/Integer.parseInt:(Ljava/lang/String;)I
6: anewarray #40; //class jlp/aspectj/test/TestingClass
9: astore_1
10: iconst_0
11: istore_2
12: iload_2
13: aload_1
14: arraylength
15: if_icmpge 68
18: aload_1
19: iload_2
20: new #40; //class jlp/aspectj/test/TestingClass
23: dup
24: new #13; //class java/lang/StringBuilder
27: dup
28: invokespecial #14; //Method java/lang/StringBuilder."<init>":()V
31: ldc #41; //String thread_
33: invokevirtual #15; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
36: iload_2
37: invokevirtual #30; //Method
java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
40: invokevirtual #17; //Method
java/lang/StringBuilder.toString:()Ljava/lang/String;
43: aload_0
44: iconst_1
45: aaload
46: invokestatic #39; //Method
java/lang/Integer.parseInt:(Ljava/lang/String;)I
49: invokespecial #42; //Method "<init>":(Ljava/lang/String;I)V
52: aastore
53: aload_1
54: iload_2
55: aaload
56: getfield #9; //Field thread:Ljava/lang/Thread;
59: invokevirtual #43; //Method java/lang/Thread.start:()V
62: iinc 2, 1
65: goto 12
68: return
}
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users