Hey Tavis, could you file these as issues on the issue site @ https://code.google.com/p/google-guice/issues/list and attach the patches as separate files? Thanks!
sam On Wed, Nov 6, 2013 at 4:17 PM, Tavian Barnes <[email protected]>wrote: > If a binding has two equivalent ProvisionListeners, only fire one of them. > --- > .../inject/internal/ProvisionListenerStackCallback.java | 9 ++++++--- > core/test/com/google/inject/ProvisionListenerTest.java | 13 > +++++++++++++ > 2 files changed, 19 insertions(+), 3 deletions(-) > > diff --git > a/core/src/com/google/inject/internal/ProvisionListenerStackCallback.java > b/core/src/com/google/inject/internal/ProvisionListenerStackCallback.java > index a99c513..45347f0 100644 > --- > a/core/src/com/google/inject/internal/ProvisionListenerStackCallback.java > +++ > b/core/src/com/google/inject/internal/ProvisionListenerStackCallback.java > @@ -16,14 +16,16 @@ > > package com.google.inject.internal; > > +import java.util.List; > +import java.util.Set; > + > import com.google.common.collect.ImmutableList; > +import com.google.common.collect.Sets; > import com.google.inject.Binding; > import com.google.inject.ProvisionException; > import com.google.inject.spi.DependencyAndSource; > import com.google.inject.spi.ProvisionListener; > > -import java.util.List; > - > /** > * Intercepts provisions with a stack of listeners. > * > @@ -49,7 +51,8 @@ final class ProvisionListenerStackCallback<T> { > if (listeners.isEmpty()) { > this.listeners = EMPTY_LISTENER; > } else { > - this.listeners = listeners.toArray(new > ProvisionListener[listeners.size()]); > + Set<ProvisionListener> deDuplicated = > Sets.newLinkedHashSet(listeners); > + this.listeners = deDuplicated.toArray(new > ProvisionListener[deDuplicated.size()]); > } > } > > diff --git a/core/test/com/google/inject/ProvisionListenerTest.java > b/core/test/com/google/inject/ProvisionListenerTest.java > index 478949f..54a11fa 100644 > --- a/core/test/com/google/inject/ProvisionListenerTest.java > +++ b/core/test/com/google/inject/ProvisionListenerTest.java > @@ -694,4 +694,17 @@ public class ProvisionListenerTest extends TestCase { > this.x = xProvider.get(); > } > } > + > + public void testDeDuplicateProvisionListeners() { > + final Counter counter = new Counter(); > + Injector injector = Guice.createInjector(new AbstractModule() { > + @Override > + protected void configure() { > + bindListener(Matchers.any(), counter); > + bindListener(Matchers.any(), counter); > + } > + }); > + injector.getInstance(Many.class); > + assertEquals("ProvisionListener not de-duplicated", 1, counter.count); > + } > } > -- > 1.8.4.2 > > -- > 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.
