package org.limewire.inject;
import java.lang.annotation.Annotation;
import java.util.Map;
import com.google.inject.Binding;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Scope;
import com.google.inject.spi.BindingScopingVisitor;
/**
* Various Guice Utility methods.
*/
public class GuiceUtils {
/**
* ScopingVisitor that checks for eagerly bound singletons. Will return true
* if a given binding is an EagerSingleton, false otherwise.
*/
private static BindingScopingVisitor<Boolean> eagerScopingVisitor = new BindingScopingVisitor<Boolean>(){
@Override public Boolean visitEagerSingleton(){
return true;
}
@Override public Boolean visitNoScoping(){
return false;
}
@Override public Boolean visitScope(Scope scope){
return scope == MoreScopes.EAGER_SINGLETON;
}
@Override public Boolean visitScopeAnnotation(Class<? extends Annotation> scopeAnnotation){
return false;
}
};
/**
* Given an Injector, creates an instance of all known bindings with
* an EagerSingleton annotation or eagerly loaded bindings located
* within a module.
*/
public static void loadEagerSingletons(Injector injector) {
Map<Key<?>, Binding<?>> map = injector.getAllBindings();
for(Binding<?> binding : map.values()) {
if(binding.acceptScopingVisitor(eagerScopingVisitor)) {
binding.getProvider().get();
}
}
}
}