8304982: Emit warning for removal of COMPAT
provider
Reviewed-by: alanb
This commit is contained in:
parent
ee3023359c
commit
44f33ad1a9
@ -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>
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
76
test/jdk/java/util/Locale/CompatWarning.java
Normal file
76
test/jdk/java/util/Locale/CompatWarning.java
Normal 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 {}
|
||||
}
|
||||
}
|
24
test/jdk/java/util/Locale/compatlog.properties
Normal file
24
test/jdk/java/util/Locale/compatlog.properties
Normal 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
|
Loading…
Reference in New Issue
Block a user