6464import org .graalvm .nativeimage .ImageSingletons ;
6565import org .graalvm .nativeimage .Platform ;
6666import org .graalvm .nativeimage .Platforms ;
67+ import org .graalvm .nativeimage .impl .ConfigurationCondition ;
6768import org .graalvm .nativeimage .impl .RuntimeClassInitializationSupport ;
6869
6970import com .oracle .graal .pointsto .ObjectScanner ;
@@ -512,7 +513,7 @@ protected void addResourceBundles() {
512513 * Locale data bundle class names do not contain underscores
513514 */
514515 String baseName = e .getClassName ().split ("_" )[0 ];
515- prepareNegativeBundle (baseName , locale , true );
516+ prepareNegativeBundle (ConfigurationCondition . alwaysTrue (), baseName , locale , true );
516517 continue ; /* No bundle for this `locale`. */
517518 }
518519 if (bundle instanceof ParallelListResourceBundle ) {
@@ -529,14 +530,14 @@ protected void addResourceBundles() {
529530 * No eager loading of bundle content, so we need to include the
530531 * `sun.text.resources.FormatData` bundle supplement as well.
531532 */
532- prepareBundle ("sun.text.resources.JavaTimeSupplementary" );
533+ prepareBundle (ConfigurationCondition . alwaysTrue (), "sun.text.resources.JavaTimeSupplementary" );
533534 }
534535
535536 final String [] alwaysRegisteredResourceBundles = new String []{
536537 "sun.util.logging.resources.logging"
537538 };
538539 for (String bundleName : alwaysRegisteredResourceBundles ) {
539- prepareBundle (bundleName );
540+ prepareBundle (ConfigurationCondition . alwaysTrue (), bundleName );
540541 }
541542
542543 for (String bundleName : Options .IncludeResourceBundles .getValue ().values ()) {
@@ -549,7 +550,7 @@ private void processRequestedBundle(String input) {
549550 int splitIndex = input .indexOf ('_' );
550551 boolean specificLocaleRequested = splitIndex != -1 ;
551552 if (!specificLocaleRequested ) {
552- prepareBundle (input , allLocales );
553+ prepareBundle (ConfigurationCondition . alwaysTrue (), input , allLocales );
553554 return ;
554555 }
555556 Locale locale = splitIndex + 1 < input .length () ? LocalizationSupport .parseLocaleFromTag (input .substring (splitIndex + 1 )) : Locale .ROOT ;
@@ -559,7 +560,7 @@ private void processRequestedBundle(String input) {
559560 }
560561 /*- Get rid of locale specific suffix. */
561562 String baseName = input .substring (0 , splitIndex );
562- prepareBundle (baseName , Collections .singletonList (locale ));
563+ prepareBundle (ConfigurationCondition . alwaysTrue (), baseName , Collections .singletonList (locale ));
563564 }
564565
565566 @ Platforms (Platform .HOSTED_ONLY .class )
@@ -572,8 +573,8 @@ public void prepareClassResourceBundle(String basename, String className) {
572573 }
573574
574575 @ Platforms (Platform .HOSTED_ONLY .class )
575- public void prepareBundle (String baseName ) {
576- prepareBundle (baseName , allLocales );
576+ public void prepareBundle (ConfigurationCondition condition , String baseName ) {
577+ prepareBundle (condition , baseName , allLocales );
577578 }
578579
579580 private static final String [] RESOURCE_EXTENSION_PREFIXES = new String []{
@@ -584,37 +585,37 @@ public void prepareBundle(String baseName) {
584585 };
585586
586587 @ Platforms (Platform .HOSTED_ONLY .class )
587- public void prepareBundle (String baseName , Collection <Locale > wantedLocales ) {
588- prepareBundleInternal (baseName , wantedLocales );
588+ public void prepareBundle (ConfigurationCondition condition , String baseName , Collection <Locale > wantedLocales ) {
589+ prepareBundleInternal (condition , baseName , wantedLocales );
589590
590591 String alternativeBundleName = null ;
591- for (String resourceExtentionPrefix : RESOURCE_EXTENSION_PREFIXES ) {
592- if (baseName .startsWith (resourceExtentionPrefix ) && !baseName .startsWith (resourceExtentionPrefix + ".ext" )) {
593- alternativeBundleName = baseName .replace (resourceExtentionPrefix , resourceExtentionPrefix + ".ext" );
592+ for (String resourceExtensionPrefix : RESOURCE_EXTENSION_PREFIXES ) {
593+ if (baseName .startsWith (resourceExtensionPrefix ) && !baseName .startsWith (resourceExtensionPrefix + ".ext" )) {
594+ alternativeBundleName = baseName .replace (resourceExtensionPrefix , resourceExtensionPrefix + ".ext" );
594595 break ;
595596 }
596597 }
597598 if (alternativeBundleName != null ) {
598- prepareBundleInternal (alternativeBundleName , wantedLocales );
599+ prepareBundleInternal (condition , alternativeBundleName , wantedLocales );
599600 }
600601 }
601602
602- private void prepareBundleInternal (String baseName , Collection <Locale > wantedLocales ) {
603+ private void prepareBundleInternal (ConfigurationCondition condition , String baseName , Collection <Locale > wantedLocales ) {
603604 boolean somethingFound = false ;
604605 for (Locale locale : wantedLocales ) {
605- support .registerBundleLookup (baseName );
606+ support .registerBundleLookup (condition , baseName );
606607 List <ResourceBundle > resourceBundle ;
607608 try {
608609 resourceBundle = ImageSingletons .lookup (ClassLoaderSupport .class ).getResourceBundle (baseName , locale );
609610 } catch (MissingResourceException mre ) {
610611 for (Locale candidateLocale : support .control .getCandidateLocales (baseName , locale )) {
611- prepareNegativeBundle (baseName , candidateLocale , false );
612+ prepareNegativeBundle (condition , baseName , candidateLocale , false );
612613 }
613614 continue ;
614615 }
615616 somethingFound |= !resourceBundle .isEmpty ();
616617 for (ResourceBundle bundle : resourceBundle ) {
617- prepareBundle (baseName , bundle , locale , false );
618+ prepareBundle (condition , baseName , bundle , locale , false );
618619 }
619620 }
620621
@@ -643,33 +644,33 @@ private void prepareBundleInternal(String baseName, Collection<Locale> wantedLoc
643644 "If the bundle is part of a module, verify the bundle name is a fully qualified class name. Otherwise " +
644645 "verify the bundle path is accessible in the classpath." ;
645646 trace (errorMessage );
646- prepareNegativeBundle (baseName , Locale .ROOT , false );
647+ prepareNegativeBundle (condition , baseName , Locale .ROOT , false );
647648 for (String language : wantedLocales .stream ().map (Locale ::getLanguage ).collect (Collectors .toSet ())) {
648- prepareNegativeBundle (baseName , Locale .of (language ), false );
649+ prepareNegativeBundle (condition , baseName , Locale .of (language ), false );
649650 }
650651 for (Locale locale : wantedLocales ) {
651652 if (!locale .getCountry ().isEmpty ()) {
652- prepareNegativeBundle (baseName , locale , false );
653+ prepareNegativeBundle (condition , baseName , locale , false );
653654 }
654655 }
655656 }
656657 }
657658
658659 @ Platforms (Platform .HOSTED_ONLY .class )
659- protected void prepareNegativeBundle (String baseName , Locale locale , boolean jdkBundle ) {
660- support .registerBundleLookup (baseName );
660+ protected void prepareNegativeBundle (ConfigurationCondition condition , String baseName , Locale locale , boolean jdkBundle ) {
661+ support .registerBundleLookup (condition , baseName );
661662 support .registerRequiredReflectionAndResourcesForBundleAndLocale (baseName , locale , jdkBundle );
662663 }
663664
664665 @ Platforms (Platform .HOSTED_ONLY .class )
665666 protected void prepareJDKBundle (ResourceBundle bundle , Locale locale ) {
666667 String baseName = bundle .getBaseBundleName ();
667- prepareBundle (baseName , bundle , locale , true );
668+ prepareBundle (ConfigurationCondition . alwaysTrue (), baseName , bundle , locale , true );
668669 }
669670
670671 @ Platforms (Platform .HOSTED_ONLY .class )
671- private void prepareBundle (String bundleName , ResourceBundle bundle , Locale locale , boolean jdkBundle ) {
672- trace ("Adding bundle " + bundleName + ", locale " + locale );
672+ private void prepareBundle (ConfigurationCondition condition , String bundleName , ResourceBundle bundle , Locale locale , boolean jdkBundle ) {
673+ trace ("Adding bundle " + bundleName + ", locale " + locale + " with condition " + condition );
673674 /*
674675 * Ensure that the bundle contents are loaded. We need to walk the whole bundle parent chain
675676 * down to the root.
0 commit comments