[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