package org.jboss.weld.annotated.slim.backed; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Type; import java.util.Set; import org.jboss.weld.annotated.slim.BaseAnnotated; import org.jboss.weld.resources.ReflectionCache; import org.jboss.weld.resources.SharedObjectCache; import org.jboss.weld.util.LazyValueHolder; public abstract class BackedAnnotated extends BaseAnnotated { private final LazyValueHolder<Set<Type>> typeClosure; public BackedAnnotated(Type baseType, SharedObjectCache sharedObjectCache) { super(baseType); this.typeClosure = initTypeClosure(baseType, sharedObjectCache); } protected LazyValueHolder<Set<Type>> initTypeClosure(Type baseType, SharedObjectCache cache) { return cache.getTypeClosureHolder(baseType); } public Set<Type> getTypeClosure() { return typeClosure.get(); } protected abstract AnnotatedElement getAnnotatedElement(); protected abstract ReflectionCache getReflectionCache(); @Override public Set<Annotation> getAnnotations() { return getReflectionCache().getAnnotations(getAnnotatedElement()); } }