[webbeans-commits] Webbeans SVN: r2385 - ri/trunk/impl/src/main/java/org/jboss/webbeans/resources.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Fri Apr 10 08:08:49 EDT 2009


Author: pete.muir at jboss.org
Date: 2009-04-10 08:08:49 -0400 (Fri, 10 Apr 2009)
New Revision: 2385

Modified:
   ri/trunk/impl/src/main/java/org/jboss/webbeans/resources/ClassTransformer.java
Log:
Cache creation of annotated classes

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resources/ClassTransformer.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resources/ClassTransformer.java	2009-04-10 10:59:44 UTC (rev 2384)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resources/ClassTransformer.java	2009-04-10 12:08:49 UTC (rev 2385)
@@ -1,24 +1,55 @@
 package org.jboss.webbeans.resources;
 
 import java.lang.annotation.Annotation;
+import java.util.concurrent.Callable;
 
 import org.jboss.webbeans.bootstrap.api.Service;
 import org.jboss.webbeans.introspector.AnnotatedAnnotation;
 import org.jboss.webbeans.introspector.AnnotatedClass;
 import org.jboss.webbeans.introspector.jlr.AnnotatedAnnotationImpl;
 import org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl;
+import org.jboss.webbeans.util.collections.ConcurrentCache;
 
 public class ClassTransformer implements Service 
 {
    
-   public <T> AnnotatedClass<T> classForName(Class<T> clazz)
+   private final ConcurrentCache<Class<?>, AnnotatedClass<?>> classes;
+   private final ConcurrentCache<Class<?>, AnnotatedAnnotation<?>> annotations;
+   private final ClassTransformer transformer = this;
+   
+   /**
+    * 
+    */
+   public ClassTransformer()
    {
-      return AnnotatedClassImpl.of(clazz, this);
+      classes = new ConcurrentCache<Class<?>, AnnotatedClass<?>>();
+      annotations = new ConcurrentCache<Class<?>, AnnotatedAnnotation<?>>();
    }
    
-   public <T extends Annotation> AnnotatedAnnotation<T> classForName(Class<T> clazz)
+   public <T> AnnotatedClass<T> classForName(final Class<T> clazz)
    {
-      return AnnotatedAnnotationImpl.of(clazz, this);
+      return classes.putIfAbsent(clazz, new Callable<AnnotatedClass<T>>()
+      {
+
+         public AnnotatedClass<T> call() throws Exception
+         {
+            return AnnotatedClassImpl.of(clazz, transformer);
+         }
+            
+      });
    }
+   
+   public <T extends Annotation> AnnotatedAnnotation<T> classForName(final Class<T> clazz)
+   {
+      return annotations.putIfAbsent(clazz, new Callable<AnnotatedAnnotation<T>>()
+      {
 
+         public AnnotatedAnnotation<T> call() throws Exception
+         {
+            return AnnotatedAnnotationImpl.of(clazz, transformer);
+         }
+            
+      });
+   }
+
 }




More information about the weld-commits mailing list