Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] LTW : thisJoinPoint.getStaticPart().getSourceLocation().getLine() always returns 0

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 <jean-louis.pasturel@xxxxxxxxx> 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 = name;

    }

    public TestingClass(String name, int limit) {
        this.name = name;
        this.limit = limit;
    }

    public TestingClass(String name) {
        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
aspectj-users@xxxxxxxxxxx
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
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users




_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
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

}


Back to the top