File tree Expand file tree Collapse file tree 3 files changed +39
-5
lines changed
main/java/dagger/internal/codegen
test/java/dagger/internal/codegen Expand file tree Collapse file tree 3 files changed +39
-5
lines changed Original file line number Diff line number Diff 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 /**
Original file line number Diff line number Diff 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 =
Original file line number Diff line number Diff 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;" ,
You can’t perform that action at this time.
0 commit comments