Skip to content

Commit bbe5e83

Browse files
committed
8363925: Remove unused sun.nio.cs.ArrayEncoder::encode
Reviewed-by: liach
1 parent 8457f38 commit bbe5e83

File tree

9 files changed

+100
-231
lines changed

9 files changed

+100
-231
lines changed

src/java.base/share/classes/java/lang/String.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -914,11 +914,10 @@ private static <E extends Exception> byte[] encodeWithEncoder(
914914
return ba;
915915
}
916916

917-
int blen = (coder == LATIN1) ? ae.encodeFromLatin1(val, 0, len, ba)
918-
: ae.encodeFromUTF16(val, 0, len, ba);
919-
if (blen != -1) {
920-
return trimArray(ba, blen);
921-
}
917+
int blen = coder == LATIN1
918+
? ae.encodeFromLatin1(val, 0, len, ba, 0)
919+
: ae.encodeFromUTF16(val, 0, len, ba, 0);
920+
return trimArray(ba, blen);
922921
}
923922

924923
byte[] ba = new byte[en];

src/java.base/share/classes/sun/nio/cs/ArrayEncoder.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -25,25 +25,17 @@
2525

2626
package sun.nio.cs;
2727

28-
/*
29-
* FastPath char[]/byte[] -> byte[] encoder, REPLACE on malformed input or
30-
* unmappable input.
28+
/**
29+
* Fast-path for {@code byte[]}-to-{@code byte[]} encoding,
30+
* {@link java.nio.charset.CodingErrorAction#REPLACE REPLACE} on malformed
31+
* input, or unmappable input.
3132
*/
32-
3333
public interface ArrayEncoder {
3434

35-
// is only used by j.u.zip.ZipCoder for utf8
36-
int encode(char[] src, int off, int len, byte[] dst);
35+
int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst, int dp);
3736

38-
default int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst) {
39-
return -1;
40-
}
37+
int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst, int dp);
4138

42-
default int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst) {
43-
return -1;
44-
}
39+
boolean isASCIICompatible();
4540

46-
default boolean isASCIICompatible() {
47-
return false;
48-
}
4941
}

src/java.base/share/classes/sun/nio/cs/CESU_8.java

Lines changed: 2 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,7 @@ public int decode(byte[] sa, int sp, int len, char[] da) {
394394
}
395395
}
396396

397-
private static class Encoder extends CharsetEncoder
398-
implements ArrayEncoder {
397+
private static class Encoder extends CharsetEncoder {
399398

400399
private Encoder(Charset cs) {
401400
super(cs, 1.1f, 3.0f);
@@ -544,48 +543,6 @@ protected final CoderResult encodeLoop(CharBuffer src,
544543
return encodeBufferLoop(src, dst);
545544
}
546545

547-
// returns -1 if there is malformed char(s) and the
548-
// "action" for malformed input is not REPLACE.
549-
public int encode(char[] sa, int sp, int len, byte[] da) {
550-
int sl = sp + len;
551-
int dp = 0;
552-
553-
// Handle ASCII-only prefix
554-
int n = JLA.encodeASCII(sa, sp, da, dp, Math.min(len, da.length));
555-
sp += n;
556-
dp += n;
557-
558-
while (sp < sl) {
559-
char c = sa[sp++];
560-
if (c < 0x80) {
561-
// Have at most seven bits
562-
da[dp++] = (byte)c;
563-
} else if (c < 0x800) {
564-
// 2 bytes, 11 bits
565-
da[dp++] = (byte)(0xc0 | (c >> 6));
566-
da[dp++] = (byte)(0x80 | (c & 0x3f));
567-
} else if (Character.isSurrogate(c)) {
568-
if (sgp == null)
569-
sgp = new Surrogate.Parser();
570-
int uc = sgp.parse(c, sa, sp - 1, sl);
571-
if (uc < 0) {
572-
if (malformedInputAction() != CodingErrorAction.REPLACE)
573-
return -1;
574-
da[dp++] = replacement()[0];
575-
} else {
576-
to3Bytes(da, dp, Character.highSurrogate(uc));
577-
dp += 3;
578-
to3Bytes(da, dp, Character.lowSurrogate(uc));
579-
dp += 3;
580-
sp++; // 2 chars
581-
}
582-
} else {
583-
// 3 bytes, 16 bits
584-
to3Bytes(da, dp, c);
585-
dp += 3;
586-
}
587-
}
588-
return dp;
589-
}
590546
}
547+
591548
}

src/java.base/share/classes/sun/nio/cs/DoubleByte.java

Lines changed: 4 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -682,40 +682,7 @@ protected void implReplaceWith(byte[] newReplacement) {
682682
}
683683

684684
@Override
685-
public int encode(char[] src, int sp, int len, byte[] dst) {
686-
int dp = 0;
687-
int sl = sp + len;
688-
if (isASCIICompatible) {
689-
int n = JLA.encodeASCII(src, sp, dst, dp, len);
690-
sp += n;
691-
dp += n;
692-
}
693-
while (sp < sl) {
694-
char c = src[sp++];
695-
int bb = encodeChar(c);
696-
if (bb == UNMAPPABLE_ENCODING) {
697-
if (Character.isHighSurrogate(c) && sp < sl &&
698-
Character.isLowSurrogate(src[sp])) {
699-
sp++;
700-
}
701-
dst[dp++] = repl[0];
702-
if (repl.length > 1)
703-
dst[dp++] = repl[1];
704-
continue;
705-
} //else
706-
if (bb > MAX_SINGLEBYTE) { // DoubleByte
707-
dst[dp++] = (byte)(bb >> 8);
708-
dst[dp++] = (byte)bb;
709-
} else { // SingleByte
710-
dst[dp++] = (byte)bb;
711-
}
712-
}
713-
return dp;
714-
}
715-
716-
@Override
717-
public int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst) {
718-
int dp = 0;
685+
public int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst, int dp) {
719686
int sl = sp + len;
720687
while (sp < sl) {
721688
char c = (char)(src[sp++] & 0xff);
@@ -740,8 +707,7 @@ public int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst) {
740707
}
741708

742709
@Override
743-
public int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst) {
744-
int dp = 0;
710+
public int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst, int dp) {
745711
int sl = sp + len;
746712
while (sp < sl) {
747713
char c = StringUTF16.getChar(src, sp++);
@@ -1000,49 +966,7 @@ protected CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
1000966
}
1001967

1002968
@Override
1003-
public int encode(char[] src, int sp, int len, byte[] dst) {
1004-
int dp = 0;
1005-
int sl = sp + len;
1006-
while (sp < sl) {
1007-
char c = src[sp++];
1008-
int bb = encodeChar(c);
1009-
1010-
if (bb == UNMAPPABLE_ENCODING) {
1011-
if (Character.isHighSurrogate(c) && sp < sl &&
1012-
Character.isLowSurrogate(src[sp])) {
1013-
sp++;
1014-
}
1015-
dst[dp++] = repl[0];
1016-
if (repl.length > 1)
1017-
dst[dp++] = repl[1];
1018-
continue;
1019-
} //else
1020-
if (bb > MAX_SINGLEBYTE) { // DoubleByte
1021-
if (currentState == SBCS) {
1022-
currentState = DBCS;
1023-
dst[dp++] = SO;
1024-
}
1025-
dst[dp++] = (byte)(bb >> 8);
1026-
dst[dp++] = (byte)bb;
1027-
} else { // SingleByte
1028-
if (currentState == DBCS) {
1029-
currentState = SBCS;
1030-
dst[dp++] = SI;
1031-
}
1032-
dst[dp++] = (byte)bb;
1033-
}
1034-
}
1035-
1036-
if (currentState == DBCS) {
1037-
currentState = SBCS;
1038-
dst[dp++] = SI;
1039-
}
1040-
return dp;
1041-
}
1042-
1043-
@Override
1044-
public int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst) {
1045-
int dp = 0;
969+
public int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst, int dp) {
1046970
int sl = sp + len;
1047971
while (sp < sl) {
1048972
char c = (char)(src[sp++] & 0xff);
@@ -1077,8 +1001,7 @@ public int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst) {
10771001
}
10781002

10791003
@Override
1080-
public int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst) {
1081-
int dp = 0;
1004+
public int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst, int dp) {
10821005
int sl = sp + len;
10831006
while (sp < sl) {
10841007
char c = StringUTF16.getChar(src, sp++);

src/java.base/share/classes/sun/nio/cs/HKSCS.java

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -352,37 +352,9 @@ protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
352352
return encodeBufferLoop(src, dst);
353353
}
354354

355-
public int encode(char[] src, int sp, int len, byte[] dst) {
356-
int dp = 0;
357-
int sl = sp + len;
358-
while (sp < sl) {
359-
char c = src[sp++];
360-
int bb = encodeChar(c);
361-
if (bb == UNMAPPABLE_ENCODING) {
362-
if (!Character.isHighSurrogate(c) || sp == sl ||
363-
!Character.isLowSurrogate(src[sp]) ||
364-
(bb = encodeSupp(Character.toCodePoint(c, src[sp++])))
365-
== UNMAPPABLE_ENCODING) {
366-
dst[dp++] = repl[0];
367-
if (repl.length > 1)
368-
dst[dp++] = repl[1];
369-
continue;
370-
}
371-
}
372-
if (bb > MAX_SINGLEBYTE) { // DoubleByte
373-
dst[dp++] = (byte)(bb >> 8);
374-
dst[dp++] = (byte)bb;
375-
} else { // SingleByte
376-
dst[dp++] = (byte)bb;
377-
}
378-
}
379-
return dp;
380-
}
381-
382-
public int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst) {
383-
int dp = 0;
355+
@Override
356+
public int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst, int dp) {
384357
int sl = sp + len;
385-
int dl = dst.length;
386358
while (sp < sl) {
387359
char c = StringUTF16.getChar(src, sp++);
388360
int bb = encodeChar(c);

src/java.base/share/classes/sun/nio/cs/SingleByte.java

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -290,32 +290,8 @@ protected void implReplaceWith(byte[] newReplacement) {
290290
repl = newReplacement[0];
291291
}
292292

293-
public int encode(char[] src, int sp, int len, byte[] dst) {
294-
int dp = 0;
295-
int sl = sp + Math.min(len, dst.length);
296-
while (sp < sl) {
297-
char c = src[sp++];
298-
int b = encode(c);
299-
if (b != UNMAPPABLE_ENCODING) {
300-
dst[dp++] = (byte)b;
301-
continue;
302-
}
303-
if (Character.isHighSurrogate(c) && sp < sl &&
304-
Character.isLowSurrogate(src[sp])) {
305-
if (len > dst.length) {
306-
sl++;
307-
len--;
308-
}
309-
sp++;
310-
}
311-
dst[dp++] = repl;
312-
}
313-
return dp;
314-
}
315-
316293
@Override
317-
public int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst) {
318-
int dp = 0;
294+
public int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst, int dp) {
319295
int sl = sp + Math.min(len, dst.length);
320296
while (sp < sl) {
321297
char c = (char)(src[sp++] & 0xff);
@@ -330,8 +306,7 @@ public int encodeFromLatin1(byte[] src, int sp, int len, byte[] dst) {
330306
}
331307

332308
@Override
333-
public int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst) {
334-
int dp = 0;
309+
public int encodeFromUTF16(byte[] src, int sp, int len, byte[] dst, int dp) {
335310
int sl = sp + Math.min(len, dst.length);
336311
while (sp < sl) {
337312
char c = StringUTF16.getChar(src, sp++);

test/jdk/sun/nio/cs/TestEncoderReplaceLatin1.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ static void testCharsetEncoderReplace(CharsetEncoder encoder, char[] unmappable,
192192
/**
193193
* Verifies {@linkplain CoderResult#isUnmappable() unmappable} character
194194
* {@linkplain CodingErrorAction#REPLACE replacement} using {@link
195-
* ArrayEncoder#encodeFromLatin1(byte[], int, int, byte[])
195+
* ArrayEncoder#encodeFromLatin1(byte[], int, int, byte[], int)
196196
* ArrayEncoder::encodeFromLatin1}.
197197
*/
198198
private static void testArrayEncoderLatin1Replace(CharsetEncoder encoder, char unmappable, byte[] replacement) {
@@ -202,7 +202,7 @@ private static void testArrayEncoderLatin1Replace(CharsetEncoder encoder, char u
202202
}
203203
byte[] sa = {(byte) unmappable};
204204
byte[] da = new byte[replacement.length];
205-
int dp = arrayEncoder.encodeFromLatin1(sa, 0, 1, da);
205+
int dp = arrayEncoder.encodeFromLatin1(sa, 0, 1, da, 0);
206206
assertTrue(dp == replacement.length && Arrays.equals(da, replacement), () -> {
207207
Object context = Map.of(
208208
"dp", dp,

test/jdk/sun/nio/cs/TestEncoderReplaceUTF16.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ private static byte[] utf16Bytes(char[] cs) {
182182
/**
183183
* Verifies {@linkplain CoderResult#isUnmappable() unmappable} character
184184
* {@linkplain CodingErrorAction#REPLACE replacement} using {@link
185-
* ArrayEncoder#encodeFromUTF16(byte[], int, int, byte[])
185+
* ArrayEncoder#encodeFromUTF16(byte[], int, int, byte[], int)
186186
* ArrayEncoder::encodeFromUTF16}.
187187
*/
188188
private static void testArrayEncoderUTF16Replace(CharsetEncoder encoder, byte[] unmappableUTF16Bytes, byte[] replacement) {
@@ -191,7 +191,7 @@ private static void testArrayEncoderUTF16Replace(CharsetEncoder encoder, byte[]
191191
return;
192192
}
193193
byte[] da = new byte[replacement.length];
194-
int dp = arrayEncoder.encodeFromUTF16(unmappableUTF16Bytes, 0, unmappableUTF16Bytes.length >>> 1, da);
194+
int dp = arrayEncoder.encodeFromUTF16(unmappableUTF16Bytes, 0, unmappableUTF16Bytes.length >>> 1, da, 0);
195195
assertTrue(dp == replacement.length && Arrays.equals(da, replacement), () -> {
196196
Object context = Map.of(
197197
"dp", dp,

0 commit comments

Comments
 (0)