Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-dev] NPE with @args

Right.... last spam from me on this....  I've looked at the bug report
and can see a failure when the program is in a package.

However, I should have said in the first place that you cannot do
parameter annotation matching with @args(), that is for matching an
annotation on the type of the parameter.

@Foo
class MyAnnotatedType {}

public void m(MyAnnotatedType mat) {}

execution(* *.m(..)) && @args(Foo) // will match m

The only way to match parameter annotations is to use the syntax I
showed earlier:

public void m(MyAnnotatedType mat) {}
public void m2(@Foo String s) {}

execution(* *.m*(@Foo (*)))  // will only match m2

For more information, see the 1.6.0 readme:
http://www.eclipse.org/aspectj/doc/released/README-160.html


Andy.

2008/12/7 Andy Clement <andrew.clement@xxxxxxxxx>:
> Actually... are you sure you are weaving just the place you want to?
> Your pointcut is likely to pick out all constructors then add a
> dynamic test for the annotation, if you do it using @args().  Do
> either the AJDT gutter annotations or -showWeaveInfo messages show
> more than you would expect to see?
>
> If you do raise a but, please include a full failing test program if
> you can - thanks!
>
> Andy.
>
> 2008/12/7 Andy Clement <andrew.clement@xxxxxxxxx>:
>> Hi Oliver,
>>
>> As Eric says, raise a bug for that.  Although wouldn't you be better
>> off with static matching of that annotation?
>>
>> execution(*.new(@NotNull (*)))
>>
>> cheers,
>> Andy.
>>
>> 2008/12/7 Oliver Böhm <boehm@xxxxxxxxxx>:
>>> Hello,
>>>
>>> I defined a @NotNull annotation to protect in the first step constructors
>>> like this:
>>>
>>>    public NotNullTest(@NotNull String s) {
>>>        ...
>>>    }
>>>
>>> I defined the following pointcut and (empty) advice:
>>>
>>>    pointcut ctorWithNotNullArg() :
>>>        execution(*..*.new(*)) && @args(NotNull);
>>>
>>>    before() : ctorWithNotNullArg() {
>>>        // empty
>>>    }
>>>
>>> When I call the NotNullTest constructor with a null string I get a
>>> NullPointerException pointing direct to the first line of the constructor:
>>>
>>> java.lang.NullPointerException
>>>    at patterntesting.check.runtime.NotNullTest.<init>(NotNullTest.java:48)
>>>    at
>>> patterntesting.check.runtime.NotNullTest.testCtorNotNullArg(NotNullTest.java:76)
>>>    ...
>>>
>>> I don't understand why I got a NPE here. When I use "args(String)" instead
>>> of "@args(NotNull)" it works normal. Is this behaviour a known bug or did I
>>> something wrong?
>>>
>>> regards
>>> Oliver
>>> --
>>> Oliver Böhm
>>> http://www.javatux.de
>>> _______________________________________________
>>> aspectj-dev mailing list
>>> aspectj-dev@xxxxxxxxxxx
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>>>
>>
>


Back to the top