[JBoss JIRA] (CDI-484) Provide forwarding implementations of SPI interfaces
by Jozef Hartinger (JIRA)
Jozef Hartinger created CDI-484:
-----------------------------------
Summary: 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...)
--
This message was sent by Atlassian JIRA
(v6.3.1#6329)