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>
*