Use FrameworkInstanceBindingExpression only when requesting a Provider or Producer. Otherwise use DerivedFromFrameworkInstanceExpression, which is generalized from DerivedFromProviderExpression.
RELNOTES=n/a
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208267062
diff --git a/java/dagger/internal/codegen/ComponentBindingExpressions.java b/java/dagger/internal/codegen/ComponentBindingExpressions.java
index 20fa93c..f8a9d65 100644
--- a/java/dagger/internal/codegen/ComponentBindingExpressions.java
+++ b/java/dagger/internal/codegen/ComponentBindingExpressions.java
@@ -312,7 +312,12 @@
return provisionBindingExpression(resolvedBindings, requestKind);
case PRODUCTION:
- return frameworkInstanceBindingExpression(resolvedBindings, requestKind);
+ if (requestKind.equals(RequestKind.PRODUCER)) {
+ return frameworkInstanceBindingExpression(resolvedBindings);
+ } else {
+ return new DerivedFromFrameworkInstanceBindingExpression(
+ resolvedBindings, requestKind, this, types);
+ }
default:
throw new AssertionError(resolvedBindings);
@@ -355,7 +360,7 @@
* or a {@link dagger.producers.Producer} for production bindings.
*/
private FrameworkInstanceBindingExpression frameworkInstanceBindingExpression(
- ResolvedBindings resolvedBindings, RequestKind requestKind) {
+ ResolvedBindings resolvedBindings) {
// TODO(user): Consider merging the static factory creation logic into CreationExpressions?
Optional<MemberSelect> staticMethod =
useStaticFactoryCreation(resolvedBindings.contributionBinding())
@@ -375,10 +380,10 @@
switch (frameworkType) {
case PROVIDER:
return new ProviderInstanceBindingExpression(
- resolvedBindings, requestKind, this, frameworkInstanceSupplier, types, elements);
+ resolvedBindings, frameworkInstanceSupplier, types, elements);
case PRODUCER:
return new ProducerInstanceBindingExpression(
- resolvedBindings, requestKind, this, frameworkInstanceSupplier, types, elements);
+ resolvedBindings, frameworkInstanceSupplier, types, elements);
default:
throw new AssertionError("invalid framework type: " + frameworkType);
}
@@ -499,10 +504,11 @@
case LAZY:
case PRODUCED:
case PROVIDER_OF_LAZY:
- return new DerivedFromProviderBindingExpression(resolvedBindings, requestKind, this, types);
+ return new DerivedFromFrameworkInstanceBindingExpression(
+ resolvedBindings, requestKind, this, types);
case PRODUCER:
- return producerFromProviderBindingExpression(resolvedBindings, requestKind);
+ return producerFromProviderBindingExpression(resolvedBindings);
case FUTURE:
return new ImmediateFutureBindingExpression(resolvedBindings, this, types);
@@ -534,13 +540,13 @@
} else if (compilerOptions.fastInit()
&& frameworkInstanceCreationExpression(resolvedBindings).useInnerSwitchingProvider()
&& !(instanceBindingExpression(resolvedBindings)
- instanceof DerivedFromProviderBindingExpression)) {
+ instanceof DerivedFromFrameworkInstanceBindingExpression)) {
return wrapInMethod(
resolvedBindings,
RequestKind.PROVIDER,
innerSwitchingProviders.newBindingExpression(resolvedBindings.contributionBinding()));
}
- return frameworkInstanceBindingExpression(resolvedBindings, RequestKind.PROVIDER);
+ return frameworkInstanceBindingExpression(resolvedBindings);
}
/**
@@ -548,12 +554,10 @@
* provision binding.
*/
private FrameworkInstanceBindingExpression producerFromProviderBindingExpression(
- ResolvedBindings resolvedBindings, RequestKind requestKind) {
+ ResolvedBindings resolvedBindings) {
checkArgument(resolvedBindings.bindingType().frameworkType().equals(FrameworkType.PROVIDER));
return new ProducerInstanceBindingExpression(
resolvedBindings,
- requestKind,
- this,
new FrameworkFieldInitializer(
generatedComponentModel,
resolvedBindings,
@@ -586,7 +590,7 @@
? wrapInMethod(resolvedBindings, RequestKind.INSTANCE, directInstanceExpression)
: directInstanceExpression;
}
- return new DerivedFromProviderBindingExpression(
+ return new DerivedFromFrameworkInstanceBindingExpression(
resolvedBindings, RequestKind.INSTANCE, this, types);
}