You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ta...@apache.org on 2018/10/16 15:08:55 UTC

svn commit: r1844018 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: annotation/AnnotationManager.java config/BeansDeployer.java

Author: tandraschko
Date: Tue Oct 16 15:08:55 2018
New Revision: 1844018

URL: http://svn.apache.org/viewvc?rev=1844018&view=rev
Log:
OWB-1265

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java?rev=1844018&r1=1844017&r2=1844018&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java Tue Oct 16 15:08:55 2018
@@ -61,6 +61,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
 
 /**
  * Manages annotation usage by classes in this application.
@@ -72,6 +73,9 @@ public final class AnnotationManager
     private Map<Class<? extends Annotation>, Boolean> checkedStereotypeAnnotations =
         new ConcurrentHashMap<>();
 
+    private CopyOnWriteArraySet<Class<?>> repeatableMethodCheckedTypes = new CopyOnWriteArraySet<>();
+    private Map<Class<?>, Method> repeatableMethodCache = new ConcurrentHashMap<>();
+
     private final BeanManagerImpl beanManagerImpl;
     private final WebBeansContext webBeansContext;
 
@@ -929,9 +933,30 @@ public final class AnnotationManager
             }
         }
     }
+    
+    public void clearStartupCache()
+    {
+        repeatableMethodCheckedTypes.clear();
+        repeatableMethodCache.clear();
+    }
 
     public Method getRepeatableMethod(Class<?> type)
     {
+        if (repeatableMethodCheckedTypes.contains(type))
+        {
+            return repeatableMethodCache.get(type);
+        }
+
+        Method method = resolveRepeatableMethod(type);
+        
+        repeatableMethodCheckedTypes.add(type);
+        repeatableMethodCache.put(type, method);
+        
+        return method;
+    }
+        
+    protected Method resolveRepeatableMethod(Class<?> type)
+    {
         Method value;
         try
         {
@@ -953,4 +978,6 @@ public final class AnnotationManager
         }
         return value;
     }
+    
+    
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1844018&r1=1844017&r2=1844018&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java Tue Oct 16 15:08:55 2018
@@ -330,6 +330,7 @@ public class BeansDeployer
                 validateNames();
 
                 webBeansContext.getNotificationManager().clearCaches();
+                webBeansContext.getAnnotationManager().clearStartupCache();
 
                 if (webBeansContext.getNotificationManager().getObserverMethods().stream()
                         .anyMatch(ObserverMethod::isAsync))