package br.com.caelum.vraptor.ioc.cdi.extensions;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.ProcessAnnotatedType;
import org.apache.deltaspike.core.util.metadata.builder.AnnotatedTypeBuilder;
@SuppressWarnings("rawtypes")
public class ModifyComponentExtension implements Extension {
@SuppressWarnings("unchecked")
public void processAnnotatedType(@Observes final ProcessAnnotatedType pat) {
if(accept(pat)){
AnnotatedTypeBuilder builder = new AnnotatedTypeBuilder();
builder.readFromType(pat.getAnnotatedType());
AddInjectToConstructorExtension addInjectToConstructorExtension = new AddInjectToConstructorExtension(builder);
ComponentExtension componentExtension = new ComponentExtension(builder);
ComponentFactoryExtension componentFactoryExtension = new ComponentFactoryExtension(builder);
addInjectToConstructorExtension.processAnnotatedType(pat);
componentExtension.processAnnotatedType(pat);
componentFactoryExtension.addProducesToComponentFactory(pat);
pat.setAnnotatedType(builder.create());
}
}
private boolean accept(ProcessAnnotatedType pat) {
Class type = pat.getAnnotatedType().getJavaClass();
return !type.isEnum() && !type.isInterface() && !type.isAnnotation();
}
}