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,


You seem to be the only one answering my questions ;-) Thx!



[Mikael]This is what I have for my maven project that I configured as a Aspect project. Here it seems like something is lacking. Is it possible to add it to the .project file manually?

My aspect is in a new package in our product.


"You can configure the AspectJ compiler properties to show eclipse info message for AspectJ weave info messages."


This is what is set under Preferences menu.



[Mikael] Since we are not always building inside Eclipse we need to use maven.


br,


//Mike

 

 




Från: Andy Clement <andrew.clement@xxxxxxxxx>
Skickat: den 26 september 2017 16:46
Till: Mikael Petterson
Kopia: aspectj-users@xxxxxxxxxxx
Ämne: Re: [aspectj-users] How to get the enclosing class in a Pointcut
 
If imported as a maven project the AJDT Configurator should kick in and configure the project correctly. Look in the project properties > builders, is it using AspectJ to build?

You can configure the AspectJ compiler properties to show eclipse info message for AspectJ weave info messages. That should tell you if it is actually weaving. Not sure why you need to run the ‘mvn clean compile’ in eclipse if the correct builder is building the project for you.  Maybe I’d like at where the output files are going, all to the right output folder?  If you are compile time weaving and not loadtime weaving running the tests should be just like for any other java project.

cheers,
Andy

On Sep 25, 2017, at 9:58 PM, Mikael Petterson <mikaelpetterson@xxxxxxxxxxx> wrote:

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.
It is now possible to ITD member types. The syntax is as would be expected. This example introduces a new member type called Inner into type Foo: public class Foo ...

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