[JBoss JIRA] (CDI-484) Provide forwarding implementations of SPI interfaces
by Antoine Sabot-Durand (JIRA)
[ https://issues.jboss.org/browse/CDI-484?page=com.atlassian.jira.plugin.sy... ]
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...)
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)