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]> 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 
> [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]
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to