Revision: 1555
Author: drew.mclaughlin
Date: Thu Jun 16 13:00:26 2011
Log: Implement hashCode and equals for MultimapBinder.
Prevents duplicate installations when using MapBinder.permitDuplicates(),
which installs a MultimapBinder every time it is called.
http://code.google.com/p/google-guice/source/detail?r=1555
Modified:
/trunk/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java
/trunk/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
=======================================
---
/trunk/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java
Sun Oct 31 11:38:24 2010
+++
/trunk/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java
Thu Jun 16 13:00:26 2011
@@ -44,6 +44,7 @@
import com.google.inject.util.Types;
import static com.google.inject.util.Types.newParameterizedTypeWithOwner;
import java.lang.annotation.Annotation;
+import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
@@ -565,6 +566,15 @@
}
});
}
+
+ @Override public int hashCode() {
+ return multimapKey.hashCode();
+ }
+
+ @Override public boolean equals(Object o) {
+ return o instanceof MultimapBinder
+ && ((MultimapBinder<?, ?>) o).multimapKey.equals(multimapKey);
+ }
}
private static final class MapEntry<K, V> implements Map.Entry<K, V> {
=======================================
---
/trunk/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
Sun Dec 12 18:44:36 2010
+++
/trunk/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
Thu Jun 16 13:00:26 2011
@@ -41,6 +41,9 @@
import com.google.inject.internal.util.ImmutableSet;
import com.google.inject.internal.util.Maps;
import com.google.inject.name.Names;
+import com.google.inject.spi.DefaultElementVisitor;
+import com.google.inject.spi.Element;
+import com.google.inject.spi.Elements;
import com.google.inject.spi.Dependency;
import com.google.inject.spi.HasDependencies;
import com.google.inject.util.Modules;
@@ -302,6 +305,7 @@
binder(), String.class, String.class);
multibinder.addBinding("a").toInstance("A");
multibinder.addBinding("b").toInstance("B");
+ multibinder.permitDuplicates();
}
};
Module bc = new AbstractModule() {
@@ -313,6 +317,17 @@
multibinder.permitDuplicates();
}
};
+ final Set<Key<?>> allBindings = new HashSet<Key<?>>();
+ for (Element element : Elements.getElements(ab, bc)) {
+ element.acceptVisitor(new DefaultElementVisitor<Void>() {
+ @Override public <T> Void visit(Binding<T> binding) {
+ Key<?> key = binding.getKey();
+ assertTrue(String.format("Duplicate binding for %s", key),
+ allBindings.add(binding.getKey()));
+ return null;
+ }
+ });
+ }
Injector injector = Guice.createInjector(ab, bc);
assertEquals(mapOf("a", "A", "b", "B", "c", "C"),
injector.getInstance(Key.get(mapOfString)));
--
You received this message because you are subscribed to the Google Groups
"google-guice-dev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-guice-dev?hl=en.