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@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@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@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/weld-dev

      

--
Gavin King
gavin.king@gmail.com
http://in.relation.to/Bloggers/Gavin
http://hibernate.org
http://seamframework.org