Correct, though I wouldn't be opposed to a patch that deduplicated if the listeners were equal.
sam On Tue, Nov 5, 2013 at 4:57 PM, Tavian Barnes <[email protected]> wrote: > 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]> 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]. >>> 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. >>> >> -- > 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. > -- 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.
