package com.google.inject;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import com.google.inject.binder.AnnotatedBindingBuilder;
import com.google.inject.binder.LinkedBindingBuilder;
import com.google.inject.binder.ScopedBindingBuilder;
/**
* Basically, a binder that does nothing.
* @author Mike Burton
* @param <T> ??
*/
public class NoOpAnnotatedBindingBuilder<T> implements AnnotatedBindingBuilder<T> {
private ScopedBindingBuilder scopedBindingBuilder = new NoOpScopedBindingBuilder();
private NoOpLinkedBindingBuilder<T> noOpLinkedBindingBuilder = new NoOpLinkedBindingBuilder<T>();
@Override
public LinkedBindingBuilder<T> annotatedWith(Class<? extends Annotation> annotationType) {
return noOpLinkedBindingBuilder;
}
@Override
public LinkedBindingBuilder<T> annotatedWith(Annotation annotation) {
return this;
}
@Override
public ScopedBindingBuilder to(Class<? extends T> implementation) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder to(TypeLiteral<? extends T> implementation) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder to(Key<? extends T> targetKey) {
return scopedBindingBuilder;
}
@Override
public void toInstance(T instance) {
//nothing
}
@Override
public ScopedBindingBuilder toProvider(Provider<? extends T> provider) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder toProvider(Class<? extends javax.inject.Provider<? extends T>> providerType) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder toProvider(TypeLiteral<? extends javax.inject.Provider<? extends T>> providerType) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder toProvider(Key<? extends javax.inject.Provider<? extends T>> providerKey) {
return scopedBindingBuilder;
}
@Override
public <S extends T> ScopedBindingBuilder toConstructor(Constructor<S> constructor) {
return scopedBindingBuilder;
}
@Override
public <S extends T> ScopedBindingBuilder toConstructor(Constructor<S> constructor, TypeLiteral<? extends S> type) {
return scopedBindingBuilder;
}
@Override
public void in(Class<? extends Annotation> scopeAnnotation) {
//nothing
}
@Override
public void in(Scope scope) {
//nothing
}
@Override
public void asEagerSingleton() {
//nothing
}
@Override
public ScopedBindingBuilder toProvider(javax.inject.Provider<? extends T> provider) {
return scopedBindingBuilder;
}
private class NoOpLinkedBindingBuilder<U> implements LinkedBindingBuilder<U> {
@Override
public ScopedBindingBuilder to(Class<? extends U> implementation) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder to(TypeLiteral<? extends U> implementation) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder to(Key<? extends U> targetKey) {
return scopedBindingBuilder;
}
@Override
public void toInstance(U instance) {
//nothing
}
@Override
public ScopedBindingBuilder toProvider(Provider<? extends U> provider) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder toProvider(Class<? extends javax.inject.Provider<? extends U>> providerType) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder toProvider(TypeLiteral<? extends javax.inject.Provider<? extends U>> providerType) {
return scopedBindingBuilder;
}
@Override
public ScopedBindingBuilder toProvider(Key<? extends javax.inject.Provider<? extends U>> providerKey) {
return scopedBindingBuilder;
}
@Override
public <S extends U> ScopedBindingBuilder toConstructor(Constructor<S> constructor) {
return scopedBindingBuilder;
}
@Override
public <S extends U> ScopedBindingBuilder toConstructor(Constructor<S> constructor, TypeLiteral<? extends S> type) {
return scopedBindingBuilder;
}
@Override
public void in(Class<? extends Annotation> scopeAnnotation) {
//nothing
}
@Override
public void in(Scope scope) {
//nothing
}
@Override
public void asEagerSingleton() {
//nothing
}
@Override
public ScopedBindingBuilder toProvider(javax.inject.Provider<? extends U> provider) {
return scopedBindingBuilder;
}
}
private static class NoOpScopedBindingBuilder implements ScopedBindingBuilder {
@Override
public void in(Class<? extends Annotation> scopeAnnotation) {
//nothing
}
@Override
public void in(Scope scope) {
//nothing
}
@Override
public void asEagerSingleton() {
//nothing
}
}
}