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