[REFRESH] JDK 9 RFR of JDK-8035279: Clean up internal deprecations in BigInteger
Paul Sandoz
paul.sandoz at oracle.com
Wed Feb 26 10:15:51 UTC 2014
On Feb 25, 2014, at 9:36 PM, Brian Burkhalter <brian.burkhalter at oracle.com> wrote:
>
> On Feb 25, 2014, at 4:26 AM, Paul Sandoz wrote:
>
>> Might as well just remove the @Deprecated stuff. I think it is fine under the circumstances to have offsets and getter methods that return the correct values.
>
> I have posted a new webrev taking this approach:
>
> http://cr.openjdk.java.net/~bpb/8035279/webrev.01/
>
> A review would be appreciated.
>
It might be worth refining the comments, replacing:
145 // These "redundant fields" are initialized with recognizable nonsense
146 // values, and cached the first time they are needed (or never, if they
147 // aren't needed).
with:
// The following fields are stable variables. A stable variable's value changes
// at most once from the default zero value to a non-zero stable value.
// A stable value is calculated lazily on demand.
//
/**
* One plus the bitCount of this BigInteger. This is a stable variable.
...
/**
* One plus the bitLength of this BigInteger. This is a stable variable.
...
/**
* Two plus the lowest set bit of this BigInteger. This is a stable variable.
Also, is @serial is relevant any more?
Plus to be pedantic for firstNonzeroIntNumPlusTwo with zero magnitudes:
/**
* Two plus the index of the lowest-order int in the magnitude of this
* BigInteger that contains a nonzero int. This is a stable variable.
* The least significant int has int-number 0, the next int in order of
* increasing significance has int-number 1, and so forth.
*
* <p>Note: never used for a BigInteger with a magnitude of zero.
* @see #firstNonzeroIntNum()
/**
* Returns the index of the int that contains the first nonzero int in the
* little-endian binary representation of the magnitude (int 0 is the
* least significant). If the magnitude is zero, return value is undefined.
*
* <p>Note: never used for a BigInteger with a magnitude of zero.
* @see #getInt.
*/
private int firstNonzeroIntNum() {
int fn = firstNonzeroIntNumPlusTwo - 2;
if (fn == -3) { // firstNonzeroIntNum not initialized yet
// Search for the first nonzero int
int i;
int mlen = mag.length;
for (i = mlen - 1; i >= 0 && mag[i] == 0; i--)
;
fn = mlen - i - 1;
firstNonzeroIntNumPlusTwo = fn + 2; // offset by two to initialize
}
return fn;
}
An unnecessary assignment is removed from the above method.
--
We can revisit and clean things up if/when the JMM is updated.
Paul.
More information about the core-libs-dev
mailing list