You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by pa...@apache.org on 2016/06/08 20:28:34 UTC

[2/3] [lang] LANG-1229: HashCodeBuilder.append(Object, Object) is too big to be inlined, which prevents whole builder to be scalarized (closes #142)

LANG-1229: HashCodeBuilder.append(Object,Object) is too big to be inlined, which prevents whole builder to be scalarized (closes #142)


Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/18b1bc20
Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/18b1bc20
Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/18b1bc20

Branch: refs/heads/master
Commit: 18b1bc203bdb236bfd9084193aa2d55d4b605139
Parents: 9bd439b
Author: Philippe Marschall <ph...@gmail.com>
Authored: Sun May 15 16:28:48 2016 +0200
Committer: pascalschumacher <pa...@gmx.net>
Committed: Wed Jun 8 22:27:58 2016 +0200

----------------------------------------------------------------------
 .../commons/lang3/builder/HashCodeBuilder.java  | 60 ++++++++++++--------
 1 file changed, 37 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-lang/blob/18b1bc20/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java b/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
index 70ca945..98ed5c5 100644
--- a/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
@@ -847,29 +847,10 @@ public class HashCodeBuilder implements Builder<Integer> {
             iTotal = iTotal * iConstant;
 
         } else {
-            if(object.getClass().isArray()) {
-                // 'Switch' on type of array, to dispatch to the correct handler
-                // This handles multi dimensional arrays
-                if (object instanceof long[]) {
-                    append((long[]) object);
-                } else if (object instanceof int[]) {
-                    append((int[]) object);
-                } else if (object instanceof short[]) {
-                    append((short[]) object);
-                } else if (object instanceof char[]) {
-                    append((char[]) object);
-                } else if (object instanceof byte[]) {
-                    append((byte[]) object);
-                } else if (object instanceof double[]) {
-                    append((double[]) object);
-                } else if (object instanceof float[]) {
-                    append((float[]) object);
-                } else if (object instanceof boolean[]) {
-                    append((boolean[]) object);
-                } else {
-                    // Not an array of primitives
-                    append((Object[]) object);
-                }
+            if (object.getClass().isArray()) {
+                // factor out array case in order to keep method small enough
+                // to be inlined
+                appendArray(object);
             } else {
                 iTotal = iTotal * iConstant + object.hashCode();
             }
@@ -879,6 +860,39 @@ public class HashCodeBuilder implements Builder<Integer> {
 
     /**
      * <p>
+     * Append a <code>hashCode</code> for an array.
+     * </p>
+     *
+     * @param object
+     *            the array to add to the <code>hashCode</code>
+     */
+    private void appendArray(final Object object) {
+        // 'Switch' on type of array, to dispatch to the correct handler
+        // This handles multi dimensional arrays
+        if (object instanceof long[]) {
+            append((long[]) object);
+        } else if (object instanceof int[]) {
+            append((int[]) object);
+        } else if (object instanceof short[]) {
+            append((short[]) object);
+        } else if (object instanceof char[]) {
+            append((char[]) object);
+        } else if (object instanceof byte[]) {
+            append((byte[]) object);
+        } else if (object instanceof double[]) {
+            append((double[]) object);
+        } else if (object instanceof float[]) {
+            append((float[]) object);
+        } else if (object instanceof boolean[]) {
+            append((boolean[]) object);
+        } else {
+            // Not an array of primitives
+            append((Object[]) object);
+        }
+    }
+
+    /**
+     * <p>
      * Append a <code>hashCode</code> for an <code>Object</code> array.
      * </p>
      *