Add ImmutableSet support to SetBindingRequestFulfillment
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160912106
diff --git a/java/dagger/internal/codegen/SimpleInvocationRequestFulfillment.java b/java/dagger/internal/codegen/SimpleInvocationRequestFulfillment.java
index 0e43011..94e19bd 100644
--- a/java/dagger/internal/codegen/SimpleInvocationRequestFulfillment.java
+++ b/java/dagger/internal/codegen/SimpleInvocationRequestFulfillment.java
@@ -34,6 +34,17 @@
abstract CodeBlock getSimpleInvocation(DependencyRequest request, ClassName requestingClass);
+ /**
+ * Java 7 type inference is not as strong as in Java 8, and therefore some generated code must
+ * make type parameters for {@link Futures#immediateFuture(Object)} explicit.
+ *
+ * <p>For example, {@code javac7} cannot detect that Futures.immediateFuture(ImmutableSet.of(T))}
+ * can safely be assigned to {@code ListenableFuture<Set<T>>}.
+ */
+ protected CodeBlock explicitTypeParameter(ClassName requestingClass) {
+ return CodeBlock.of("");
+ }
+
@Override
final CodeBlock getSnippetForDependencyRequest(
DependencyRequest request, ClassName requestingClass) {
@@ -41,8 +52,11 @@
case INSTANCE:
return getSimpleInvocation(request, requestingClass);
case FUTURE:
- return CodeBlock.of(
- "$T.immediateFuture($L)", Futures.class, getSimpleInvocation(request, requestingClass));
+ return CodeBlock.builder()
+ .add("$T.", Futures.class)
+ .add(explicitTypeParameter(requestingClass))
+ .add("immediateFuture($L)", getSimpleInvocation(request, requestingClass))
+ .build();
default:
return delegate.getSnippetForDependencyRequest(request, requestingClass);
}