title: Problem with generic return type in guice assisted inject factory
body: <p>So far, I successfully used google guice 2. While migrating to guice 3.0, I had troubles with assisted inject factories. Assume the following code</p>
  
  <pre><code>public interface Currency {}
  public class SwissFrancs implements Currency {}
  
  public interface Payment&lt;T extends Currency&gt; {}
  public class RealPayment implements Payment&lt;SwissFrancs&gt; {
      @Inject
      RealPayment(@Assisted Date date) {}
  }
  
  public interface PaymentFactory {
      Payment&lt;Currency&gt; create(Date date);
  }
  
  public SwissFrancPaymentModule extends AbstractModule {
      protected void configure() {
          install(new FactoryModuleBuilder()
               .implement(Payment.class, RealPayment.class)
               .build(PaymentFactory.class));
      }
  }
  </code></pre>
  
  <p>While creating the injector, I get the following exception:</p>
  
  <pre><code>com.google.inject.CreationException: Guice creation errors:
  
  1) Payment&lt;Currency&gt; is an interface, not a concrete class.
     Unable to create AssistedInject factory. while locating Payment&lt;Currency&gt;
     at PaymentFactory.create(PaymentFactory.java:1)
  </code></pre>
  
  <p>With the assisted inject creator from guice 2 my configuration works:</p>
  
  <pre><code>bind(PaymentFactory.class).toProvider(
  FactoryProvider.newFactory(PaymentFactory.class, RealPayment.class));
  </code></pre>
  
  <p>The only workaround I found so far is to remove the generic parameter from the return type of the factory method:</p>
  
  <pre><code>public interface PaymentFactory {
      Payment create(Date date);
  }
  </code></pre>
  
  <p>Does anybody know, why guice 3 doesn't like the generic parameter in the factory method or what I generally misunderstood about assisted inject factories? Thanks!</p>