RFR: 8315968: Consolidate java.util.Digits and StringLatin1::PACKED_DIGITS [v7]
Chen Liang
liach at openjdk.org
Mon Sep 11 14:36:48 UTC 2023
On Mon, 11 Sep 2023 12:23:36 GMT, 温绍锦 <duke at openjdk.org> wrote:
>> Some codes in core libs are duplicated, including:
>> java.util.DecimalDigits::DIGITS -> java.lang.StringLatin1.PACKED_DIGITS
>> java.util.DecimalDigits::size -> java.lang.Long.stringSize
>>
>> We can reduce duplication through JavaLangAccess, which is also needed in other places, such as:
>> https://github.com/openjdk/jdk/pull/15555
>
> 温绍锦 has updated the pull request incrementally with one additional commit since the last revision:
>
> move java.lang.StringLatin1::getChars to jdk.internal.util.DecimalDigits::getCharsLatin1
In short: I suggest splitting the change of moving `getChars` `stringSize` into another patch; they are sufficiently distinct and can shrink this PR's size by a half at least.
src/java.base/share/classes/java/lang/StringLatin1.java line 35:
> 33: import java.util.stream.Stream;
> 34: import java.util.stream.StreamSupport;
> 35: import jdk.internal.util.ArraysSupport;
Suggestion:
import jdk.internal.util.ArraysSupport;
import jdk.internal.util.DecimalDigits;
Assuming you will restore the `getChars` here.
src/java.base/share/classes/java/lang/StringLatin1.java line 42:
> 40: import static java.lang.String.checkIndex;
> 41: import static java.lang.String.checkOffset;
> 42: import static jdk.internal.util.DecimalDigits.digitPair;
Suggestion:
Redundant.
src/java.base/share/classes/java/lang/StringUTF16.java line 45:
> 43:
> 44: import static jdk.internal.util.DecimalDigits.digitPair;
> 45:
Suggestion:
Per previous comments.
Remember to add another line of
import jdk.internal.util.DecimalDigits;
above!
src/java.base/share/classes/java/lang/StringUTF16.java line 1549:
> 1547: i = q;
> 1548:
> 1549: int packed = (int) digitPair(r);
Suggestion:
int packed = (int) DecimalDigits.digitPair(r);
src/java.base/share/classes/java/lang/StringUTF16.java line 1558:
> 1556: // We know there are at most two digits left at this point.
> 1557: if (i < -9) {
> 1558: int packed = (int) digitPair(-i);
Suggestion:
int packed = (int) DecimalDigits.digitPair(-i);
src/java.base/share/classes/java/lang/StringUTF16.java line 1596:
> 1594: q = i / 100;
> 1595:
> 1596: int packed = (int) digitPair((int)((q * 100) - i));
Suggestion:
int packed = (int) DecimalDigits.digitPair((int)((q * 100) - i));
src/java.base/share/classes/java/lang/StringUTF16.java line 1610:
> 1608: q2 = i2 / 100;
> 1609:
> 1610: int packed = (int) digitPair((q2 * 100) - i2);
Suggestion:
int packed = (int) DecimalDigits.digitPair((q2 * 100) - i2);
src/java.base/share/classes/java/lang/StringUTF16.java line 1622:
> 1620: charPos -= 2;
> 1621:
> 1622: int packed = (int) digitPair(-i2);
Suggestion:
int packed = (int) DecimalDigits.digitPair(-i2);
src/java.base/share/classes/jdk/internal/util/DecimalDigits.java line 43:
> 41: }
> 42:
> 43: public int digits(long value, byte[] buffer, int index, MethodHandle putCharMH) throws Throwable {
`@Override`
src/java.base/share/classes/jdk/internal/util/DecimalDigits.java line 143:
> 141: * code after loop unrolling.
> 142: */
> 143: public static int stringSize(int x) {
I suggest splitting the moves of `stringSize` `getChars` into a new PR dependent on this one; your future date and time optimizations can depend on that one, which exposes stringSize.
Having the DecimalDigits package move and `stringSize` `getChars` moves together complicates the file changes, and it's hard to detect if there's any accidental typo/malicious code in the new additions.
src/java.base/share/classes/jdk/internal/util/OctalDigits.java line 68:
> 66:
> 67: @Override
> 68: public int digits(long value, byte[] buffer, int index, MethodHandle putCharMH) throws Throwable {
Can you revert these IDE reformatting changes? So that we don't pollute the changeset and the Git blame log, making reviews and reverting patches easier.
For example, only 3 lines of changes are truly necessary in this class:
Changing the package, `public ` before `final class OctalDigits` and `static final Digits INSTANCE`.
-------------
PR Review: https://git.openjdk.org/jdk/pull/15651#pullrequestreview-1619894567
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321648971
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321650127
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321646310
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321647751
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321647883
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321648031
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321648149
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321648317
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321487786
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321644436
PR Review Comment: https://git.openjdk.org/jdk/pull/15651#discussion_r1321640635
More information about the core-libs-dev
mailing list