rmannibucau commented on a change in pull request #28:
URL: https://github.com/apache/openwebbeans/pull/28#discussion_r439796451



##########
File path: 
webbeans-junit5/src/main/java/org/apache/openwebbeans/junit5/internal/CdiExtension.java
##########
@@ -172,4 +182,76 @@ private void doClose(final SeContainer container)
             }
         });
     }
+
+    private Cdi getCdiConfig(ExtensionContext extensionContext)
+    {
+        return AnnotationUtils.findAnnotation(extensionContext.getElement(), 
Cdi.class).orElse(null);
+    }
+
+    private SeContainer getContainer()
+    {
+        if (testInstanceContainer != null)
+        {
+            return testInstanceContainer;
+        }
+        else
+        {
+            return reusableContainer;
+        }
+    }
+
+    @Override
+    public boolean supportsParameter(ParameterContext parameterContext, 
ExtensionContext extensionContext)
+            throws ParameterResolutionException
+    {
+        final Cdi config = 
extensionContext.getParent().map(this::getCdiConfig).orElse(null);
+        if (config == null || !config.injectParameters())
+        {
+            return false;
+        }
+
+        final SeContainer container = getContainer();
+        if (container == null)
+        {
+            return false;
+        }
+
+        Bean<?> bean = resolveParameterBean(container, parameterContext, 
extensionContext);
+        return bean != null;
+    }
+
+    @Override
+    public Object resolveParameter(ParameterContext parameterContext, 
ExtensionContext extensionContext)
+            throws ParameterResolutionException
+    {
+        final SeContainer container = getContainer();
+        if (container == null)
+        {
+            return false;
+        }
+
+        Bean<?> bean = resolveParameterBean(container, parameterContext, 
extensionContext);
+        BeanManager beanManager = container.getBeanManager();
+        CreationalContext<?> creationalContext = 
beanManager.createCreationalContext(bean);
+        creationalContexts.add(creationalContext);
+        return beanManager.getReference(bean, 
parameterContext.getParameter().getType(), creationalContext);
+    }
+
+    private Bean<?> resolveParameterBean(SeContainer container, 
ParameterContext parameterContext, ExtensionContext extensionContext)
+    {
+        BeanManager beanManager = container.getBeanManager();
+        Set<Bean<?>> beans = beanManager.getBeans(
+                parameterContext.getParameter().getType(),
+                getQualifiers(parameterContext.getParameter()));
+        return beanManager.resolve(beans);

Review comment:
       I would just put a HashMap in the store of the extensioncontext and 
clear it in afterClass. Will save the resolution and array/qualifier setup (key 
is the type+annotations with a cached hashCode like 
https://github.com/apache/openwebbeans/blob/b3b9cb800da3d366b1d0df8111a530190cd3a0c7/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanCacheKey.java#L77).
   
   side note: you can also go to the bean instantation in supports since it 
will also check the context availability and if a context not active exception 
is thrown we should log it probably and ignore the bean - or fail, I'm not yet 
sure, wdyt?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to