package tc.oc.commons.core.inject;
import com.google.inject.Binding;
import com.google.inject.PrivateBinder;
import com.google.inject.spi.DefaultElementVisitor;
import com.google.inject.spi.PrivateElements;
/**
* Expose the key to each visited {@link Binding} from the given {@link PrivateBinder}
*/
public class ElementExposer extends DefaultElementVisitor<Void> {
private final PrivateBinder binder;
public ElementExposer(PrivateBinder binder) {
this.binder = binder;
}
@Override
public <V> Void visit(Binding<V> binding) {
binder.expose(binding.getKey());
return super.visit(binding);
}
@Override
public Void visit(PrivateElements privateElements) {
privateElements.getExposedKeys().forEach(binder::expose);
return super.visit(privateElements);
}
}