Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Type patterns & values of annotation properties?

Ok, cool.  I'll enter an enhancement request for "!" notation.  It
seems like that would apply universally.

As for "+" notation, that would be a special case for when the type of
the annotation's property is java.lang.Class.  What do you think of
supporting "+" in those cases where this is true?  I would expect
either a vanilla non-match if the annotation property were not of type
java.lang.Class.  You could, however, go so far as to fail to compile,
since these things are all known at compile time.

-matthew

On Tue, Sep 6, 2011 at 3:40 PM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
> Hi Matthew,
>
>> Can type patterns match on values of properties of annotations?
>
> Yes, *but* there is a bug (uncovered in the other thread in the
> mailing list today) where '.class' is tripping up the pattern parser
> in AspectJ.  So this is fine:
>
> @interface Foo {
>   int x();
> }
>
> declare @field: @Foo(x=3) * *: @Bar;
>
> But you can't use 'Class x()' and then '@Foo(x=String.class)' in your
> type pattern.  I'm just debugging it now, think I see what it is - I
> guess no-one has ever
> tried it for class type values.
>
>> declare parents:
>>  (@Foo(clazz=Number+) *)
>>  implements Fooable<Integer>;
>
> Don't think this is going to work, even after I fix the above.
>
> So:
>> Can I write a type pattern that matches for Thingy but not Stringy
>> based only on the value of the "@Foo" annotation's "clazz" property?
>
> Yes,
>
> declare @type: @Foo(clazz=Long.class) *: @Bar;
>
> We could support, I imagine:
>
> declare @type: @Foo(clazz!=Long.class) *: @Bar;
>
> but we don't right now.
>
> cheers
> Andy
>
> On 6 September 2011 12:47, Matthew Adams <matthew@xxxxxxxxxxxxxxx> wrote:
>>
>> For example, given this ITD & classes:
>>
>> declare parents:
>>  (@Foo(clazz=Number+) *)
>>  implements Fooable<Integer>;
>>
>> @Foo(clazz=Long.class)
>> public class Thingy {}
>>
>> @Foo(clazz=String.class)
>> public class Stringy {}
>>
>> Can I write a type pattern that matches for Thingy but not Stringy
>> based only on the value of the "@Foo" annotation's "clazz" property?
>>
>> -matthew
>>
>> --
>> @matthewadams12
>> mailto:matthew@xxxxxxxxxxxxxxx
>> skype:matthewadams12
>> yahoo:matthewadams
>> aol:matthewadams12
>> google-talk:matthewadams12@xxxxxxxxx
>> msn:matthew@xxxxxxxxxxxxxxx
>> http://matthewadams.me
>> http://www.linkedin.com/in/matthewadams
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>



-- 
@matthewadams12
mailto:matthew@xxxxxxxxxxxxxxx
skype:matthewadams12
yahoo:matthewadams
aol:matthewadams12
google-talk:matthewadams12@xxxxxxxxx
msn:matthew@xxxxxxxxxxxxxxx
http://matthewadams.me
http://www.linkedin.com/in/matthewadams


Back to the top