7070import org .graalvm .nativeimage .hosted .Feature ;
7171
7272import com .oracle .svm .core .ClassLoaderSupport ;
73+ import com .oracle .svm .core .annotate .AutomaticFeature ;
7374import com .oracle .svm .core .annotate .Substitute ;
7475import com .oracle .svm .core .jdk .localization .BundleContentSubstitutedLocalizationSupport ;
7576import com .oracle .svm .core .jdk .localization .LocalizationSupport ;
8788import jdk .vm .ci .meta .ResolvedJavaField ;
8889import jdk .vm .ci .meta .ResolvedJavaMethod ;
8990import jdk .vm .ci .meta .ResolvedJavaType ;
91+ import sun .text .spi .JavaTimeDateTimePatternProvider ;
9092import sun .util .locale .provider .LocaleProviderAdapter ;
9193import sun .util .locale .provider .ResourceBundleBasedAdapter ;
9294import sun .util .resources .LocaleData ;
121123 * @see OptimizedLocalizationSupport
122124 * @see BundleContentSubstitutedLocalizationSupport
123125 */
124- public abstract class LocalizationFeature implements Feature {
126+ @ AutomaticFeature
127+ public class LocalizationFeature implements Feature {
125128
126129 protected final boolean optimizedMode = Options .LocalizationOptimizedMode .getValue ();
127130
@@ -390,26 +393,22 @@ public static void addCharset(Charset charset) {
390393 CurrencyNameProvider .class ,
391394 LocaleNameProvider .class ,
392395 TimeZoneNameProvider .class ,
396+ JavaTimeDateTimePatternProvider .class ,
393397 CalendarDataProvider .class ,
394398 CalendarNameProvider .class );
395399
396- @ Platforms (Platform .HOSTED_ONLY .class )
397- protected List <Class <? extends LocaleServiceProvider >> getSpiClasses () {
398- return spiClasses ;
399- }
400-
401400 @ Platforms (Platform .HOSTED_ONLY .class )
402401 private void addProviders () {
403402 OptimizedLocalizationSupport optimizedLocalizationSupport = support .asOptimizedSupport ();
404- for (Class <? extends LocaleServiceProvider > providerClass : getSpiClasses () ) {
403+ for (Class <? extends LocaleServiceProvider > providerClass : spiClasses ) {
405404 LocaleProviderAdapter adapter = Objects .requireNonNull (LocaleProviderAdapter .getAdapter (providerClass , defaultLocale ));
406405 LocaleServiceProvider provider = Objects .requireNonNull (adapter .getLocaleServiceProvider (providerClass ));
407406 optimizedLocalizationSupport .providerPools .put (providerClass , new Target_sun_util_locale_provider_LocaleServiceProviderPool_OptimizedLocaleMode (provider ));
408407 }
409408
410409 for (Locale locale : allLocales ) {
411410 for (Locale candidateLocale : optimizedLocalizationSupport .control .getCandidateLocales ("" , locale )) {
412- for (Class <? extends LocaleServiceProvider > providerClass : getSpiClasses () ) {
411+ for (Class <? extends LocaleServiceProvider > providerClass : spiClasses ) {
413412 LocaleProviderAdapter adapter = Objects .requireNonNull (LocaleProviderAdapter .getAdapter (providerClass , candidateLocale ));
414413
415414 optimizedLocalizationSupport .adaptersByClass .put (Pair .create (providerClass , candidateLocale ), adapter );
@@ -432,10 +431,11 @@ protected void addResourceBundles() {
432431 prepareBundle (localeData (java .text .spi .BreakIteratorProvider .class , locale ).getCollationData (locale ), locale );
433432 prepareBundle (localeData (java .text .spi .DateFormatProvider .class , locale ).getDateFormatData (locale ), locale );
434433 prepareBundle (localeData (java .text .spi .NumberFormatProvider .class , locale ).getNumberFormatData (locale ), locale );
435- /* Note that JDK 11 support overrides this method to register more bundles. */
434+ prepareBundle ( localeData ( java . text . spi . BreakIteratorProvider . class , locale ). getBreakIteratorResources ( locale ), locale );
436435 }
437436
438437 final String [] alwaysRegisteredResourceBundles = new String []{
438+ "sun.text.resources.FormatData" ,
439439 "sun.util.logging.resources.logging" ,
440440 "sun.util.resources.TimeZoneNames"
441441 };
0 commit comments