Fix MapBinder's duplicate key error message so that more than one binding with the same source gets listed twice.  This was causing a problem with the tests that turned stack traces off, because the two different bindings line numbers were both changed to "Unknown Source", so it collapsed them into a single item.

Maven ran all the flag variations for core + extensions.
Internal builds ran them all just for core, not the extensions (fixed in this CL).
Ant runs them all for core, but doesn't even run any extension tests AFAICT (not fixed in this CL).
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64143669
diff --git a/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java b/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java
index af529e4..c5b752e 100644
--- a/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java
+++ b/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java
@@ -25,14 +25,15 @@
 import static com.google.inject.util.Types.newParameterizedType;
 import static com.google.inject.util.Types.newParameterizedTypeWithOwner;
 
+import com.google.common.base.Supplier;
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
 import com.google.common.collect.Sets;
 import com.google.inject.Binder;
 import com.google.inject.Binding;
@@ -56,6 +57,7 @@
 import com.google.inject.util.Types;
 
 import java.lang.annotation.Annotation;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -404,7 +406,9 @@
             bindingsMutable.add(Maps.immutableEntry(entry.getKey(), injector.getBinding(valueKey)));
           }
           if (duplicateKeys != null) {
-            Multimap<K, String> dups = LinkedHashMultimap.create();
+            // Must use a ListMultimap in case more than one binding has the same source
+            // and is listed multiple times.
+            Multimap<K, String> dups = newLinkedKeyArrayValueMultimap();
             for (Map.Entry<K, Binding<V>> entry : bindingsMutable) {
               if (duplicateKeys.contains(entry.getKey())) {
                 dups.put(entry.getKey(), "\t at " + Errors.convert(entry.getValue().getSource()));
@@ -762,5 +766,15 @@
         return equality.hashCode();
       }
     }
+
+    private Multimap<K, String> newLinkedKeyArrayValueMultimap() {
+      return Multimaps.newListMultimap(
+          new LinkedHashMap<K, Collection<String>>(),
+          new Supplier<List<String>>() {
+            @Override public List<String> get() {
+              return Lists.newArrayList();
+            }
+          });
+    }
   }
 }