diff --git a/impl/src/main/java/org/jboss/weld/event/ObserverMethodImpl.java b/impl/src/main/java/org/jboss/weld/event/ObserverMethodImpl.java index f65eac2723..2a07863d72 100644 --- a/impl/src/main/java/org/jboss/weld/event/ObserverMethodImpl.java +++ b/impl/src/main/java/org/jboss/weld/event/ObserverMethodImpl.java @@ -32,7 +32,7 @@ import jakarta.enterprise.inject.Disposes; import jakarta.enterprise.inject.Instance; import jakarta.enterprise.inject.Produces; -import jakarta.enterprise.inject.spi.BeanManager; +import jakarta.enterprise.inject.spi.BeanContainer; import jakarta.enterprise.inject.spi.EventMetadata; import jakarta.enterprise.inject.spi.ObserverMethod; import jakarta.enterprise.inject.spi.WithAnnotations; @@ -234,7 +234,7 @@ private void checkObserverMethod(EnhancedAnnotatedMethod annotated) { // if this is an observer method for container lifecycle event, it must not inject anything besides BeanManager if (containerLifecycleObserverMethod && !parameter.isAnnotationPresent(Observes.class) && !parameter.isAnnotationPresent(ObservesAsync.class) - && !BeanManager.class.equals(parameter.getBaseType())) { + && !parameter.getTypeClosure().contains(BeanContainer.class)) { throw EventLogger.LOG.invalidInjectionPoint(this, Formats.formatAsStackTraceElement(annotated.getJavaMember())); } } diff --git a/tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/ExtensionTest.java b/tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/ExtensionTest.java index b7b4cd4eec..75bd6450c8 100644 --- a/tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/ExtensionTest.java +++ b/tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/ExtensionTest.java @@ -52,6 +52,14 @@ public void testExtensionInjectableAsBean(SimpleExtension extension) { assertTrue(extension.isObservedBeforeBeanDiscovery()); } + @Test + public void testBeanManagerInjectionAsOptionalParam() { + assertTrue(SimpleExtension.observedBeforeBeanDiscoveryBc); + assertTrue(SimpleExtension.observedBeforeBeanDiscoveryBm); + assertTrue(SimpleExtension.observedBeforeBeanDiscoveryWm); + assertTrue(SimpleExtension.observedBeforeBeanDiscoveryElBm); + } + /* * description = "WELD-572" */ diff --git a/tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/SimpleExtension.java b/tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/SimpleExtension.java index bd40db5d3d..83879caa31 100644 --- a/tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/SimpleExtension.java +++ b/tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/SimpleExtension.java @@ -17,26 +17,54 @@ package org.jboss.weld.tests.extensions; import jakarta.enterprise.event.Observes; +import jakarta.enterprise.inject.spi.BeanContainer; import jakarta.enterprise.inject.spi.BeanManager; import jakarta.enterprise.inject.spi.BeforeBeanDiscovery; import jakarta.enterprise.inject.spi.BeforeShutdown; import jakarta.enterprise.inject.spi.Extension; +import jakarta.enterprise.inject.spi.el.ELAwareBeanManager; + +import org.jboss.weld.manager.api.WeldManager; public class SimpleExtension implements Extension { private static boolean observedBeforeBeanDiscovery; - - public void observe(@Observes BeforeBeanDiscovery event) { - observedBeforeBeanDiscovery = true; - } + public static boolean observedBeforeBeanDiscoveryBc; + public static boolean observedBeforeBeanDiscoveryBm; + public static boolean observedBeforeBeanDiscoveryWm; + public static boolean observedBeforeBeanDiscoveryElBm; public static boolean isObservedBeforeBeanDiscovery() { return observedBeforeBeanDiscovery; } - public void observeBeforeShutdown(@Observes BeforeShutdown beforeShutdown, BeanManager beanManager) { + public void observeBeforeShutdown(@Observes BeforeShutdown beforeShutdown, WeldManager beanManager) { assert beanManager != null; assert beanManager.getELResolver() != null; } + public void observeBeanManager(@Observes BeforeBeanDiscovery event) { + observedBeforeBeanDiscovery = true; + } + + public void observeBeanManager(@Observes BeforeBeanDiscovery event, BeanManager bm) { + observedBeforeBeanDiscoveryBm = true; + assert bm != null; + } + + public void observeBeanManager(@Observes BeforeBeanDiscovery event, BeanContainer bc) { + observedBeforeBeanDiscoveryBc = true; + assert bc != null; + } + + public void observeBeanManager(@Observes BeforeBeanDiscovery event, WeldManager wm) { + observedBeforeBeanDiscoveryWm = true; + assert wm != null; + } + + public void observeBeanManager(@Observes BeforeBeanDiscovery event, ELAwareBeanManager bm) { + observedBeforeBeanDiscoveryElBm = true; + assert bm != null; + } + }