package fi.otavanopisto.muikku.debug;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.HashSet;
import java.util.Set;
import javax.enterprise.inject.spi.AnnotatedConstructor;
import javax.enterprise.inject.spi.AnnotatedField;
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedType;
public class AnnotatedTypeWrapper<T> implements AnnotatedType<T> {
private final AnnotatedType<T> wrapped;
private final Set<Annotation> annotations;
public AnnotatedTypeWrapper(AnnotatedType<T> wrapped,
Set<Annotation> annotations) {
this.wrapped = wrapped;
this.annotations = new HashSet<>(annotations);
}
public void addAnnotation(Annotation annotation) {
annotations.add(annotation);
}
@Override
public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
return wrapped.getAnnotation(annotationType);
}
@Override
public Set<Annotation> getAnnotations() {
return annotations;
}
@Override
public Type getBaseType() {
return wrapped.getBaseType();
}
@Override
public Set<Type> getTypeClosure() {
return wrapped.getTypeClosure();
}
@Override
public boolean isAnnotationPresent(
Class<? extends Annotation> annotationType) {
for (Annotation annotation : annotations) {
if (annotationType.isInstance(annotation)) {
return true;
}
}
return false;
}
@Override
public Set<AnnotatedConstructor<T>> getConstructors() {
return wrapped.getConstructors();
}
@Override
public Set<AnnotatedField<? super T>> getFields() {
return wrapped.getFields();
}
@Override
public Class<T> getJavaClass() {
return wrapped.getJavaClass();
}
@Override
public Set<AnnotatedMethod<? super T>> getMethods() {
return wrapped.getMethods();
}
}