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?

On 6 September 2011 14:20, Matthew Adams <matthew@xxxxxxxxxxxxxxx> wrote:
> Ok, cool.  I'll enter an enhancement request for "!" notation.  It
> seems like that would apply universally.

I've just committed support for the != notation with annotation values
(https://bugs.eclipse.org/bugs/show_bug.cgi?id=357013)

> 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.

If a bugzilla is raised and it gets enough interest, I would look to support it.

cheers
Andy


> 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
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top