8155649: IncludeLocalesPlugin throws NPE when jdk.localedata not resolved
Reviewed-by: alanb, mchung
This commit is contained in:
parent
5106d55d55
commit
bd9c092ecc
@ -177,24 +177,28 @@ public final class IncludeLocalesPlugin implements TransformerPlugin, ResourcePr
|
||||
Pool.Module module = resources.getModule(MODULENAME);
|
||||
|
||||
// jdk.localedata module validation
|
||||
Set<String> packages = module.getAllPackages();
|
||||
if (!packages.containsAll(LOCALEDATA_PACKAGES)) {
|
||||
throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".missingpackages") +
|
||||
LOCALEDATA_PACKAGES.stream()
|
||||
.filter(pn -> !packages.contains(pn))
|
||||
.collect(Collectors.joining(",\n\t")));
|
||||
if (module != null) {
|
||||
Set<String> packages = module.getAllPackages();
|
||||
if (!packages.containsAll(LOCALEDATA_PACKAGES)) {
|
||||
throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".missingpackages") +
|
||||
LOCALEDATA_PACKAGES.stream()
|
||||
.filter(pn -> !packages.contains(pn))
|
||||
.collect(Collectors.joining(",\n\t")));
|
||||
}
|
||||
|
||||
available = Stream.concat(module.getContent().stream()
|
||||
.map(md -> p.matcher(md.getPath()))
|
||||
.filter(m -> m.matches())
|
||||
.map(m -> m.group("tag").replaceAll("_", "-")),
|
||||
Stream.concat(Stream.of(jaJPJPTag), Stream.of(thTHTHTag)))
|
||||
.distinct()
|
||||
.sorted()
|
||||
.map(IncludeLocalesPlugin::tagToLocale)
|
||||
.collect(Collectors.toList());
|
||||
} else {
|
||||
// jdk.localedata is not added.
|
||||
throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".localedatanotfound"));
|
||||
}
|
||||
|
||||
available = Stream.concat(module.getContent().stream()
|
||||
.map(md -> p.matcher(md.getPath()))
|
||||
.filter(m -> m.matches())
|
||||
.map(m -> m.group("tag").replaceAll("_", "-")),
|
||||
Stream.concat(Stream.of(jaJPJPTag), Stream.of(thTHTHTag)))
|
||||
.distinct()
|
||||
.sorted()
|
||||
.map(IncludeLocalesPlugin::tagToLocale)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
filtered = filterLocales(available);
|
||||
|
||||
if (filtered.isEmpty()) {
|
||||
|
@ -89,6 +89,9 @@ No matching locales found for \"%s\". Check the specified pattern.
|
||||
include-locales.invalidtag=\
|
||||
Invalid language tag: %s
|
||||
|
||||
include-locales.localedatanotfound=\
|
||||
jdk.localedata module was not specified with --addmods option
|
||||
|
||||
main.status.ok=Functional.
|
||||
|
||||
main.status.not.ok= Not functional.
|
||||
|
@ -36,6 +36,7 @@ import tests.Result;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8152143 8152704 8155649
|
||||
* @summary IncludeLocalesPlugin tests
|
||||
* @author Naoto Sato
|
||||
* @library ../../lib
|
||||
@ -55,15 +56,17 @@ public class IncludeLocalesPluginTest {
|
||||
private final static String moduleName = "IncludeLocalesTest";
|
||||
private static Helper helper;
|
||||
private final static int INCLUDE_LOCALES_OPTION = 0;
|
||||
private final static int EXPECTED_LOCATIONS = 1;
|
||||
private final static int UNEXPECTED_PATHS = 2;
|
||||
private final static int AVAILABLE_LOCALES = 3;
|
||||
private final static int ERROR_MESSAGE = 4;
|
||||
private final static int ADDMODS_OPTION = 1;
|
||||
private final static int EXPECTED_LOCATIONS = 2;
|
||||
private final static int UNEXPECTED_PATHS = 3;
|
||||
private final static int AVAILABLE_LOCALES = 4;
|
||||
private final static int ERROR_MESSAGE = 5;
|
||||
|
||||
private final static Object[][] testData = {
|
||||
// without --include-locales option: should include all locales
|
||||
{
|
||||
"",
|
||||
"jdk.localedata",
|
||||
List.of(
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_en_GB.class",
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_ja.class",
|
||||
@ -144,6 +147,7 @@ public class IncludeLocalesPluginTest {
|
||||
// All English/Japanese locales
|
||||
{
|
||||
"--include-locales=en,ja",
|
||||
"jdk.localedata",
|
||||
List.of(
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_en_GB.class",
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_ja.class",
|
||||
@ -174,6 +178,7 @@ public class IncludeLocalesPluginTest {
|
||||
// All locales in India
|
||||
{
|
||||
"--include-locales=*-IN",
|
||||
"jdk.localedata",
|
||||
List.of(
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_en_IN.class",
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_hi_IN.class",
|
||||
@ -201,7 +206,9 @@ public class IncludeLocalesPluginTest {
|
||||
},
|
||||
|
||||
// Thai
|
||||
{"--include-locales=th",
|
||||
{
|
||||
"--include-locales=th",
|
||||
"jdk.localedata",
|
||||
List.of(
|
||||
"/jdk.localedata/sun/text/resources/LineBreakIteratorData_th",
|
||||
"/jdk.localedata/sun/text/resources/thai_dict",
|
||||
@ -221,7 +228,9 @@ public class IncludeLocalesPluginTest {
|
||||
},
|
||||
|
||||
// Hong Kong
|
||||
{"--include-locales=zh-HK",
|
||||
{
|
||||
"--include-locales=zh-HK",
|
||||
"jdk.localedata",
|
||||
List.of(
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_zh.class",
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_zh_HK.class",
|
||||
@ -244,7 +253,9 @@ public class IncludeLocalesPluginTest {
|
||||
},
|
||||
|
||||
// Norwegian
|
||||
{"--include-locales=nb,nn,no",
|
||||
{
|
||||
"--include-locales=nb,nn,no",
|
||||
"jdk.localedata",
|
||||
List.of(
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_no.class",
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_no_NO.class",
|
||||
@ -268,7 +279,9 @@ public class IncludeLocalesPluginTest {
|
||||
},
|
||||
|
||||
// Hebrew/Indonesian/Yiddish
|
||||
{"--include-locales=he,id,yi",
|
||||
{
|
||||
"--include-locales=he,id,yi",
|
||||
"jdk.localedata",
|
||||
List.of(
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_in.class",
|
||||
"/jdk.localedata/sun/text/resources/ext/FormatData_in_ID.class",
|
||||
@ -294,7 +307,9 @@ public class IncludeLocalesPluginTest {
|
||||
},
|
||||
|
||||
// Error case: No matching locales
|
||||
{"--include-locales=xyz",
|
||||
{
|
||||
"--include-locales=xyz",
|
||||
"jdk.localedata",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
@ -304,7 +319,9 @@ public class IncludeLocalesPluginTest {
|
||||
},
|
||||
|
||||
// Error case: Invalid argument
|
||||
{"--include-locales=en,zh_HK",
|
||||
{
|
||||
"--include-locales=en,zh_HK",
|
||||
"jdk.localedata",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
@ -312,6 +329,18 @@ public class IncludeLocalesPluginTest {
|
||||
PluginsResourceBundle.getMessage("include-locales.invalidtag"), "zh_HK"))
|
||||
.getMessage(),
|
||||
},
|
||||
|
||||
// Error case: jdk.localedata is not added
|
||||
{
|
||||
"--include-locales=en-US",
|
||||
"java.base",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
new PluginException(
|
||||
PluginsResourceBundle.getMessage("include-locales.localedatanotfound"))
|
||||
.getMessage(),
|
||||
},
|
||||
};
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
@ -328,7 +357,7 @@ public class IncludeLocalesPluginTest {
|
||||
Result result = JImageGenerator.getJLinkTask()
|
||||
.modulePath(helper.defaultModulePath())
|
||||
.output(helper.createNewImageDir(moduleName))
|
||||
.addMods("jdk.localedata")
|
||||
.addMods((String)data[ADDMODS_OPTION])
|
||||
.option((String)data[INCLUDE_LOCALES_OPTION])
|
||||
.call();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user