]
Antoine Sabot-Durand commented on CDI-484:
------------------------------------------
I think we could merge with feature with CDI-558. Decorating an existing metadata could be
done with a read() method taking the metadata type.
Provide forwarding implementations of SPI interfaces
----------------------------------------------------
Key: CDI-484
URL:
https://issues.jboss.org/browse/CDI-484
Project: CDI Specification Issues
Issue Type: Feature Request
Components: Portable Extensions
Affects Versions: 1.2.Final
Reporter: Jozef Hartinger
Fix For: 2.0 (discussion)
The decorator design pattern is commonly used in CDI extensions to modify existing
metadata by wrapping it with a wrapper implementation that overrides certain method. This
can be done in the following callbacks: ProcessAnnotatedType, ProcessProducer,
ProcessInjectionTarget, ProcessInjectionPoint and ProcessBeanAttributes.
In order to do this it is often very convenient to have a forwarding implementation
available, e.g.:
{code:JAVA}
void wrap(@Observes ProcessAnnotatedType<Foo> event) {
final AnnotatedType<Foo> delegate = event.getAnnotatedType();
event.setAnnotatedType(new ForwardingAnnotatedType<Foo>(delegate) {
@Override
public <A extends Annotation> A getAnnotation(Class<A>
annotationType) {
return null;
}
@Override
public Set<Annotation> getAnnotations() {
return Collections.emptySet();
}
@Override
public boolean isAnnotationPresent(Class<? extends Annotation>
annotationType) {
return false;
}
}
{code}
We should consider providing these utility forwarding implementations as part of the CDI
API. This is similar to e.g. Servlet specification doing this for their decorable APIs
(
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/Htt...)