You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2002/09/18 00:06:38 UTC
cvs commit: jakarta-commons/lang/src/java/org/apache/commons/lang/builder CompareToBuilder.java EqualsBuilder.java HashCodeBuilder.java
scolebourne 2002/09/17 15:06:38
Modified: lang/src/java/org/apache/commons/lang/builder
CompareToBuilder.java EqualsBuilder.java
HashCodeBuilder.java
Log:
Exclude static fields from reflection based builder
Revision Changes Path
1.2 +19 -14 jakarta-commons/lang/src/java/org/apache/commons/lang/builder/CompareToBuilder.java
Index: CompareToBuilder.java
===================================================================
RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/builder/CompareToBuilder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CompareToBuilder.java 15 Sep 2002 10:25:22 -0000 1.1
+++ CompareToBuilder.java 17 Sep 2002 22:06:37 -0000 1.2
@@ -128,9 +128,10 @@
* It is also not as efficient as testing explicitly.
* Transient members will be not be tested, as they are likely derived
* fields, and not part of the value of the object.
- * @param lhs - Left Hand Side
- * @param rhs - Right Hand Side
- * @return int - a negative integer, zero, or a positive integer as this
+ * Static fields will not be tested.
+ * @param lhs Left Hand Side
+ * @param rhs Right Hand Side
+ * @return int a negative integer, zero, or a positive integer as this
* object is less than, equal to, or greater than the specified object.
* @throws ClassCastException - if the specified object's type prevents it
* from being compared to this Object.
@@ -149,16 +150,18 @@
* If the TestTransients parameter is set to true, transient members will be
* tested, otherwise they are ignored, as they are likely derived fields, and
* not part of the value of the object.
+ * Static fields will not be tested.
*
- * @param lhs - Left Hand Side
- * @param rhs - Right Hand Side
- * @param testTransients - whether to include transient fields
+ * @param lhs Left Hand Side
+ * @param rhs Right Hand Side
+ * @param testTransients whether to include transient fields
* @return int - a negative integer, zero, or a positive integer as this
* object is less than, equal to, or greater than the specified object.
* @throws ClassCastException - if the specified object's type prevents it
* from being compared to this Object.
*/
- public static int reflectionCompare(Object lhs, Object rhs, boolean testTransients) {
+ public static int reflectionCompare(Object lhs, Object rhs,
+ boolean testTransients) {
if (lhs == rhs) {
return 0;
}
@@ -175,12 +178,14 @@
for (int i = 0; i < fields.length && compareToBuilder.comparison == 0; ++i) {
Field f = fields[i];
if (testTransients || !Modifier.isTransient(f.getModifiers())) {
- try {
- compareToBuilder.append(f.get(lhs), f.get(rhs));
- } catch (IllegalAccessException e) {
- //this can't happen. Would get a Security exception instead
- //throw a runtime exception in case the impossible happens.
- throw new InternalError("Unexpected IllegalAccessException");
+ if ( !Modifier.isStatic(f.getModifiers())) {
+ try {
+ compareToBuilder.append(f.get(lhs), f.get(rhs));
+ } catch (IllegalAccessException e) {
+ //this can't happen. Would get a Security exception instead
+ //throw a runtime exception in case the impossible happens.
+ throw new InternalError("Unexpected IllegalAccessException");
+ }
}
}
}
1.2 +20 -15 jakarta-commons/lang/src/java/org/apache/commons/lang/builder/EqualsBuilder.java
Index: EqualsBuilder.java
===================================================================
RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/builder/EqualsBuilder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- EqualsBuilder.java 12 Sep 2002 22:00:00 -0000 1.1
+++ EqualsBuilder.java 17 Sep 2002 22:06:38 -0000 1.2
@@ -129,11 +129,12 @@
* that it will throw a security exception if run under a security manger, if
* the permissions are not set up.
* It is also not as efficient as testing explicitly.
- * Transient members will be not be tested, as they are likely derived
- * fields, and not part of the value of the object.
+ * Transient members will be not be tested, as they are likely derived
+ * fields, and not part of the value of the object.
+ * Static fields will not be tested.
*
- * @param lhs - Left Hand Side
- * @param rhs - Right Hand Side
+ * @param lhs Left Hand Side
+ * @param rhs Right Hand Side
* @return boolean - if the two objects have tested equals.
*/
public static boolean reflectionEquals(Object lhs, Object rhs) {
@@ -150,13 +151,15 @@
* If the TestTransients parameter is set to true, transient members will be
* tested, otherwise they are ignored, as they are likely derived fields, and
* not part of the value of the object.
+ * Static fields will not be tested.
*
- * @param lhs - Left Hand Side
- * @param rhs - Right Hand Side
- * @param testTransients - whether to include transient fields
+ * @param lhs Left Hand Side
+ * @param rhs Right Hand Side
+ * @param testTransients whether to include transient fields
* @return boolean - if the two objects have tested equals.
*/
- public static boolean reflectionEquals(Object lhs, Object rhs, boolean testTransients) {
+ public static boolean reflectionEquals(Object lhs, Object rhs,
+ boolean testTransients) {
if (lhs == rhs) {
return true;
}
@@ -173,12 +176,14 @@
for (int i = 0; i < fields.length && equalsBuilder.isEquals; ++i) {
Field f = fields[i];
if (testTransients || !Modifier.isTransient(f.getModifiers())) {
- try {
- equalsBuilder.append(f.get(lhs), f.get(rhs));
- } catch (IllegalAccessException e) {
- //this can't happen. Would get a Security exception instead
- //throw a runtime exception in case the impossible happens.
- throw new InternalError("Unexpected IllegalAccessException");
+ if (!Modifier.isStatic(f.getModifiers())) {
+ try {
+ equalsBuilder.append(f.get(lhs), f.get(rhs));
+ } catch (IllegalAccessException e) {
+ //this can't happen. Would get a Security exception instead
+ //throw a runtime exception in case the impossible happens.
+ throw new InternalError("Unexpected IllegalAccessException");
+ }
}
}
}
1.2 +36 -30 jakarta-commons/lang/src/java/org/apache/commons/lang/builder/HashCodeBuilder.java
Index: HashCodeBuilder.java
===================================================================
RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/builder/HashCodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- HashCodeBuilder.java 12 Sep 2002 21:59:01 -0000 1.1
+++ HashCodeBuilder.java 17 Sep 2002 22:06:38 -0000 1.2
@@ -165,6 +165,7 @@
* It is also not as efficient as testing explicitly.
* Transient members will be not be used, as they are likely derived
* fields, and not part of the value of the object.
+ * Static fields will not be tested.
* This constructor uses two hard coded choices for the constants needed
* to build a hash code.
*
@@ -183,26 +184,22 @@
* that it will throw a security exception if run under a security manger, if
* the permissions are not set up.
* It is also not as efficient as testing explicitly.
- * Transient members will be not be used, as they are likely derived
- * fields, and not part of the value of the object.
- * <p>
- * Two randomly chosen, non-zero, odd numbers must be passed in. Ideally
- * these should be different for each class, however this is not vital.
- * Prime numbers are preferred, especially for the multiplier.
+ * If the TestTransients parameter is set to true, transient members will be
+ * tested, otherwise they are ignored, as they are likely derived fields, and
+ * not part of the value of the object.
+ * Static fields will not be tested.
+ * This constructor uses two hard coded choices for the constants needed
+ * to build a hash code.
*
- * @param initialNonZeroOddNumber
- * @param multiplierNonZeroOddNumber
* @param object the object to create a hash code for
+ * @param testTransients whether to include transient fields
* @return int hash code
* @throws IllegalArgumentException if the object is null
- * @throws IllegalArgumentException if the number is zero or even
*/
- public static int reflectionHashCode(
- int initialNonZeroOddNumber, int multiplierNonZeroOddNumber,
- Object object) {
- return reflectionHashCode(initialNonZeroOddNumber, multiplierNonZeroOddNumber, object);
+ public static int reflectionHashCode(Object object, boolean testTransients) {
+ return reflectionHashCode(17, 37, object, testTransients);
}
-
+
/**
* This method uses reflection to build a valid hash code.
* <p>
@@ -210,21 +207,27 @@
* that it will throw a security exception if run under a security manger, if
* the permissions are not set up.
* It is also not as efficient as testing explicitly.
- * If the TestTransients parameter is set to true, transient members will be
- * tested, otherwise they are ignored, as they are likely derived fields, and
- * not part of the value of the object.
- * This constructor uses two hard coded choices for the constants needed
- * to build a hash code.
+ * Transient members will be not be used, as they are likely derived
+ * fields, and not part of the value of the object.
+ * Static fields will not be tested.
+ * <p>
+ * Two randomly chosen, non-zero, odd numbers must be passed in. Ideally
+ * these should be different for each class, however this is not vital.
+ * Prime numbers are preferred, especially for the multiplier.
*
+ * @param initialNonZeroOddNumber
+ * @param multiplierNonZeroOddNumber
* @param object the object to create a hash code for
- * @param testTransients whether to include transient fields
* @return int hash code
* @throws IllegalArgumentException if the object is null
+ * @throws IllegalArgumentException if the number is zero or even
*/
- public static int reflectionHashCode(Object object, boolean testTransients) {
- return reflectionHashCode(17, 37, object, testTransients);
+ public static int reflectionHashCode(
+ int initialNonZeroOddNumber, int multiplierNonZeroOddNumber,
+ Object object) {
+ return reflectionHashCode(initialNonZeroOddNumber, multiplierNonZeroOddNumber, object, false);
}
-
+
/**
* This method uses reflection to build a valid hash code.
* <p>
@@ -235,6 +238,7 @@
* If the TestTransients parameter is set to true, transient members will be
* tested, otherwise they are ignored, as they are likely derived fields, and
* not part of the value of the object.
+ * Static fields will not be tested.
* <p>
* Two randomly chosen, non-zero, odd numbers must be passed in. Ideally
* these should be different for each class, however this is not vital.
@@ -261,12 +265,14 @@
for (int i = 0; i < fields.length; ++i) {
Field f = fields[i];
if (testTransients || !Modifier.isTransient(f.getModifiers())) {
- try {
- hashCodeBuilder.append(f.get(object));
- } catch (IllegalAccessException e) {
- //this can't happen. Would get a Security exception instead
- //throw a runtime exception in case the impossible happens.
- throw new InternalError("Unexpected IllegalAccessException");
+ if (!Modifier.isStatic(f.getModifiers())) {
+ try {
+ hashCodeBuilder.append(f.get(object));
+ } catch (IllegalAccessException e) {
+ //this can't happen. Would get a Security exception instead
+ //throw a runtime exception in case the impossible happens.
+ throw new InternalError("Unexpected IllegalAccessException");
+ }
}
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>