Skip to content

Commit

Permalink
Fix b/116268009 -- qualify switching binding requests that request co…
Browse files Browse the repository at this point in the history
…mponent methods.

RELNOTES=Fixes bug in fast init (b/116268009).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215797111
  • Loading branch information
bcorso authored and ronshapiro committed Oct 18, 2018
1 parent 972bfb3 commit be9493d
Show file tree
Hide file tree
Showing 9 changed files with 39 additions and 31 deletions.
8 changes: 4 additions & 4 deletions java/dagger/internal/codegen/InnerSwitchingProviders.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@ public Key key() {
}

@Override
public Expression getProviderExpression(ClassName switchType, int switchId) {
public Expression getProviderExpression(ClassName switchingProviderClass, int switchId) {
TypeMirror instanceType = types.accessibleType(binding.contributedType(), requestingClass);
return Expression.create(
types.wrapType(instanceType, Provider.class),
CodeBlock.of("new $T<>($L)", switchType, switchId));
CodeBlock.of("new $T<>($L)", switchingProviderClass, switchId));
}

@Override
public Expression getReturnExpression() {
public Expression getReturnExpression(ClassName switchingProviderClass) {
return componentBindingExpressions.getDependencyExpression(
bindingRequest(binding.key(), INSTANCE), requestingClass);
bindingRequest(binding.key(), INSTANCE), switchingProviderClass);
}
}
}
12 changes: 6 additions & 6 deletions java/dagger/internal/codegen/StaticSwitchingProviders.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public Key key() {
}

@Override
public Expression getProviderExpression(ClassName switchType, int switchId) {
public Expression getProviderExpression(ClassName switchingProviderClass, int switchId) {
TypeMirror accessibleType = types.accessibleType(binding.contributedType(), owningComponent);
// Java 7 type inference can't figure out that instance in
// DoubleCheck.provider(new SwitchingProvider<>()) is Provider<T> and not Provider<Object>
Expand All @@ -120,20 +120,20 @@ public Expression getProviderExpression(ClassName switchType, int switchId) {

return Expression.create(
types.wrapType(accessibleType, Provider.class),
CodeBlock.of("new $T<$L>($L)", switchType, typeParameter, arguments));
CodeBlock.of("new $T<$L>($L)", switchingProviderClass, typeParameter, arguments));
}

@Override
public Expression getReturnExpression() {
public Expression getReturnExpression(ClassName switchingProviderClass) {
return Expression.create(
binding.contributedType(),
CodeBlock.of(
"$T.provideInstance($L)",
generatedClassNameForBinding(binding),
getMethodArguments()));
getMethodArguments(switchingProviderClass)));
}

private CodeBlock getMethodArguments() {
private CodeBlock getMethodArguments(ClassName switchingProviderClass) {
int i = 0;
ImmutableList.Builder<CodeBlock> arguments = ImmutableList.builder();
if (binding.requiresModuleInstance()) {
Expand All @@ -143,7 +143,7 @@ private CodeBlock getMethodArguments() {
for (FrameworkDependency dependency : binding.frameworkDependencies()) {
TypeMirror type =
componentBindingExpressions
.getDependencyExpression(bindingRequest(dependency), owningComponent)
.getDependencyExpression(bindingRequest(dependency), switchingProviderClass)
.type();
arguments.add(argument(type, i++));
}
Expand Down
7 changes: 4 additions & 3 deletions java/dagger/internal/codegen/SwitchingProviders.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,13 @@ interface SwitchCase {
Key key();

/** Returns the {@link Expression} that returns the provided instance for this case. */
Expression getReturnExpression();
Expression getReturnExpression(ClassName switchingProviderClass);

/**
* Returns the {@link Expression} that returns the {@code SwitchProvider} instance for this
* case.
*/
Expression getProviderExpression(ClassName switchType, int switchId);
Expression getProviderExpression(ClassName switchingProviderClass, int switchId);
}

/**
Expand Down Expand Up @@ -147,7 +147,8 @@ Expression getProviderExpression(SwitchCase switchCase) {
}

private CodeBlock createSwitchCaseCodeBlock(SwitchCase switchCase) {
CodeBlock instanceCodeBlock = switchCase.getReturnExpression().box(types).codeBlock();
CodeBlock instanceCodeBlock =
switchCase.getReturnExpression(switchingProviderType).box(types).codeBlock();

return CodeBlock.builder()
// TODO(user): Is there something else more useful than the key?
Expand Down
5 changes: 3 additions & 2 deletions javatests/dagger/internal/codegen/ComponentProcessorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ public ComponentProcessorTest(CompilerMode compilerMode) {
" @Override",
" public T get() {",
" switch (id) {",
" case 0: return (T) someInjectableType();",
" case 0: return (T) DaggerSimpleComponent.this.someInjectableType();",
" default: throw new AssertionError(id);",
" }",
" }",
Expand Down Expand Up @@ -1286,7 +1286,8 @@ public void testDefaultPackage() {
" case 0:",
" return (T)",
" Preconditions.checkNotNull(",
" aComponent.a(), " + NPE_FROM_COMPONENT_METHOD + ");",
" DaggerBComponent.this.aComponent.a(),",
" " + NPE_FROM_COMPONENT_METHOD + ");",
" default:",
" throw new AssertionError(id);",
" }",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1167,7 +1167,7 @@ public void providerWhenBindsScopeGreaterThanDependencyScope() {
" @Override",
" public T get() {",
" switch (id) {",
" case 0: return (T) getObject2();",
" case 0: return (T) DaggerTestComponent.this.getObject2();",
" default: throw new AssertionError(id);",
" }",
" }",
Expand Down
2 changes: 1 addition & 1 deletion javatests/dagger/internal/codegen/ElidedFactoriesTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ public void simpleComponent_injectsProviderOf_dependsOnScoped() {
" @Override",
" public T get() {",
" switch (id) {",
" case 0: return (T) getDependsOnScoped();",
" case 0: return (T) DaggerSimpleComponent.this.getDependsOnScoped();",
" default: throw new AssertionError(id);",
" }",
" }",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,13 +185,14 @@ public void mapBindingsWithEnumKey() {
" public T get() {",
" switch (id) {",
" case 0:",
" return (T) getMapOfPathEnumAndProviderOfHandler();",
" return (T) DaggerTestComponent.this",
" .getMapOfPathEnumAndProviderOfHandler();",
" case 1:",
" return (T) MapModuleOne_ProvideAdminHandlerFactory",
" .proxyProvideAdminHandler(mapModuleOne);",
" .proxyProvideAdminHandler(DaggerTestComponent.this.mapModuleOne);",
" case 2:",
" return (T) MapModuleTwo_ProvideLoginHandlerFactory",
" .proxyProvideLoginHandler(mapModuleTwo);",
" .proxyProvideLoginHandler(DaggerTestComponent.this.mapModuleTwo);",
" default: throw new AssertionError(id);",
" }",
" }",
Expand Down Expand Up @@ -590,13 +591,14 @@ public void mapBindingsWithStringKey() {
" public T get() {",
" switch (id) {",
" case 0:",
" return (T) getMapOfStringAndProviderOfHandler();",
" return (T) DaggerTestComponent.this",
" .getMapOfStringAndProviderOfHandler();",
" case 1:",
" return (T) MapModuleOne_ProvideAdminHandlerFactory",
" .proxyProvideAdminHandler(mapModuleOne);",
" .proxyProvideAdminHandler(DaggerTestComponent.this.mapModuleOne);",
" case 2:",
" return (T) MapModuleTwo_ProvideLoginHandlerFactory",
" .proxyProvideLoginHandler(mapModuleTwo);",
" .proxyProvideLoginHandler(DaggerTestComponent.this.mapModuleTwo);",
" default: throw new AssertionError(id);",
" }",
" }",
Expand Down Expand Up @@ -798,13 +800,14 @@ public void mapBindingsWithWrappedKey() {
" public T get() {",
" switch (id) {",
" case 0:",
" return (T) getMapOfWrappedClassKeyAndProviderOfHandler();",
" return (T) DaggerTestComponent.this",
" .getMapOfWrappedClassKeyAndProviderOfHandler();",
" case 1:",
" return (T) MapModuleOne_ProvideAdminHandlerFactory",
" .proxyProvideAdminHandler(mapModuleOne);",
" .proxyProvideAdminHandler(DaggerTestComponent.this.mapModuleOne);",
" case 2:",
" return (T) MapModuleTwo_ProvideLoginHandlerFactory",
" .proxyProvideLoginHandler(mapModuleTwo);",
" .proxyProvideLoginHandler(DaggerTestComponent.this.mapModuleTwo);",
" default: throw new AssertionError(id);",
" }",
" }",
Expand Down Expand Up @@ -981,7 +984,7 @@ public void mapBindingsWithNonProviderValue() {
" @Override",
" public T get() {",
" switch (id) {",
" case 0: return (T) getMapOfPathEnumAndHandler();",
" case 0: return (T) DaggerTestComponent.this.getMapOfPathEnumAndHandler();",
" default: throw new AssertionError(id);",
" }",
" }",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -405,9 +405,12 @@ public void simpleComponent() {
" @Override",
" public T get() {",
" switch (id) {",
" case 0: return (T) getProductionImplementationExecutor();",
" case 1: return (T) getProductionComponentMonitor();",
" case 2: return (T) getB();",
" case 0: return (T) DaggerTestClass_SimpleComponent.this",
" .getProductionImplementationExecutor();",
" case 1: return (T)",
" DaggerTestClass_SimpleComponent.this.getProductionComponentMonitor();",
" case 2: return (T)",
" DaggerTestClass_SimpleComponent.this.getB();",
" default: throw new AssertionError(id);",
" }",
" }",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@ public void scopedBinds() {
" public T get() {",
" switch (id) {",
" case 0:",
" return (T) getCharSequence();",
" return (T) DaggerTestComponent.this.getCharSequence();",
" default:",
" throw new AssertionError(id);",
" }",
Expand Down

0 comments on commit be9493d

Please sign in to comment.