Thanks Sam.  There seems to be no de-duplication for type/provision 
listener bindings though, correct?

On Monday, November 4, 2013 1:24:41 PM UTC-5, Sam Berlin wrote:
>
> We've fixed the mapbinder/multibinder issued in HEAD (haven't made it into 
> the beta release yet).  But in general, you shouldn't rely on module 
> deduplication. Guice also does binding reduplication if the bindings are 
> exactly the same too.  Binding deduping is generally better, and safe 
> through Modules.override. 
>
> sam
> On Nov 4, 2013 12:51 PM, "Tavian Barnes" <[email protected] <javascript:>> 
> wrote:
>
>> Since Elements.getElements() creates a flat list of bindings, 
>> constructions that rely on module de-duplication in install() don't work 
>> perfectly with module re-writing.  For example:
>>
>> interface Interface {
>> }
>>
>> static class Implementation implements Interface {
>> }
>>
>> class Module1 extends AbstractModule {
>>   @Override
>>   public void configure() {
>>     bind(Interface.class).toInstance(new Implementation());
>>   }
>>
>>   @Override
>>   public boolean equals(Object obj) {
>>     return obj instanceof Module1;
>>   }
>>
>>   @Override
>>   public int hashCode() {
>>     return 0;
>>   }
>> }
>>
>> class Module2 extends AbstractModule {
>>   @Override
>>   public void configure() {
>>     install(new Module1());
>>     install(new Module1()); // Fine
>>     install(Elements.getModule(Elements.getElements(new Module1()))); // 
>> A binding to Interface was already configured...
>>   }
>> }
>>
>> This is especially noticeable with things like Multibinder/MapBinder 
>> which rely on module de-duplication.
>>
>> My idea to fix this is to add an Element implementation "InstalledModule" 
>> or something that would hold the bindings from installed modules, and 
>> replay them only if the module wasn't already installed in the target 
>> binder.
>>
>> That's obviously a pretty big change though.  Is there a better way I 
>> could approach this?  Is a "fix" even desired?
>>
>> -- 
>> 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.
>> 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.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to