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.

Reply via email to