This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
The following commit(s) were added to refs/heads/master by this push: new 5995e86 OWB-1302 ensure produceWith works in bean configurator - ensure it can get enclosing InjectionPoint 5995e86 is described below commit 5995e86e0a1f831d61539a62d04a1614b097e77f Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Mon Nov 18 17:09:55 2019 +0100 OWB-1302 ensure produceWith works in bean configurator - ensure it can get enclosing InjectionPoint --- .../webbeans/portable/InjectionPointProducer.java | 4 ++- .../test/portable/events/PortableAddBeanTest.java | 33 ++++++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionPointProducer.java b/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionPointProducer.java index 9f1866f..633375c 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionPointProducer.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionPointProducer.java @@ -35,6 +35,7 @@ import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.InjectionPoint; import javax.enterprise.inject.spi.Interceptor; +import org.apache.webbeans.component.InjectionPointBean; import org.apache.webbeans.component.third.ThirdpartyBeanImpl; import org.apache.webbeans.context.creational.CreationalContextImpl; import org.apache.webbeans.util.ClassUtil; @@ -60,7 +61,8 @@ public class InjectionPointProducer extends AbstractProducer<InjectionPoint> InjectionPoint injectionPoint; if (!InjectionPoint.class.isAssignableFrom(ClassUtil.getClass(first.getType()))) { - if (!ThirdpartyBeanImpl.class.isInstance(creationalContextImpl.getBean())) + if (!ThirdpartyBeanImpl.class.isInstance(creationalContextImpl.getBean()) && + !InjectionPointBean.class.isInstance(creationalContextImpl.getBean())) { throw new IllegalStateException("Inconsistent injection point stack"); } diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/events/PortableAddBeanTest.java b/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/events/PortableAddBeanTest.java index ba70b67..75b0d77 100644 --- a/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/events/PortableAddBeanTest.java +++ b/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/events/PortableAddBeanTest.java @@ -19,7 +19,9 @@ package org.apache.webbeans.test.portable.events; import static java.util.Collections.emptyList; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import java.util.ArrayList; @@ -28,7 +30,11 @@ import java.util.Collection; import javax.enterprise.context.Dependent; import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AfterBeanDiscovery; +import javax.enterprise.inject.spi.BeanManager; +import javax.enterprise.inject.spi.BeforeBeanDiscovery; import javax.enterprise.inject.spi.Extension; +import javax.enterprise.inject.spi.InjectionPoint; +import javax.inject.Inject; import org.junit.Assert; @@ -62,20 +68,41 @@ public class PortableAddBeanTest extends AbstractUnitTest final MyBean myBean = new MyBean(); addExtension(new Extension() { - public void addBean(@Observes AfterBeanDiscovery event) + void addType(@Observes BeforeBeanDiscovery beforeBeanDiscovery) + { + beforeBeanDiscovery.addAnnotatedType(Injected.class, Injected.class.getName()); + } + + void addBean(@Observes AfterBeanDiscovery event) { event.addBean() .scope(Dependent.class) .addTypes(MyBean.class, Object.class) .beanClass(MyBean.class) - .produceWith(i -> myBean); + .produceWith(i -> { + assertNull(myBean.ip); + myBean.ip = i.select(InjectionPoint.class).get(); + return myBean; + }); } }); startContainer(emptyList(), emptyList()); - assertSame(myBean, getInstance(MyBean.class)); + + final Injected instance = getInstance(Injected.class); + assertSame(myBean, instance.bean); + assertNotNull(instance.bean.ip); + assertEquals(MyBean.class, instance.bean.ip.getType()); + assertEquals("bean", instance.bean.ip.getMember().getName()); + } + + public static class Injected + { + @Inject + private MyBean bean; } public static class MyBean { + private InjectionPoint ip; } }