From bbd1dc343992fde4baaa0309178509dd07eed536 Mon Sep 17 00:00:00 2001 From: ggregory Date: Sun, 8 May 2016 09:34:34 -0700 Subject: [PATCH] [LANG-1218] EqualsBuilder.append(Object,Object) is too big to be inlined, which prevents whole builder to be scalarized. Closes #138. --- src/changes/changes.xml | 1 + .../commons/lang3/builder/EqualsBuilder.java | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index a4d815bfe..6e7d23051 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -22,6 +22,7 @@ + EqualsBuilder.append(Object,Object) is too big to be inlined, which prevents whole builder to be scalarized NumberUtils.createNumber() behaves inconsistently with NumberUtils.isNumber() Add support for varargs in ConstructorUtils, MemberUtils, and MethodUtils New methods for lang3.Validate diff --git a/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java b/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java index a47223dcb..b6c59de13 100644 --- a/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java +++ b/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java @@ -479,7 +479,22 @@ public EqualsBuilder append(final Object lhs, final Object rhs) { if (!lhsClass.isArray()) { // The simple case, not an array, just test the element isEquals = lhs.equals(rhs); - } else if (lhs.getClass() != rhs.getClass()) { + } else { + // factor out array case in order to keep method small enough + // to be inlined + appendArray(lhs, rhs); + } + return this; + } + + /** + *

Test if an Object is equal to an array.

+ * + * @param lhs the left hand object, an array + * @param rhs the right hand object + */ + private void appendArray(final Object lhs, final Object rhs) { + if (lhs.getClass() != rhs.getClass()) { // Here when we compare different dimensions, for example: a boolean[][] to a boolean[] this.setEquals(false); } @@ -505,7 +520,6 @@ else if (lhs instanceof long[]) { // Not an array of primitives append((Object[]) lhs, (Object[]) rhs); } - return this; } /**