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
@@ -248,7 +251,6 @@ public void afterRegistration(AfterRegistrationAccess access) {
248251 allLocales .add (defaultLocale );
249252 support = selectLocalizationSupport ();
250253 ImageSingletons .add (LocalizationSupport .class , support );
251- ImageSingletons .add (LocalizationFeature .class , this );
252254
253255 addCharsets ();
254256 if (optimizedMode ) {
@@ -390,26 +392,22 @@ public static void addCharset(Charset charset) {
390392 CurrencyNameProvider .class ,
391393 LocaleNameProvider .class ,
392394 TimeZoneNameProvider .class ,
395+ JavaTimeDateTimePatternProvider .class ,
393396 CalendarDataProvider .class ,
394397 CalendarNameProvider .class );
395398
396- @ Platforms (Platform .HOSTED_ONLY .class )
397- protected List <Class <? extends LocaleServiceProvider >> getSpiClasses () {
398- return spiClasses ;
399- }
400-
401399 @ Platforms (Platform .HOSTED_ONLY .class )
402400 private void addProviders () {
403401 OptimizedLocalizationSupport optimizedLocalizationSupport = support .asOptimizedSupport ();
404- for (Class <? extends LocaleServiceProvider > providerClass : getSpiClasses () ) {
402+ for (Class <? extends LocaleServiceProvider > providerClass : spiClasses ) {
405403 LocaleProviderAdapter adapter = Objects .requireNonNull (LocaleProviderAdapter .getAdapter (providerClass , defaultLocale ));
406404 LocaleServiceProvider provider = Objects .requireNonNull (adapter .getLocaleServiceProvider (providerClass ));
407405 optimizedLocalizationSupport .providerPools .put (providerClass , new Target_sun_util_locale_provider_LocaleServiceProviderPool_OptimizedLocaleMode (provider ));
408406 }
409407
410408 for (Locale locale : allLocales ) {
411409 for (Locale candidateLocale : optimizedLocalizationSupport .control .getCandidateLocales ("" , locale )) {
412- for (Class <? extends LocaleServiceProvider > providerClass : getSpiClasses () ) {
410+ for (Class <? extends LocaleServiceProvider > providerClass : spiClasses ) {
413411 LocaleProviderAdapter adapter = Objects .requireNonNull (LocaleProviderAdapter .getAdapter (providerClass , candidateLocale ));
414412
415413 optimizedLocalizationSupport .adaptersByClass .put (Pair .create (providerClass , candidateLocale ), adapter );
@@ -432,10 +430,11 @@ protected void addResourceBundles() {
432430 prepareBundle (localeData (java .text .spi .BreakIteratorProvider .class , locale ).getCollationData (locale ), locale );
433431 prepareBundle (localeData (java .text .spi .DateFormatProvider .class , locale ).getDateFormatData (locale ), locale );
434432 prepareBundle (localeData (java .text .spi .NumberFormatProvider .class , locale ).getNumberFormatData (locale ), locale );
435- /* Note that JDK 11 support overrides this method to register more bundles. */
433+ prepareBundle ( localeData ( java . text . spi . BreakIteratorProvider . class , locale ). getBreakIteratorResources ( locale ), locale );
436434 }
437435
438436 final String [] alwaysRegisteredResourceBundles = new String []{
437+ "sun.text.resources.FormatData" ,
439438 "sun.util.logging.resources.logging" ,
440439 "sun.util.resources.TimeZoneNames"
441440 };
0 commit comments