[weld-dev] Abstract decorators

Marius Bogoevici mariusb at redhat.com
Fri Nov 20 10:54:26 EST 2009


Gavin King wrote:
> Nono, that's wrong. I think what should really happen is this:
>
> = Abstract method annotated @Inject, @PostConstruct or @PreDestroy
> results in a DE
>   
That's pretty much what I thought as well - but I missed @PostConstruct 
and @PreDestroy.
> = Other abstract methods have a generated impl that simply calls the
> same method on the delegate (and returns the result)
>   
Actually, we could just ignore the method (as if it wasn't defined at 
all) if it is abstract and think the whole problem in terms of 
decorating method *implementations*. I don't know why exactly would 
someone add something like this (hence my original thought that we could 
just signal this as an error), but perhaps if one uses a Decorator 
hierarchy it makes sense (then there's the question why you would want 
to do that, but I think we're just looking for closure wrt spec 
consistency, not best practices).
> Does that make sense?
>   
So after what I wrote above, a *no* at this point would be insane :D
> On Fri, Nov 20, 2009 at 9:30 AM, Gavin King <gavin.king at gmail.com> wrote:
>   
>> We could say that annotating an abstract method of a decorator with
>> @Inject is a DE. Same for @PostConstruct and @PreDestroy.
>> Alternatively, we could just say that the container ignores them,
>> which seems to be more or less what happens if they are declared on an
>> abstract bean.
>>
>> What the spec definitely needs to do is say that if an abstract method
>> of a decorator is called at runtime, an UnsupportedOperationException
>> results. This is a big oversight.
>>
>> On Fri, Nov 20, 2009 at 3:19 AM, Marius Bogoevici <mariusb at redhat.com> wrote:
>>     
>>> The specification allows for decorators to be abstract classes, but this
>>> is currently not supported in Weld (defect WELD-298).
>>>
>>> Since allowing decorator classes to be abstract is the only stated
>>> requirement, here are the general lines I think we should follow for
>>> supporting this:
>>>
>>> - abstract decorator classes can have injected fields, injected
>>> constructor parameters and concrete initializer methods, but abstract
>>> initializer methods should be forbidden (DefinitionException), or at the
>>> very least be non-portable.
>>> - abstract decorator classes cannot have abstract  decorating methods
>>> (DefinitionException)
>>>
>>> WDYT?
>>>
>>> Marius
>>>
>>> _______________________________________________
>>> weld-dev mailing list
>>> weld-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/weld-dev
>>>
>>>       
>>
>> --
>> Gavin King
>> gavin.king at gmail.com
>> http://in.relation.to/Bloggers/Gavin
>> http://hibernate.org
>> http://seamframework.org
>>
>>     
>
>
>
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/weld-dev/attachments/20091120/0b5b07f1/attachment-0001.html 


More information about the weld-dev mailing list