Skip to content

Commit 4b0e237

Browse files
netdpbronshapiro
authored andcommitted
Don't assume that members injection bindings are always present.
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=137401638
1 parent d284347 commit 4b0e237

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

compiler/src/main/java/dagger/internal/codegen/ComponentTreeTraverser.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,11 @@ protected void visitMembersInjectionBindings(ResolvedBindings resolvedBindings)
282282
throw new AssertionError(
283283
"members injection binding keys should never have contribution bindings");
284284
}
285-
visitMembersInjectionBinding(
286-
resolvedBindings.membersInjectionBinding().get(),
287-
getOnlyElement(resolvedBindings.allMembersInjectionBindings().keySet()));
285+
if (resolvedBindings.membersInjectionBinding().isPresent()) {
286+
visitMembersInjectionBinding(
287+
resolvedBindings.membersInjectionBinding().get(),
288+
getOnlyElement(resolvedBindings.allMembersInjectionBindings().keySet()));
289+
}
288290
}
289291

290292
/**

compiler/src/main/java/dagger/internal/codegen/ResolvedBindings.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ ComponentDescriptor owningComponent(ContributionBinding binding) {
178178
}
179179

180180
/**
181-
* The members-injection binding, regardless of owning component. Empty if these are contribution
182-
* bindings.
181+
* The members-injection binding, regardless of owning component. Absent if these are contribution
182+
* bindings, or if there is no members-injection binding because the type fails validation.
183183
*/
184184
Optional<MembersInjectionBinding> membersInjectionBinding() {
185185
ImmutableSet<MembersInjectionBinding> membersInjectionBindings =

compiler/src/test/java/dagger/internal/codegen/GraphValidationTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,38 @@ public void membersInjectDependsOnUnboundedType() {
207207
.onLine(7);
208208
}
209209

210+
@Test
211+
public void invalidMembersInjection() {
212+
JavaFileObject injected =
213+
JavaFileObjects.forSourceLines(
214+
"test.Injected",
215+
"package test;",
216+
"",
217+
"import javax.inject.Inject;",
218+
"",
219+
"final class Injected {",
220+
" @Inject static Object object;",
221+
"}");
222+
JavaFileObject component =
223+
JavaFileObjects.forSourceLines(
224+
"test.TestComponent",
225+
"package test;",
226+
"",
227+
"import dagger.Component;",
228+
"",
229+
"@Component",
230+
"interface TestComponent {",
231+
" void inject(Injected injected);",
232+
"}");
233+
assertAbout(javaSources())
234+
.that(ImmutableList.of(injected, component))
235+
.processedWith(new ComponentProcessor())
236+
.failsToCompile()
237+
.withErrorContaining("static fields")
238+
.in(injected)
239+
.onLine(6);
240+
}
241+
210242
@Test public void cyclicDependency() {
211243
JavaFileObject component = JavaFileObjects.forSourceLines("test.Outer",
212244
"package test;",

0 commit comments

Comments
 (0)