On 8/22/14 3:37 PM, Naoto Sato wrote:


    I wonder ifavailableLanguageTags andgetSupportedLocaleString
    should return a list or an array of String (see comment below).


There are two provider implementations for
sun.util.locale.provider.LocaleDataMetaInfo and two service config
files as you want to put them in cldrdata.jar and localedata.jar.
I wonder if you want to merge them into a single service config
for now until you decide to separate them into separate modules
in the future.

You could simply put it under
src/jdk.localedata/share/META-INF/services/sun.util.locale.provider.LocaleDataMetaInfo

I tried to merge the config file, but it seems not possible to me to have two implementation definitions in a single file, e.g., if the config file has two entries

sun.util.locale.provider.JRENonENLocaleDataMetaInfo
sun.util.cldr.CLDRLocaleDataMetaInfo

and localedata.jar/cldrdata.jar have one on those each, ServiceLoader lookup failed with the exception (sorry forgot the actual name) saying, e.g., CLDRLocaleDataMetaInfo cannot be instantiated from localedata.jar. Thus I had to have two service config files.

A service config file can contain multiple provider implementation classes. JDI connector is one example:
http://hg.openjdk.java.net/jdk9/dev/jdk/file/74078474d9bd/src/jdk.jdi/share/classes/META-INF/services/com.sun.jdi.connect.Connector

There may be some bug somewhere.


sun/util/cldr/CLDRLocaleProviderAdapter.java
    line 67: why do you silently ignore any exception? In that
    case, it will throw UOE in line 71.  Is UOE caught somewhere?
    Assume there is a good reason to ignore the exception,
    can you add comment to explain it?

UOE is caught in JRELocaleProviderAdapter. Will add some more comments there.

Is it the SecurityException you try to catch? perhaps you should throw UOE directly at line 68 with the exception as the cause for better diagnosability.


sun/util/locale/provider/JRELocaleProviderAdapter.java
    line 391: what exceptions do you expect to be caught here?
    Do you have a test case for this to demonstrate why you
    have to ignore the exception?

The one we have been discussing: AccessClassInPackage security exception for sun.util.locale.provider classes from localedata.jar/cldrdata.jar. Anyway, I followed the ResourceBundle.loadBundle()'s behavior here, where it ignores any Exception instances.


Can you add that test case?


When you have an image build, it'd be useful to test without
cldrdata.jar and localedata.jar from the extension directory
and run the tests to use the default EN locale.

Although I don't have any regression tests, I manually tested such situations and confirmed it worked correctly.

Do you mean that the existing regression tests never load cldrdata.jar and localedata.jar? If so, that matches my suggestion to run them on a JDK image without cldrdata.jar and localedata.jar and they should pass?

Mandy

Reply via email to