package org.deephacks.confit.internal.core.cdi; import org.deephacks.confit.Config; import org.deephacks.confit.ConfigContext; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AfterBeanDiscovery; import javax.enterprise.inject.spi.AfterDeploymentValidation; import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.CDI; import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessAnnotatedType; import javax.inject.Singleton; import java.util.HashSet; import java.util.Set; @Singleton public class ConfigCdiBootstrap implements Extension { private static final Set<Class<?>> schemas = new HashSet<>(); public void afterBeanDiscovery(@Observes AfterBeanDiscovery event) { event.addContext(new ConfigCdiContext()); } public void afterDeploymentValidation(@Observes AfterDeploymentValidation event) { ConfigContext ctx = CDI.current().select(ConfigContext.class).get(); for (Class<?> cls : schemas){ ctx.register(cls); } } public <X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> pat) { AnnotatedType<?> type = pat.getAnnotatedType(); if (type.isAnnotationPresent(Config.class)) { schemas.add(pat.getAnnotatedType().getJavaClass()); } } }