CollectionUtility.hashCode must return the same for equal collections.

Previously CollectionUtility.hasCode did not return the same hashCode
for two equal collections. The expectation would be that
CollectionUtility.hashCode also respects the Object.equals and
Object.hashCode contract.

212358

Conflicts:
	org.eclipse.scout.rt.platform.test/src/test/java/org/eclipse/scout/rt/platform/util/CollectionUtilityTest.java

Change-Id: I35d001a4424c0be43eaea2057aa2a900e1cd9f52
Reviewed-on: https://git.eclipse.org/r/102428
Tested-by: Hudson CI
Reviewed-by: Matthias Otterbach <matthias.otterbach@bsi-software.com>
Reviewed-on: https://git.eclipse.org/r/102430
diff --git a/org.eclipse.scout.rt.platform.test/src/test/java/org/eclipse/scout/rt/platform/util/CollectionUtilityTest.java b/org.eclipse.scout.rt.platform.test/src/test/java/org/eclipse/scout/rt/platform/util/CollectionUtilityTest.java
index 00ef00d..8579fc7 100644
--- a/org.eclipse.scout.rt.platform.test/src/test/java/org/eclipse/scout/rt/platform/util/CollectionUtilityTest.java
+++ b/org.eclipse.scout.rt.platform.test/src/test/java/org/eclipse/scout/rt/platform/util/CollectionUtilityTest.java
@@ -24,6 +24,7 @@
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Queue;
@@ -406,6 +407,21 @@
     assertFalse(CollectionUtility.isEmpty(map));
   }
 
+  @Test
+  public void testHashCode() {
+    LinkedHashSet<CompositeObject> s = new LinkedHashSet<>();
+    CompositeObject a = new CompositeObject("1");
+    s.add(a);
+    s.add(new CompositeObject("2"));
+    LinkedHashSet<CompositeObject> s1 = new LinkedHashSet<>(s);
+    s.remove(a);
+    s.add(a);
+    LinkedHashSet<CompositeObject> s2 = new LinkedHashSet<>(s);
+    assertEquals(s1.hashCode(), s2.hashCode());
+    assertEquals(CollectionUtility.hashCode(s1), CollectionUtility.hashCode(s2));
+    assertEquals(s1, s2);
+  }
+
   private List<Object> createList(Object... elements) {
     List<Object> list = new ArrayList<Object>();
     for (Object o : elements) {
diff --git a/org.eclipse.scout.rt.platform/src/main/java/org/eclipse/scout/rt/platform/util/CollectionUtility.java b/org.eclipse.scout.rt.platform/src/main/java/org/eclipse/scout/rt/platform/util/CollectionUtility.java
index 42fd523..3f33c14 100644
--- a/org.eclipse.scout.rt.platform/src/main/java/org/eclipse/scout/rt/platform/util/CollectionUtility.java
+++ b/org.eclipse.scout.rt.platform/src/main/java/org/eclipse/scout/rt/platform/util/CollectionUtility.java
@@ -11,7 +11,6 @@
 package org.eclipse.scout.rt.platform.util;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -773,7 +772,7 @@
     if (c == null) {
       return 0;
     }
-    return Arrays.hashCode(c.toArray());
+    return c.hashCode();
   }
 
   // TODO [7.0] abr: ???