This is an automated email from the ASF dual-hosted git repository. struberg pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
commit d5c77a8e7b980cae8f1bc824bfb34a7290dde021 Author: Mark Struberg <[email protected]> AuthorDate: Mon Dec 13 10:40:15 2021 +0100 OWB-1397 javax.inject.Scope scopes are not Bean Defining Annotations --- .../corespi/scanner/AbstractMetaDataDiscovery.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java index 777abc4..4ca7624 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java @@ -43,6 +43,7 @@ import org.apache.xbean.finder.filter.Filter; import org.apache.xbean.finder.util.Files; import javax.decorator.Decorator; +import javax.enterprise.context.Dependent; import javax.interceptor.Interceptor; import java.io.File; @@ -68,6 +69,11 @@ public abstract class AbstractMetaDataDiscovery implements BdaScannerService public static final String META_INF_BEANS_XML = "META-INF/beans.xml"; + // via constant to also adopt to shading. + private static final String DEPENDENT_CLASS = Dependent.class.getName(); + + private Map<String, Boolean> annotationCache = new HashMap<>(); + private BeanArchiveService beanArchiveService; /** @@ -364,6 +370,7 @@ public abstract class AbstractMetaDataDiscovery implements BdaScannerService finder = null; archive = null; loader = null; + annotationCache.clear(); } @@ -568,16 +575,22 @@ public abstract class AbstractMetaDataDiscovery implements BdaScannerService { String annotationName = annotationInfo.getName(); - // TODO add caches + Boolean isBeanAnnotation = annotationCache.get(annotationName); + if (isBeanAnnotation != null) + { + return isBeanAnnotation; + } try { Class<? extends Annotation> annotationType = (Class<? extends Annotation>) WebBeansUtil.getCurrentClassLoader().loadClass(annotationName); - boolean isBeanAnnotation = webBeansContext().getBeanManagerImpl().isScope(annotationType); + + isBeanAnnotation = DEPENDENT_CLASS.equals(annotationName) || webBeansContext().getBeanManagerImpl().isNormalScope(annotationType); if (!isBeanAnnotation) { isBeanAnnotation = webBeansContext().getBeanManagerImpl().isStereotype(annotationType); } + annotationCache.put(annotationName, isBeanAnnotation); return isBeanAnnotation; }
