428 }
429
430 public Set<String> getLanguageTagSet(String category) {
431 Set<String> tagset = langtagSets.get(category);
432 if (tagset == null) {
433 tagset = createLanguageTagSet(category);
434 Set<String> ts = langtagSets.putIfAbsent(category, tagset);
435 if (ts != null) {
436 tagset = ts;
437 }
438 }
439 return tagset;
440 }
441
442 protected Set<String> createLanguageTagSet(String category) {
443 String supportedLocaleString = createSupportedLocaleString(category);
444 if (supportedLocaleString == null) {
445 return Collections.emptySet();
446 }
447 StringTokenizer tokens = new StringTokenizer(supportedLocaleString);
448 Set<String> tagset = new HashSet<>(Math.max((int)(tokens.countTokens() / 0.75f) + 1, 16));
449 while (tokens.hasMoreTokens()) {
450 tagset.add(tokens.nextToken());
451 }
452
453 return tagset;
454 }
455
456 private static String createSupportedLocaleString(String category) {
457 // Directly call Base tags, as we know it's in the base module.
458 String supportedLocaleString = BaseLocaleDataMetaInfo.getSupportedLocaleString(category);
459
460 // Use ServiceLoader to dynamically acquire installed locales' tags.
461 try {
462 String nonBaseTags = AccessController.doPrivileged((PrivilegedExceptionAction<String>) () -> {
463 StringBuilder tags = new StringBuilder();
464 for (LocaleDataMetaInfo ldmi :
465 ServiceLoader.loadInstalled(LocaleDataMetaInfo.class)) {
466 if (ldmi.getType() == LocaleProviderAdapter.Type.JRE) {
467 String t = ldmi.availableLanguageTags(category);
468 if (t != null) {
|
428 }
429
430 public Set<String> getLanguageTagSet(String category) {
431 Set<String> tagset = langtagSets.get(category);
432 if (tagset == null) {
433 tagset = createLanguageTagSet(category);
434 Set<String> ts = langtagSets.putIfAbsent(category, tagset);
435 if (ts != null) {
436 tagset = ts;
437 }
438 }
439 return tagset;
440 }
441
442 protected Set<String> createLanguageTagSet(String category) {
443 String supportedLocaleString = createSupportedLocaleString(category);
444 if (supportedLocaleString == null) {
445 return Collections.emptySet();
446 }
447 StringTokenizer tokens = new StringTokenizer(supportedLocaleString);
448 Set<String> tagset = new HashSet<>((tokens.countTokens() * 4 + 2) / 3);
449 while (tokens.hasMoreTokens()) {
450 tagset.add(tokens.nextToken());
451 }
452
453 return tagset;
454 }
455
456 private static String createSupportedLocaleString(String category) {
457 // Directly call Base tags, as we know it's in the base module.
458 String supportedLocaleString = BaseLocaleDataMetaInfo.getSupportedLocaleString(category);
459
460 // Use ServiceLoader to dynamically acquire installed locales' tags.
461 try {
462 String nonBaseTags = AccessController.doPrivileged((PrivilegedExceptionAction<String>) () -> {
463 StringBuilder tags = new StringBuilder();
464 for (LocaleDataMetaInfo ldmi :
465 ServiceLoader.loadInstalled(LocaleDataMetaInfo.class)) {
466 if (ldmi.getType() == LocaleProviderAdapter.Type.JRE) {
467 String t = ldmi.availableLanguageTags(category);
468 if (t != null) {
|