You are right, my test is not the best to represent the issue. Of course my 
real code is more complex than that, but I've updated the test to show that 
the issue occures even if there is no overflow possible : 
https://gist.github.com/electrotype/5105100

Thanks for the help!



On Wednesday, March 6, 2013 10:05:19 PM UTC-5, Sam Berlin wrote:
>
> I agree that this seems wrong with AssistedInject, but I'm not clear on 
> what you'd otherwise expect. If it didn't cache, then you'd fail with a 
> StackOverflowException (since you'd recurse forever). 
>
> sam
> On Mar 6, 2013 9:45 PM, <[email protected] <javascript:>> wrote:
>
>> First, here's a unit test for the issue 
>> :https://gist.github.com/electrotype/5105100
>>
>> I'm trying to use a listener to call an "init()" method on my classes 
>> when they are constructed. I also use AssistedInject factories.
>>
>> I think the problem is that in *
>> com.google.inject.internal.ConstructorInjector#construct(...)* , this 
>> code is supposed to prevent infinite loops :
>>
>>
>>     T t = constructionContext.getCurrentReference();
>>>     if (t != null) {
>>>       return t;
>>>     }
>>>
>>
>> To remove the "current reference", *removeCurrentReference()* is called 
>> in the *finally* clause :
>>
>>
>>     } finally {
>>>       constructionContext.removeCurrentReference();
>>>     }
>>>
>>
>> The problem is that before this removal method is called, *the listeners 
>> are called* :
>>
>>       membersInjector.notifyListeners(t, errors);
>>>
>>
>>
>> It seems that this is the root of my issue, because the reference still 
>> exists when my "init()" methods are called (via the listeners), so when 
>> they try to create an instance using the factories, they get the cached 
>> instance instead of a new one!
>>
>> Does this mean I can't use a listener to call my init() methods? Are 
>> there some workarounds?
>>
>> Thanks in advance!
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "google-guice" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]<javascript:>
>> .
>> Visit this group at http://groups.google.com/group/google-guice?hl=en.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>  
>>  
>>
>

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


Reply via email to