8155649: IncludeLocalesPlugin throws NPE when jdk.localedata not resolved

Reviewed-by: alanb, mchung
This commit is contained in:
Naoto Sato 2016-05-04 08:53:09 -07:00
parent 5106d55d55
commit bd9c092ecc
3 changed files with 64 additions and 28 deletions

View File

@ -177,6 +177,7 @@ public final class IncludeLocalesPlugin implements TransformerPlugin, ResourcePr
Pool.Module module = resources.getModule(MODULENAME); Pool.Module module = resources.getModule(MODULENAME);
// jdk.localedata module validation // jdk.localedata module validation
if (module != null) {
Set<String> packages = module.getAllPackages(); Set<String> packages = module.getAllPackages();
if (!packages.containsAll(LOCALEDATA_PACKAGES)) { if (!packages.containsAll(LOCALEDATA_PACKAGES)) {
throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".missingpackages") + throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".missingpackages") +
@ -194,7 +195,10 @@ public final class IncludeLocalesPlugin implements TransformerPlugin, ResourcePr
.sorted() .sorted()
.map(IncludeLocalesPlugin::tagToLocale) .map(IncludeLocalesPlugin::tagToLocale)
.collect(Collectors.toList()); .collect(Collectors.toList());
} else {
// jdk.localedata is not added.
throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".localedatanotfound"));
}
filtered = filterLocales(available); filtered = filterLocales(available);
if (filtered.isEmpty()) { if (filtered.isEmpty()) {

View File

@ -89,6 +89,9 @@ No matching locales found for \"%s\". Check the specified pattern.
include-locales.invalidtag=\ include-locales.invalidtag=\
Invalid language tag: %s Invalid language tag: %s
include-locales.localedatanotfound=\
jdk.localedata module was not specified with --addmods option
main.status.ok=Functional. main.status.ok=Functional.
main.status.not.ok= Not functional. main.status.not.ok= Not functional.

View File

@ -36,6 +36,7 @@ import tests.Result;
/* /*
* @test * @test
* @bug 8152143 8152704 8155649
* @summary IncludeLocalesPlugin tests * @summary IncludeLocalesPlugin tests
* @author Naoto Sato * @author Naoto Sato
* @library ../../lib * @library ../../lib
@ -55,15 +56,17 @@ public class IncludeLocalesPluginTest {
private final static String moduleName = "IncludeLocalesTest"; private final static String moduleName = "IncludeLocalesTest";
private static Helper helper; private static Helper helper;
private final static int INCLUDE_LOCALES_OPTION = 0; private final static int INCLUDE_LOCALES_OPTION = 0;
private final static int EXPECTED_LOCATIONS = 1; private final static int ADDMODS_OPTION = 1;
private final static int UNEXPECTED_PATHS = 2; private final static int EXPECTED_LOCATIONS = 2;
private final static int AVAILABLE_LOCALES = 3; private final static int UNEXPECTED_PATHS = 3;
private final static int ERROR_MESSAGE = 4; private final static int AVAILABLE_LOCALES = 4;
private final static int ERROR_MESSAGE = 5;
private final static Object[][] testData = { private final static Object[][] testData = {
// without --include-locales option: should include all locales // without --include-locales option: should include all locales
{ {
"", "",
"jdk.localedata",
List.of( List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_en_GB.class", "/jdk.localedata/sun/text/resources/ext/FormatData_en_GB.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_ja.class", "/jdk.localedata/sun/text/resources/ext/FormatData_ja.class",
@ -144,6 +147,7 @@ public class IncludeLocalesPluginTest {
// All English/Japanese locales // All English/Japanese locales
{ {
"--include-locales=en,ja", "--include-locales=en,ja",
"jdk.localedata",
List.of( List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_en_GB.class", "/jdk.localedata/sun/text/resources/ext/FormatData_en_GB.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_ja.class", "/jdk.localedata/sun/text/resources/ext/FormatData_ja.class",
@ -174,6 +178,7 @@ public class IncludeLocalesPluginTest {
// All locales in India // All locales in India
{ {
"--include-locales=*-IN", "--include-locales=*-IN",
"jdk.localedata",
List.of( List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_en_IN.class", "/jdk.localedata/sun/text/resources/ext/FormatData_en_IN.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_hi_IN.class", "/jdk.localedata/sun/text/resources/ext/FormatData_hi_IN.class",
@ -201,7 +206,9 @@ public class IncludeLocalesPluginTest {
}, },
// Thai // Thai
{"--include-locales=th", {
"--include-locales=th",
"jdk.localedata",
List.of( List.of(
"/jdk.localedata/sun/text/resources/LineBreakIteratorData_th", "/jdk.localedata/sun/text/resources/LineBreakIteratorData_th",
"/jdk.localedata/sun/text/resources/thai_dict", "/jdk.localedata/sun/text/resources/thai_dict",
@ -221,7 +228,9 @@ public class IncludeLocalesPluginTest {
}, },
// Hong Kong // Hong Kong
{"--include-locales=zh-HK", {
"--include-locales=zh-HK",
"jdk.localedata",
List.of( List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_zh.class", "/jdk.localedata/sun/text/resources/ext/FormatData_zh.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_zh_HK.class", "/jdk.localedata/sun/text/resources/ext/FormatData_zh_HK.class",
@ -244,7 +253,9 @@ public class IncludeLocalesPluginTest {
}, },
// Norwegian // Norwegian
{"--include-locales=nb,nn,no", {
"--include-locales=nb,nn,no",
"jdk.localedata",
List.of( List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_no.class", "/jdk.localedata/sun/text/resources/ext/FormatData_no.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_no_NO.class", "/jdk.localedata/sun/text/resources/ext/FormatData_no_NO.class",
@ -268,7 +279,9 @@ public class IncludeLocalesPluginTest {
}, },
// Hebrew/Indonesian/Yiddish // Hebrew/Indonesian/Yiddish
{"--include-locales=he,id,yi", {
"--include-locales=he,id,yi",
"jdk.localedata",
List.of( List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_in.class", "/jdk.localedata/sun/text/resources/ext/FormatData_in.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_in_ID.class", "/jdk.localedata/sun/text/resources/ext/FormatData_in_ID.class",
@ -294,7 +307,9 @@ public class IncludeLocalesPluginTest {
}, },
// Error case: No matching locales // Error case: No matching locales
{"--include-locales=xyz", {
"--include-locales=xyz",
"jdk.localedata",
null, null,
null, null,
null, null,
@ -304,7 +319,9 @@ public class IncludeLocalesPluginTest {
}, },
// Error case: Invalid argument // Error case: Invalid argument
{"--include-locales=en,zh_HK", {
"--include-locales=en,zh_HK",
"jdk.localedata",
null, null,
null, null,
null, null,
@ -312,6 +329,18 @@ public class IncludeLocalesPluginTest {
PluginsResourceBundle.getMessage("include-locales.invalidtag"), "zh_HK")) PluginsResourceBundle.getMessage("include-locales.invalidtag"), "zh_HK"))
.getMessage(), .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 { public static void main(String[] args) throws Exception {
@ -328,7 +357,7 @@ public class IncludeLocalesPluginTest {
Result result = JImageGenerator.getJLinkTask() Result result = JImageGenerator.getJLinkTask()
.modulePath(helper.defaultModulePath()) .modulePath(helper.defaultModulePath())
.output(helper.createNewImageDir(moduleName)) .output(helper.createNewImageDir(moduleName))
.addMods("jdk.localedata") .addMods((String)data[ADDMODS_OPTION])
.option((String)data[INCLUDE_LOCALES_OPTION]) .option((String)data[INCLUDE_LOCALES_OPTION])
.call(); .call();