Hi All,

I have tried debugging this for a few hours, and for the life of me I can't
figure out what's going wrong.  I know how to workaround it, but I don't
understand why its happening, which has me scared that it may happen in
other places.

The scenario is:  We create a parent injector for the core and a child
injector for the UI.  The child injector has an odd set of injectable
objects that have the following dependencies:  A requires B requires C
requires D requires Provider<A>.  All of them are singletons.  D does not
call Provider<A>.get() in the constructor.  If I change the child injector's
module to have an explicit bind of A, B, C or D then the problem goes away.
I don't understand why that's necessary though -- D should be visible to
child injectors even it was a jit-binding added to the parent (through use
in a child).  Neither A, B or C are required by anything else.  D is
required by one other class (E), but if I explicitly bind E the problem
still exists.

I'm very willing to debug more... but I could use some guidance on where to
look.  I've tried reproducing the problem in a smaller testcase that plays
this exact scenario out, but it won't reproduce (even though this happens
100% of the time on our code).

This is the particular exception:

com.google.inject.CreationException: Guice creation errors:

1) Error in custom provider, java.lang.IllegalStateException: Constructor
not ready
  while locating org.limewire.ui.swing.friends.chat.ChatFramePanel
    for parameter 0 at
org.limewire.ui.swing.friends.chat.ChatModel.<init>(ChatModel.java:45)
  while locating org.limewire.ui.swing.friends.chat.ChatModel
    for parameter 1 at
org.limewire.ui.swing.friends.chat.ChatFriendListPane.<init>(ChatFriendListPane.java:122)
  while locating org.limewire.ui.swing.friends.chat.ChatFriendListPane
Caused by: java.lang.IllegalStateException: Constructor not ready
    at
com.google.inject.internal.Preconditions.checkState(Preconditions.java:142)
    at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:123)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
    at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:51)
    at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
    at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
    at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
    at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
    at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
    at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:51)
    at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
    at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
    at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
    at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
    at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
    at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:51)
    at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
    at
com.google.inject.internal.InjectorBuilder$1.call(InjectorBuilder.java:201)
    at
com.google.inject.internal.InjectorBuilder$1.call(InjectorBuilder.java:197)
    at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:801)
    at
com.google.inject.internal.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:195)
    at
com.google.inject.internal.InjectorBuilder.injectDynamically(InjectorBuilder.java:177)
    at
com.google.inject.internal.InjectorBuilder.build(InjectorBuilder.java:114)
    at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:137)
    at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:144)
    at
org.limewire.ui.swing.mainframe.AppFrame.createUiInjector(AppFrame.java:312)
    at org.limewire.ui.swing.mainframe.AppFrame.startup(AppFrame.java:156)
    at org.jdesktop.application.Application$1.run(Application.java:171)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

2) Error in custom provider, java.lang.IllegalStateException: Constructor
not ready
  while locating org.limewire.ui.swing.friends.chat.ChatFramePanel
    for parameter 0 at
org.limewire.ui.swing.friends.chat.ChatModel.<init>(ChatModel.java:45)
  while locating org.limewire.ui.swing.friends.chat.ChatModel
    for parameter 1 at
org.limewire.ui.swing.friends.chat.ChatFriendListPane.<init>(ChatFriendListPane.java:122)
  while locating org.limewire.ui.swing.friends.chat.ChatFriendListPane
    for parameter 1 at
org.limewire.ui.swing.friends.chat.ChatPanel.<init>(ChatPanel.java:51)
  while locating org.limewire.ui.swing.friends.chat.ChatPanel
Caused by: java.lang.IllegalStateException: Constructor not ready
    at
com.google.inject.internal.Preconditions.checkState(Preconditions.java:142)
    at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:123)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
    at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:51)
    at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
    at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
    at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
    at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
    at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
    at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:51)
    at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
    at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
    at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
    at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
    at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
    at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:51)
    at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
    at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
    at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
    at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
    at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
    at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
    at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:51)
    at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
    at
com.google.inject.internal.InjectorBuilder$1.call(InjectorBuilder.java:201)
    at
com.google.inject.internal.InjectorBuilder$1.call(InjectorBuilder.java:197)
    at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:801)
    at
com.google.inject.internal.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:195)
    at
com.google.inject.internal.InjectorBuilder.injectDynamically(InjectorBuilder.java:177)
    at
com.google.inject.internal.InjectorBuilder.build(InjectorBuilder.java:114)
    at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:137)
    at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:144)
    at
org.limewire.ui.swing.mainframe.AppFrame.createUiInjector(AppFrame.java:312)
    at org.limewire.ui.swing.mainframe.AppFrame.startup(AppFrame.java:156)
    at org.jdesktop.application.Application$1.run(Application.java:171)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

2 errors
    at
com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:358)
    at
com.google.inject.internal.InjectorBuilder.injectDynamically(InjectorBuilder.java:180)
    at
com.google.inject.internal.InjectorBuilder.build(InjectorBuilder.java:114)
    at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:137)
    at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:144)
    at
org.limewire.ui.swing.mainframe.AppFrame.createUiInjector(AppFrame.java:312)
    at org.limewire.ui.swing.mainframe.AppFrame.startup(AppFrame.java:156)
    at org.jdesktop.application.Application$1.run(Application.java:171)
    ... 8 more

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to