From 9363a2cf0114e04b63cb979fdb2ef0312da06ab1 Mon Sep 17 00:00:00 2001
From: Gary Gregory
+ * See {@link AbstractBuilder#setForceAccessible(boolean)} for details.
+ *
+ * In general, controls whether the instances built by this builder will force the accessible flag for reflection.
+ *
+ * Defaults to {@code getForceAccessible()}, which defaults to true for compatibility.
+ *
+ * This default is read from the system property {@code "AbstractReflection.forceAccessible"}, which defaults to true for compatibility.
+ *
+ * The parsing rules are as {@link Boolean#parseBoolean(String)}.
+ *
+ * See subclassses for specific behavior.
+ *
+ * The parsing rules are as {@link Boolean#parseBoolean(String)}.
+ *
+ * If the property is not set, return true.
+ *
It uses {@code AccessibleObject.setAccessible} to gain access to private @@ -181,7 +208,7 @@ public static boolean reflectionEquals(final Object lhs, final Object rhs, final } /** - * This method uses reflection to determine if the two {@link Object}s + * Uses reflection to determine if the two {@link Object}s * are equal. * *
It uses {@code AccessibleObject.setAccessible} to gain access to private @@ -235,7 +262,7 @@ public static boolean reflectionEquals(final Object lhs, final Object rhs, final } /** - * This method uses reflection to determine if the two {@link Object}s + * Uses reflection to determine if the two {@link Object}s * are equal. * *
It uses {@code AccessibleObject.setAccessible} to gain access to private @@ -268,7 +295,7 @@ public static boolean reflectionEquals(final Object lhs, final Object rhs, final } /** - * This method uses reflection to determine if the two {@link Object}s + * Uses reflection to determine if the two {@link Object}s * are equal. * *
It uses {@code AccessibleObject.setAccessible} to gain access to private @@ -293,7 +320,7 @@ public static boolean reflectionEquals(final Object lhs, final Object rhs, final } /** - * This method uses reflection to determine if the two {@link Object}s + * Uses reflection to determine if the two {@link Object}s * are equal. * *
It uses {@code AccessibleObject.setAccessible} to gain access to private
@@ -371,11 +398,16 @@ private static void unregister(final Object lhs, final Object rhs) {
* @see Object#equals(Object)
*/
public EqualsBuilder() {
+ super(builder());
// set up default classes to bypass reflection for
bypassReflectionClasses = new ArrayList<>(1);
bypassReflectionClasses.add(String.class); //hashCode field being lazy but not transient
}
+ private EqualsBuilder(Builder builder) {
+ super(builder);
+ }
+
/**
* Test if two {@code booleans}s are equal.
*
@@ -961,9 +993,8 @@ public EqualsBuilder reflectionAppend(final Object lhs, final Object rhs) {
try {
if (testClass.isArray()) {
append(lhs, rhs);
- } else //If either class is being excluded, call normal object equals method on lhsClass.
- if (bypassReflectionClasses != null
- && (bypassReflectionClasses.contains(lhsClass) || bypassReflectionClasses.contains(rhsClass))) {
+ } else // If either class is being excluded, call normal object equals method on lhsClass.
+ if (bypassReflectionClasses != null && (bypassReflectionClasses.contains(lhsClass) || bypassReflectionClasses.contains(rhsClass))) {
isEquals = lhs.equals(rhs);
} else {
reflectionAppend(lhs, rhs, testClass);
@@ -991,19 +1022,14 @@ public EqualsBuilder reflectionAppend(final Object lhs, final Object rhs) {
* @param rhs the right-hand side object
* @param clazz the class to append details of
*/
- private void reflectionAppend(
- final Object lhs,
- final Object rhs,
- final Class> clazz) {
-
+ private void reflectionAppend(final Object lhs, final Object rhs, final Class> clazz) {
if (isRegistered(lhs, rhs)) {
return;
}
-
try {
register(lhs, rhs);
final Field[] fields = clazz.getDeclaredFields();
- AccessibleObject.setAccessible(fields, true);
+ setAccessible(fields);
for (int i = 0; i < fields.length && isEquals; i++) {
final Field field = fields[i];
if (!ArrayUtils.contains(excludeFields, field.getName())
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 89610d298e6..d5737b7d65f 100644
--- a/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
@@ -17,7 +17,6 @@
package org.apache.commons.lang3.builder;
-import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Collection;
@@ -102,7 +101,53 @@
*
* @since 1.0
*/
-public class HashCodeBuilder implements Builder