package cucumber.runtime.java.needle.injection; import de.akquinet.jbosscc.needle.injection.InjectionProvider; import de.akquinet.jbosscc.needle.injection.InjectionTargetInformation; /** * InjectionProvider that provides a singleton instance of type T whenever injection is required * * @param <T> * target type */ public class DefaultInstanceInjectionProvider<T> implements InjectionProvider<T> { /** * Factory method. * * @param instance * returns a provider for given instance. * @return injection provider. */ public static <T> DefaultInstanceInjectionProvider<T> providerFor(final T instance) { return new DefaultInstanceInjectionProvider<T>(instance); } /** * always return this instance */ private final T instance; /** * Constructs an injection provider responsible for returning the same instance. * * @param instance * instance to return. */ public DefaultInstanceInjectionProvider(final T instance) { this.instance = instance; } /** * {@inheritDoc} */ @Override public boolean verify(final InjectionTargetInformation injectionTargetInformation) { return injectionTargetInformation.getType().isAssignableFrom(instance.getClass()); } /** * {@inheritDoc} */ @Override public T getInjectedObject(final Class<?> injectionPointType) { return instance; } /** * {@inheritDoc} */ @Override public Object getKey(final InjectionTargetInformation injectionTargetInformation) { return injectionTargetInformation.getType(); } }