PredefinedBeansExtension.java

package com.github.jonasrutishauser.cdi.maven.plugin.weld.bootstrap;

import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.BeforeBeanDiscovery;
import javax.enterprise.inject.spi.Extension;

import org.jboss.weld.util.annotated.ForwardingAnnotatedType;

public class PredefinedBeansExtension implements Extension {

    private final Set<Type> types;

    public PredefinedBeansExtension(Type... types) {
        this.types = new HashSet<>(Arrays.asList(types));
    }

    void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event, BeanManager beanManager) {
        AnnotatedType<Object> type = beanManager.createAnnotatedType(Object.class);
        event.addAnnotatedType(new ForwardingAnnotatedType<Object>() {
            @Override
            public AnnotatedType<Object> delegate() {
                return type;
            }

            @Override
            public Set<Type> getTypeClosure() {
                return types;
            }
        });
    }

}