Campos genéricos @ Injetados em uma superclasse abstrata

Considere um conjunto de tipos MVP-ish. Existe um Presenter abstrato, com uma interface View:

public interface View {
    //...
}

public abstract class AbstractPresenter<V extends View> {
    @Inject V view;
    //...
}

Então, vamos ter uma subclasse específica de apresentador concreto, com sua interface e implementação de visualização:

public interface LoginView extends View {
    //...
}
public LoginPresenter extends AbstractPresenter<LoginView> {
    //...
}

public class LoginViewImpl implements LoginView {
    //...
}

Em um módulo Dagger, é claro que definiríamos um@Provides método:

@Provides
LoginView provideLoginView() {
    return new LoginViewImpl();
}

No Guice, você pode escrever da mesma maneira, ou apenasbind(LoginView.class).to(LoginViewImpl.class).

No entanto, no Dagger (v1 e 2.0-SNAPSHOT do Google), isso produz um erro, pois não consegue descobrir o queV é ao criar a fiação de ligação paraAbstractPresenter<V>. Por outro lado, Guice descobre isso porque, na verdade, está criando umLoginPresenter, por isso precisa de uma implementação deLoginView.

Adaga 1.2.2:

foo.bar.AbstractPresenter$InjectAdapter.java:[21,31] cannot find symbol
  symbol:   class V
  location: class foo.bar.AbstractPresenter$InjectAdapter

Adaga 2.0-INSTANTÂNEO:

Caused by: java.lang.IllegalArgumentException: V
    at dagger.internal.codegen.writer.TypeNames$2.defaultAction(TypeNames.java:39)
    at dagger.internal.codegen.writer.TypeNames$2.defaultAction(TypeNames.java:36)
    at javax.lang.model.util.SimpleTypeVisitor6.visitTypeVariable(SimpleTypeVisitor6.java:179)
    at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1052)
    at dagger.internal.codegen.writer.TypeNames.forTypeMirror(TypeNames.java:36)
    at dagger.internal.codegen.MembersInjectorGenerator.write(MembersInjectorGenerator.java:142)
    at dagger.internal.codegen.MembersInjectorGenerator.write(MembersInjectorGenerator.java:61)
    at dagger.internal.codegen.SourceFileGenerator.generate(SourceFileGenerator.java:53)
    at dagger.internal.codegen.InjectBindingRegistry.generateSourcesForRequiredBindings(InjectBindingRegistry.java:101)
    at dagger.internal.codegen.ComponentProcessor.process(ComponentProcessor.java:149)

Minha pergunta: isso é um bug? Esse recurso está faltando? Ou esse é um problema de desempenho que o Dagger está nos protegendo (no SerializableTypeOracleBuilder no GWT RPC)?

Observe que esse mesmo problema ocorre quandoV é referido comoProvider<V>, Lazy<V>etc.

questionAnswers(2)

yourAnswerToTheQuestion