Well it does map multibinding for the class of the activities. So I guess it could be reflection, but it's all done in compile time.
Still looks like a goddamn hack, tho.
private final Map<Class<? extends T>, Provider<AndroidInjector.Factory<? extends T>>>
injectorFactories;
@Inject
DispatchingAndroidInjector(Map<Class<? extends T>,
Provider<AndroidInjector.Factory<? extends T>>> injectorFactories) {
this.injectorFactories = injectorFactories;
}
public boolean maybeInject(T instance) {
Provider<AndroidInjector.Factory<? extends T>> factoryProvider =
injectorFactories.get(instance.getClass());
if (factoryProvider == null) {
return false;
}
AndroidInjector.Factory<T> factory = (AndroidInjector.Factory<T>) factoryProvider.get();
try {
AndroidInjector<T> injector =
checkNotNull(factory.create(instance), "%s.create(I) should not return null.", factory.getClass().getCanonicalName());
injector.inject(instance);
return true;
....