Search in sources :

Example 1 with ProvidedBy

use of com.google.inject.ProvidedBy in project guice by google.

the class InjectorImpl method createUninitializedBinding.

/**
   * Creates a binding for an injectable type with the given scope. Looks for a scope on the type if
   * none is specified.
   */
<T> BindingImpl<T> createUninitializedBinding(Key<T> key, Scoping scoping, Object source, Errors errors, boolean jitBinding) throws ErrorsException {
    Class<?> rawType = key.getTypeLiteral().getRawType();
    ImplementedBy implementedBy = rawType.getAnnotation(ImplementedBy.class);
    // Don't try to inject arrays or enums annotated with @ImplementedBy.
    if (rawType.isArray() || (rawType.isEnum() && implementedBy != null)) {
        throw errors.missingImplementationWithHint(key, this).toException();
    }
    // Handle TypeLiteral<T> by binding the inner type
    if (rawType == TypeLiteral.class) {
        // we have to fudge the inner type as Object
        @SuppressWarnings("unchecked") BindingImpl<T> binding = (BindingImpl<T>) createTypeLiteralBinding((Key<TypeLiteral<Object>>) key, errors);
        return binding;
    }
    // Handle @ImplementedBy
    if (implementedBy != null) {
        Annotations.checkForMisplacedScopeAnnotations(rawType, source, errors);
        return createImplementedByBinding(key, scoping, implementedBy, errors);
    }
    // Handle @ProvidedBy.
    ProvidedBy providedBy = rawType.getAnnotation(ProvidedBy.class);
    if (providedBy != null) {
        Annotations.checkForMisplacedScopeAnnotations(rawType, source, errors);
        return createProvidedByBinding(key, scoping, providedBy, errors);
    }
    return ConstructorBindingImpl.create(this, key, null, /* use default constructor */
    source, scoping, errors, jitBinding && options.jitDisabled, options.atInjectRequired);
}
Also used : ProvidedBy(com.google.inject.ProvidedBy) Key(com.google.inject.Key) ImplementedBy(com.google.inject.ImplementedBy)

Example 2 with ProvidedBy

use of com.google.inject.ProvidedBy in project roboguice by roboguice.

the class InjectorImpl method createUninitializedBinding.

/**
   * Creates a binding for an injectable type with the given scope. Looks for a scope on the type if
   * none is specified.
   */
<T> BindingImpl<T> createUninitializedBinding(Key<T> key, Scoping scoping, Object source, Errors errors, boolean jitBinding) throws ErrorsException {
    Class<?> rawType = key.getTypeLiteral().getRawType();
    ImplementedBy implementedBy = rawType.getAnnotation(ImplementedBy.class);
    // Don't try to inject arrays or enums annotated with @ImplementedBy.
    if (rawType.isArray() || (rawType.isEnum() && implementedBy != null)) {
        throw errors.missingImplementation(key).toException();
    }
    // Handle TypeLiteral<T> by binding the inner type
    if (rawType == TypeLiteral.class) {
        // we have to fudge the inner type as Object
        @SuppressWarnings("unchecked") BindingImpl<T> binding = (BindingImpl<T>) createTypeLiteralBinding((Key<TypeLiteral<Object>>) key, errors);
        return binding;
    }
    // Handle @ImplementedBy
    if (implementedBy != null) {
        Annotations.checkForMisplacedScopeAnnotations(rawType, source, errors);
        return createImplementedByBinding(key, scoping, implementedBy, errors);
    }
    // Handle @ProvidedBy.
    ProvidedBy providedBy = rawType.getAnnotation(ProvidedBy.class);
    if (providedBy != null) {
        Annotations.checkForMisplacedScopeAnnotations(rawType, source, errors);
        return createProvidedByBinding(key, scoping, providedBy, errors);
    }
    return ConstructorBindingImpl.create(this, key, null, /* use default constructor */
    source, scoping, errors, jitBinding && options.jitDisabled, options.atInjectRequired);
}
Also used : ProvidedBy(com.google.inject.ProvidedBy) Key(com.google.inject.Key) ImplementedBy(com.google.inject.ImplementedBy)

Aggregations

ImplementedBy (com.google.inject.ImplementedBy)2 Key (com.google.inject.Key)2 ProvidedBy (com.google.inject.ProvidedBy)2