ExtendedInstanceProducer.java

package com.github.jonasrutishauser.javax.enterprise.inject.impl;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import com.github.jonasrutishauser.javax.enterprise.inject.ExtendedInstance;

import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.InjectionPoint;

class ExtendedInstanceProducer {

    @Produces
    static <T> ExtendedInstance<T> createExtendedInstance(InjectionPoint injectionPoint, Instance<Object> instance) {
        throw new IllegalStateException("should not be called");
    }
    
    static <T> ExtendedInstance<T> create(BeanManager beanManager, InjectionPoint injectionPoint, Instance<T> instance) {
        Type targetType = Object.class;
        if (injectionPoint.getType() instanceof ParameterizedType) {
            targetType = ((ParameterizedType) injectionPoint.getType()).getActualTypeArguments()[0];
        }
        return new CDIExtendedInstance<>(beanManager, instance, targetType, injectionPoint.getQualifiers());
    }

    private ExtendedInstanceProducer() {
    }

}