[utilities COMMIT] in /java-support/trunk: doc/RELEASE-NOTES.txt src/main/java/net/shibboleth/utilities/java/support/...

noreply at shibboleth.net noreply at shibboleth.net
Tue Aug 20 19:55:31 EDT 2013


Author: putmanb
Date: Tue Aug 20 19:55:31 2013
New Revision: 425

URL: http://svn.shibboleth.net/view/utilities?rev=425&view=rev
Log:
JSPT-27: ClassToInstanceMultiMap get() returns duplicate values

Modified:
    java-support/trunk/doc/RELEASE-NOTES.txt
    java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMap.java
    java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMapTest.java

Modified: java-support/trunk/doc/RELEASE-NOTES.txt
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/doc/RELEASE-NOTES.txt?rev=425&r1=424&r2=425&view=diff
==============================================================================
--- java-support/trunk/doc/RELEASE-NOTES.txt (original)
+++ java-support/trunk/doc/RELEASE-NOTES.txt Tue Aug 20 19:55:31 2013
@@ -4,3 +4,4 @@
 [JSPT-16] - Add a ServletListener that configures logback with a specified configuration file
 [JSPT-23] - SerializeSupport prettyPrintXML has reverted impl to diverge from writeNode and nodeToString
 [JSPT-24] - Type4UuidIdentifier and RandomIdentifier generation strategies do not generate a valid XML ID
+[JSPT-27] - ClassToInstanceMultiMap get() returns duplicate values

Modified: java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMap.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMap.java?rev=425&r1=424&r2=425&view=diff
==============================================================================
--- java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMap.java (original)
+++ java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMap.java Tue Aug 20 19:55:31 2013
@@ -21,6 +21,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -157,7 +158,7 @@
             values.add(value);
         }
 
-        final ArrayList<Class<?>> valueTypes = new ArrayList<Class<?>>();
+        final HashSet<Class<?>> valueTypes = new HashSet<Class<?>>();
         valueTypes.add(value.getClass());
 
         if (indexSupertypes) {
@@ -230,7 +231,7 @@
      * @param clazz class for which supertypes will be determined
      * @param accumulator collection to which supertypes are added as they are determined
      */
-    private void getSuperTypes(final Class<?> clazz, final ArrayList<Class<?>> accumulator) {
+    private void getSuperTypes(final Class<?> clazz, Set<Class<?>> accumulator) {
         final Class<?> superclass = clazz.getSuperclass();
         if (superclass != null && superclass != Object.class) {
             accumulator.add(superclass);

Modified: java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMapTest.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMapTest.java?rev=425&r1=424&r2=425&view=diff
==============================================================================
--- java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMapTest.java (original)
+++ java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/collection/ClassToInstanceMultiMapTest.java Tue Aug 20 19:55:31 2013
@@ -117,6 +117,18 @@
         values = map.get(Instant.class);
         Assert.assertEquals(values.size(), 1);
     }
+    
+    @Test public void testNoIndexedDuplicateValues() {
+        ClassToInstanceMultiMap<Object> map = new ClassToInstanceMultiMap<Object>(true);
+        
+        map.put(new FooBarImpl());
+        
+        Assert.assertEquals(map.get(Foo.class).size(), 1);
+        Assert.assertEquals(map.get(Bar.class).size(), 1);
+        Assert.assertEquals(map.get(AbstractFoo.class).size(), 1);
+        Assert.assertEquals(map.get(AbstractFooBar.class).size(), 1);
+        Assert.assertEquals(map.get(FooBarImpl.class).size(), 1);
+    }
 
     protected void populate(ClassToInstanceMultiMap<AbstractInstant> map) {
         DateTime now = new DateTime();
@@ -128,4 +140,20 @@
         Instant instant = new Instant();
         map.put(instant);
     }
+    
+    
+    // Test classes and interfaces
+    
+    public interface Foo { };
+    
+    public interface Bar extends Foo { };
+    
+    public abstract class AbstractFoo implements Foo { };
+    
+    public class FooImpl extends AbstractFoo { };
+    
+    public abstract class AbstractFooBar extends AbstractFoo implements Bar { };
+    
+    public class FooBarImpl extends AbstractFooBar { };
+    
 }



More information about the commits mailing list