LANG-804 - Redundant check for zero in HashCodeBuilder ctor. Patch provided by Allon Mureinik via github.

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1526817 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Benedikt Ritter 2013-09-27 07:49:02 +00:00
parent 9ad1a4df47
commit 26375b2cfd
3 changed files with 19 additions and 19 deletions

View File

@ -22,6 +22,7 @@
<body> <body>
<release version="3.2" date="TBA" description="Next release"> <release version="3.2" date="TBA" description="Next release">
<action issue="LANG-804" type="update" dev="britter" due-to="Allon Mureinik">Redundant check for zero in HashCodeBuilder ctor</action>
<action issue="LANG-893" type="add" dev="oheger" due-to="Woonsan Ko">StrSubstitutor now supports default values for variables</action> <action issue="LANG-893" type="add" dev="oheger" due-to="Woonsan Ko">StrSubstitutor now supports default values for variables</action>
<action issue="LANG-913" type="add" dev="britter" due-to="Allon Mureinik">Adding .gitignore to commons-lang</action> <action issue="LANG-913" type="add" dev="britter" due-to="Allon Mureinik">Adding .gitignore to commons-lang</action>
<action issue="LANG-837" type="add">Add ObjectUtils.toIdentityString methods that support StringBuilder, StrBuilder, and Appendable</action> <action issue="LANG-837" type="add">Add ObjectUtils.toIdentityString methods that support StringBuilder, StrBuilder, and Appendable</action>

View File

@ -520,7 +520,7 @@ public class HashCodeBuilder implements Builder<Integer> {
/** /**
* <p> * <p>
* Two randomly chosen, non-zero, odd numbers must be passed in. Ideally these should be different for each class, * Two randomly chosen, odd numbers must be passed in. Ideally these should be different for each class,
* however this is not vital. * however this is not vital.
* </p> * </p>
* *
@ -528,28 +528,22 @@ public class HashCodeBuilder implements Builder<Integer> {
* Prime numbers are preferred, especially for the multiplier. * Prime numbers are preferred, especially for the multiplier.
* </p> * </p>
* *
* @param initialNonZeroOddNumber * @param initialOddNumber
* a non-zero, odd number used as the initial value * am odd number used as the initial value
* @param multiplierNonZeroOddNumber * @param multiplierOddNumber
* a non-zero, odd number used as the multiplier * an odd number used as the multiplier
* @throws IllegalArgumentException * @throws IllegalArgumentException
* if the number is zero or even * if the number is even
*/ */
public HashCodeBuilder(final int initialNonZeroOddNumber, final int multiplierNonZeroOddNumber) { public HashCodeBuilder(final int initialOddNumber, final int multiplierOddNumber) {
if (initialNonZeroOddNumber == 0) { if (initialOddNumber % 2 == 0) {
throw new IllegalArgumentException("HashCodeBuilder requires a non zero initial value");
}
if (initialNonZeroOddNumber % 2 == 0) {
throw new IllegalArgumentException("HashCodeBuilder requires an odd initial value"); throw new IllegalArgumentException("HashCodeBuilder requires an odd initial value");
} }
if (multiplierNonZeroOddNumber == 0) { if (multiplierOddNumber % 2 == 0) {
throw new IllegalArgumentException("HashCodeBuilder requires a non zero multiplier");
}
if (multiplierNonZeroOddNumber % 2 == 0) {
throw new IllegalArgumentException("HashCodeBuilder requires an odd multiplier"); throw new IllegalArgumentException("HashCodeBuilder requires an odd multiplier");
} }
iConstant = multiplierNonZeroOddNumber; iConstant = multiplierOddNumber;
iTotal = initialNonZeroOddNumber; iTotal = initialOddNumber;
} }
/** /**

View File

@ -55,15 +55,20 @@ public class HashCodeBuilderTest {
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
@Test(expected=IllegalArgumentException.class) @Test(expected=IllegalArgumentException.class)
public void testConstructorEx1() { public void testConstructorExZero() {
new HashCodeBuilder(0, 0); new HashCodeBuilder(0, 0);
} }
@Test(expected=IllegalArgumentException.class) @Test(expected=IllegalArgumentException.class)
public void testConstructorEx2() { public void testConstructorExEven() {
new HashCodeBuilder(2, 2); new HashCodeBuilder(2, 2);
} }
@Test(expected=IllegalArgumentException.class)
public void testConstructorExEvenNegative() {
new HashCodeBuilder(-2, -2);
}
static class TestObject { static class TestObject {
private int a; private int a;