From c042f0863247633e98ace9757fb8531145286e66 Mon Sep 17 00:00:00 2001 From: Claes Redestad Date: Mon, 26 Feb 2024 15:30:21 +0000 Subject: [PATCH] 8326653: Remove jdk.internal.reflect.UTF8 Reviewed-by: rriggs, alanb --- .../internal/reflect/ClassFileAssembler.java | 6 +- .../classes/jdk/internal/reflect/UTF8.java | 76 ------------------- 2 files changed, 3 insertions(+), 79 deletions(-) delete mode 100644 src/java.base/share/classes/jdk/internal/reflect/UTF8.java diff --git a/src/java.base/share/classes/jdk/internal/reflect/ClassFileAssembler.java b/src/java.base/share/classes/jdk/internal/reflect/ClassFileAssembler.java index aeef5e62f12..312616d79ed 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/ClassFileAssembler.java +++ b/src/java.base/share/classes/jdk/internal/reflect/ClassFileAssembler.java @@ -25,6 +25,8 @@ package jdk.internal.reflect; +import sun.nio.cs.UTF_8; + class ClassFileAssembler implements ClassFileConstants { private ByteVector vec; private short cpIdx = 0; @@ -98,9 +100,7 @@ class ClassFileAssembler implements ClassFileConstants { } public void emitConstantPoolUTF8(String str) { - // NOTE: can not use str.getBytes("UTF-8") here because of - // bootstrapping issues with the character set converters. - byte[] bytes = UTF8.encode(str); + byte[] bytes = str.getBytes(UTF_8.INSTANCE); emitByte(CONSTANT_Utf8); emitShort((short) bytes.length); for (int i = 0; i < bytes.length; i++) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/UTF8.java b/src/java.base/share/classes/jdk/internal/reflect/UTF8.java deleted file mode 100644 index 446060dba8b..00000000000 --- a/src/java.base/share/classes/jdk/internal/reflect/UTF8.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package jdk.internal.reflect; - -/** It is necessary to use a "bootstrap" UTF-8 encoder for encoding - constant pool entries because the character set converters rely on - Class.newInstance(). */ - -class UTF8 { - // This encoder is not quite correct. It does not handle surrogate pairs. - static byte[] encode(String str) { - int len = str.length(); - byte[] res = new byte[utf8Length(str)]; - int utf8Idx = 0; - try { - for (int i = 0; i < len; i++) { - int c = str.charAt(i) & 0xFFFF; - if (c >= 0x0001 && c <= 0x007F) { - res[utf8Idx++] = (byte) c; - } else if (c == 0x0000 || - (c >= 0x0080 && c <= 0x07FF)) { - res[utf8Idx++] = (byte) (0xC0 + (c >> 6)); - res[utf8Idx++] = (byte) (0x80 + (c & 0x3F)); - } else { - res[utf8Idx++] = (byte) (0xE0 + (c >> 12)); - res[utf8Idx++] = (byte) (0x80 + ((c >> 6) & 0x3F)); - res[utf8Idx++] = (byte) (0x80 + (c & 0x3F)); - } - } - } catch (ArrayIndexOutOfBoundsException e) { - throw new InternalError - ("Bug in sun.reflect bootstrap UTF-8 encoder", e); - } - return res; - } - - private static int utf8Length(String str) { - int len = str.length(); - int utf8Len = 0; - for (int i = 0; i < len; i++) { - int c = str.charAt(i) & 0xFFFF; - if (c >= 0x0001 && c <= 0x007F) { - utf8Len += 1; - } else if (c == 0x0000 || - (c >= 0x0080 && c <= 0x07FF)) { - utf8Len += 2; - } else { - utf8Len += 3; - } - } - return utf8Len; - } -}