8304982: Emit warning for removal of COMPAT provider

Reviewed-by: alanb
This commit is contained in:
Naoto Sato 2023-04-05 16:06:23 +00:00
parent ee3023359c
commit 44f33ad1a9
4 changed files with 113 additions and 7 deletions

View File

@ -120,18 +120,19 @@ import java.util.Locale;
* property on the java launcher command line. Setting it at runtime with
* {@link System#setProperty(String, String)} is discouraged and it may not affect
* the order.
* <p>
* Java Runtime Environment provides the following four locale providers:
* JDK Reference Implementation provides the following four
* locale providers:
* <ul>
* <li> "CLDR": A provider based on Unicode Consortium's
* <a href="http://cldr.unicode.org/">CLDR Project</a>.
* <li> "COMPAT": represents the locale sensitive services that is compatible
* with the prior JDK releases up to JDK8 (same as JDK8's "JRE").
* with the prior JDK releases up to JDK 8 (same as JDK 8's "JRE"). This
* provider is deprecated and will be removed in the future release of JDK.
* <li> "SPI": represents the locale sensitive services implementing the subclasses of
* this {@code LocaleServiceProvider} class.
* <li> "HOST": A provider that reflects the user's custom settings in the
* underlying operating system. This provider may not be available, depending
* on the Java Runtime Environment implementation.
* on the JDK Reference Implementation.
* <li> "JRE": represents a synonym to "COMPAT". This name
* is deprecated and will be removed in the future release of JDK.
* </ul>

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2023, 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
@ -33,7 +33,6 @@ import java.text.spi.DateFormatSymbolsProvider;
import java.text.spi.DecimalFormatSymbolsProvider;
import java.text.spi.NumberFormatProvider;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
@ -125,13 +124,15 @@ public abstract class LocaleProviderAdapter {
String order = GetPropertyAction.privilegedGetProperty("java.locale.providers");
ArrayList<Type> typeList = new ArrayList<>();
String invalidTypeMessage = null;
String compatWarningMessage = null;
// Check user specified adapter preference
if (order != null && !order.isEmpty()) {
String[] types = order.split(",");
for (String type : types) {
type = type.trim().toUpperCase(Locale.ROOT);
if (type.equals("COMPAT")) {
if (type.equals("COMPAT") || type.equals("JRE")) {
compatWarningMessage = "COMPAT locale provider will be removed in a future release";
type = "JRE";
}
try {
@ -169,6 +170,10 @@ public abstract class LocaleProviderAdapter {
getLogger(LocaleProviderAdapter.class.getCanonicalName())
.log(Logger.Level.INFO, invalidTypeMessage);
}
if (compatWarningMessage != null) {
getLogger(LocaleProviderAdapter.class.getCanonicalName())
.log(Logger.Level.WARNING, compatWarningMessage);
}
}
/**

View File

@ -0,0 +1,76 @@
/*
* Copyright (c) 2023, 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.
*
* 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.
*/
/*
* @test
* @bug 8304982
* @summary Check if a warning is logged with COMPAT locale provider
* @run main/othervm -Djava.locale.providers=COMPAT CompatWarning
* @run main/othervm -Djava.locale.providers=JRE CompatWarning
*/
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
public class CompatWarning {
private static final String WARNING =
"COMPAT locale provider will be removed in a future release";
private static boolean logged;
public static void main(String[] args) throws Throwable {
File conf = new File(System.getProperty("test.src", "./src"), "compatlog.properties");
if (!conf.canRead()) {
throw new IOException("Can't read config file: " + conf.getAbsolutePath());
}
System.setProperty("java.util.logging.config.file", conf.getAbsolutePath());
DateFormat.getInstance();
if (!logged) {
throw new RuntimeException("COMPAT warning message was not emitted");
}
}
public static class CheckWarning extends Handler {
@Override
public void publish(LogRecord record) {
var level = record.getLevel();
var msg = record.getMessage();
System.out.printf("""
LogRecord emitted:
Level: %s
Message: %s
""", level, msg);
if (level == Level.WARNING && WARNING.equals(msg)) {
logged = true;
}
}
@Override
public void flush() {}
@Override
public void close() throws SecurityException {}
}
}

View File

@ -0,0 +1,24 @@
#
# Copyright (c) 2023, 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.
#
# 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.
#
handlers=CompatWarning$CheckWarning