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);
}
}
/**