Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] How to get the enclosing class in a Pointcut

Hey, hope you get this email :)

Here is a complete program:

==== 8< ==== 8< ==== Demo.java =========
public class Demo {
  public static void main(String []argv) {
    new Demo().test();
  }

  public void test() {
    Node node = new Node();
    Handler handler = node.getObjectHandler();
    //getBoards() is the deprecated method.
    Boards boards = handler.getBoards();
  }
}

aspect X {
  pointcut deprecatedMethods() : call(public * *(..)) && @annotation(Deprecated);
  before() : deprecatedMethods() {
    System.out.println("Caller: "+thisEnclosingJoinPointStaticPart.getSignature());
    System.out.println("Called: "+thisJoinPoint.getSignature());
  }
}
==== 8< ==== 8< ==== Demo.java =========

ajc -1.8 Demo.java
java Demo

Caller: void Demo.test()
Called: Boards Handler.getBoards()

You could use a declare warning to achieve some of this but I don't think it includes the enclosing join point as a key insert right now (see declare warning in https://eclipse.org/aspectj/doc/released/README-169.html ). Using declare warning means you'd see the message at compile time and not runtime.

cheers,
Andy

On 22 September 2017 at 05:05, Mikael Petterson <mikaelpetterson@xxxxxxxxxxx> wrote:

Thx Any I really appreciated your help.


You where correct in your assumption:


"

If you want to match calls *to* deprecated methods it would be more like:

call(public * *(..)) && @annotation(Deprecated)
"


This is what I want to accomplish.


This is the structure of my maven project:


myapp

  tests

  nodes


In 'nodes' module I have a package called aspects where I have the aspect DeprecatedMethodLogger.aj

that I will 'weave' into the classes of nodes module.

Under tests I have Demo class to trigger deprecated method call, getBoards(), that is in nodes. This is for testing purposes.

Later on there will be calls not in myapp, but outside, that will make calls to deprecated methods in nodes module.


Demo.java


public class Demo extends Test{

    @Test
    public void test() {
      Node node = new Node();
      Handler handler = node.getObjectHandler();
      //getBoards() is the deprecated method.
      Boards boards = handler.getBoards();
      
 
    }
}



DeprecatedMethodLogger.aj


pointcut deprecatedMethods() : call(public * *(..)) && @annotation(Deprecated);


before() : deprecatedMethods() {
       log("[Deprecated Method Usage]" +thisEnclosingJoinPointStaticPart.getSignature().getDeclaringTypeName()+" --> "+"\n");             
    }


This will print the 'Handler' class that calls the method getBoards() which is deprecated. I want:


Caller:  Demo.test()

Called: Handler.getBoards()


What am I lacking?


br,


//mikael


 

 




Från: aspectj-users-bounces@eclipse.org <aspectj-users-bounces@eclipse.org> för Mikael Petterson <mikaelpetterson@xxxxxxxxxxx>
Skickat: den 21 september 2017 11:35
Till: Frank Pavageau; aspectj-users@xxxxxxxxxxx

Ämne: Re: [aspectj-users] How to get the enclosing class in a Pointcut
 

Thx!


I got your reply but why did I not get his? Do I need to make any changes to get them?


br,


//mike


 

 




Från: Frank Pavageau <frank.pavageau@xxxxxxxxx>
Skickat: den 21 september 2017 07:54
Till: aspectj-users@xxxxxxxxxxx; Mikael Petterson
Ämne: Re: [aspectj-users] How to get the enclosing class in a Pointcut
 
2017-09-21 9:46 GMT+02:00 Mikael Petterson <mikaelpetterson@xxxxxxxxxxx>:

So no input on this one?

Yes, Andy answered on the list itself : https://dev.eclipse.org/mhonarc/lists/aspectj-users/msg15087.html

Regards,
Frank



Back to the top