From a656db287c0b921f713d7333c9b9284997c79c15 Mon Sep 17 00:00:00 2001 From: Matej Novotny Date: Tue, 3 Oct 2023 20:19:05 +0200 Subject: [PATCH] WELD-2761 Fix BeanManager not returning empty set if there are no contexts for given scope via getContexts() methods --- .../jboss/weld/manager/BeanManagerImpl.java | 3 ++- .../tests/contexts/retrieval/CustomScope.java | 19 +++++++++++++++++++ .../retrieval/WeldManagerGetContextsTest.java | 4 ++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests-arquillian/src/test/java/org/jboss/weld/tests/contexts/retrieval/CustomScope.java diff --git a/impl/src/main/java/org/jboss/weld/manager/BeanManagerImpl.java b/impl/src/main/java/org/jboss/weld/manager/BeanManagerImpl.java index f653890188..c7517058fd 100644 --- a/impl/src/main/java/org/jboss/weld/manager/BeanManagerImpl.java +++ b/impl/src/main/java/org/jboss/weld/manager/BeanManagerImpl.java @@ -658,7 +658,8 @@ public Context getContext(Class scopeType) { @Override public Collection getContexts(Class scopeType) { - return Collections.unmodifiableList(contexts.get(scopeType)); + List found = this.contexts.get(scopeType); + return found != null ? Collections.unmodifiableList(found) : Collections.EMPTY_LIST; } public Context getUnwrappedContext(Class scopeType) { diff --git a/tests-arquillian/src/test/java/org/jboss/weld/tests/contexts/retrieval/CustomScope.java b/tests-arquillian/src/test/java/org/jboss/weld/tests/contexts/retrieval/CustomScope.java new file mode 100644 index 0000000000..99b2be8b40 --- /dev/null +++ b/tests-arquillian/src/test/java/org/jboss/weld/tests/contexts/retrieval/CustomScope.java @@ -0,0 +1,19 @@ +package org.jboss.weld.tests.contexts.retrieval; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import jakarta.enterprise.context.NormalScope; + +@NormalScope +@Inherited +@Target({ TYPE, METHOD, FIELD }) +@Retention(RUNTIME) +public @interface CustomScope { +} diff --git a/tests-arquillian/src/test/java/org/jboss/weld/tests/contexts/retrieval/WeldManagerGetContextsTest.java b/tests-arquillian/src/test/java/org/jboss/weld/tests/contexts/retrieval/WeldManagerGetContextsTest.java index cd314ce4c1..b1e16d3aab 100644 --- a/tests-arquillian/src/test/java/org/jboss/weld/tests/contexts/retrieval/WeldManagerGetContextsTest.java +++ b/tests-arquillian/src/test/java/org/jboss/weld/tests/contexts/retrieval/WeldManagerGetContextsTest.java @@ -49,5 +49,9 @@ public void testContextObjectRetrieval() { contexts = weldManager.getContexts(RequestScoped.class); Assert.assertEquals(4, contexts.size()); Assert.assertEquals(1, contexts.stream().filter(c -> c.isActive()).count()); + + // try to get contexts for scope that has none registered + contexts = weldManager.getContexts(CustomScope.class); + Assert.assertEquals(0, contexts.size()); } }