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

Hi Andy!


Yes now I got the message 😊


I have exactly the same code. I think it has something to do with the compile and execution of my test case. I can see that ajc i done:


aspectj-maven-plugin:1.10:compile (compile_with_aspectj) @ resource-manager ---
[INFO] Showing AJC message detail for messages of types: [error, warning, fail]
[WARNING] invalid Class-Path header in manifest of jar file: /repo/eraonel/.m2/repository/org/restlet/jse/org.restlet/2.3.3/org.restlet-2.3.3.jar
invalid Class-Path header in manifest of jar file: /repo/eraonel/.m2/repository/org/uncommons/maths/uncommons-maths/1.2.2a/uncommons-maths-1.2.2a.jar
    <unknown source file>:<no line information>

[INFO] Join point 'method-call(......)

However when I try to execute my test case I try to do it within Eclipse.
I have a 'Run configuration'  for m2build making:

mvn clean compile

Then I have another 'Run configuration', testng,  for my Demo test.

I execute it using a suite file that I have pointed out in Eclipse.

Is there anything that is different if I execute from within Eclipse?

br,

//mikael


 

 




Från: Andy Clement <andrew.clement@xxxxxxxxx>
Skickat: den 22 september 2017 16:52
Till: Mikael Petterson
Kopia: aspectj-users@xxxxxxxxxxx
Ämne: 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