Skip to content

Commit f93ebe6

Browse files
committed
Fix MissingResourceRegistration behaviour for resource bundle access via module
1 parent 3d9c008 commit f93ebe6

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/localization/substitutions/Target_java_util_ResourceBundle.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@
2525
package com.oracle.svm.core.jdk.localization.substitutions;
2626

2727
import java.util.Locale;
28+
import java.util.MissingResourceException;
29+
import java.util.Objects;
2830
import java.util.ResourceBundle;
31+
import java.util.ResourceBundle.Control;
2932
import java.util.concurrent.ConcurrentHashMap;
3033
import java.util.concurrent.ConcurrentMap;
3134
import java.util.function.Supplier;
@@ -115,7 +118,7 @@ private static ResourceBundle getBundleImpl(String baseName,
115118
// get resource bundles for a named module only if loader is the module's class loader
116119
if (callerModule.isNamed() && loader == getLoader(callerModule)) {
117120
if (!ImageSingletons.lookup(LocalizationSupport.class).isRegisteredBundleLookup(baseName, locale, control)) {
118-
MissingResourceRegistrationUtils.reportResourceBundleAccess(baseName);
121+
MissingResourceRegistrationUtils.reportResourceBundleAccess(callerModule, baseName);
119122
}
120123
return MissingRegistrationUtils.runIgnoringMissingRegistrations(new Supplier<ResourceBundle>() {
121124
@Override
@@ -134,7 +137,7 @@ public ResourceBundle get() {
134137
: BootLoader.getUnnamedModule();
135138

136139
if (!ImageSingletons.lookup(LocalizationSupport.class).isRegisteredBundleLookup(baseName, locale, control)) {
137-
MissingResourceRegistrationUtils.reportResourceBundleAccess(baseName);
140+
MissingResourceRegistrationUtils.reportResourceBundleAccess(unnamedModule, baseName);
138141
}
139142
return MissingRegistrationUtils.runIgnoringMissingRegistrations(new Supplier<ResourceBundle>() {
140143
@Override
@@ -144,6 +147,22 @@ public ResourceBundle get() {
144147
});
145148
}
146149

150+
@Substitute
151+
private static ResourceBundle getBundleFromModule(Class<?> caller,
152+
Module module,
153+
String baseName,
154+
Locale locale,
155+
Control control) {
156+
Objects.requireNonNull(module);
157+
Module callerModule = getCallerModule(caller);
158+
try {
159+
return MissingRegistrationUtils.runIgnoringMissingRegistrations(() -> getBundleImpl(callerModule, module, baseName, locale, control));
160+
} catch (MissingResourceException mre) {
161+
MissingResourceRegistrationUtils.reportResourceBundleAccess(module, baseName);
162+
throw mre;
163+
}
164+
}
165+
147166
@Alias
148167
private static native Module getCallerModule(Class<?> caller);
149168

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/resources/MissingResourceRegistrationUtils.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.nio.file.Files;
3030
import java.nio.file.spi.FileSystemProvider;
3131
import java.util.Map;
32+
import java.util.Objects;
3233
import java.util.ResourceBundle;
3334
import java.util.Set;
3435

@@ -61,16 +62,18 @@ public static void reportResourceAccess(Module module, String resourcePath) {
6162
report(exception);
6263
}
6364

64-
public static void reportResourceBundleAccess(String baseName) {
65+
public static void reportResourceBundleAccess(Module module, String baseName) {
6566
var bundleConfig = new ResourceConfiguration.BundleConfiguration(UnresolvedConfigurationCondition.alwaysTrue(), baseName);
6667
StringWriter json = new StringWriter();
6768
try {
6869
ResourceConfiguration.printResourceBundle(bundleConfig, getJSONWriter(json), true);
6970
} catch (IOException e) {
7071
throw VMError.shouldNotReachHere("In memory JSON printing should not fail");
7172
}
73+
Objects.requireNonNull(module);
74+
String moduleMessage = module.isNamed() ? " from module " + quote(module.getName()) : "";
7275
MissingResourceRegistrationError exception = new MissingResourceRegistrationError(
73-
resourceError("resource bundle with name " + quote(baseName), json.toString(), "resource-bundles"),
76+
resourceError("resource bundle" + moduleMessage + " with name " + quote(baseName), json.toString(), "resource-bundles"),
7477
baseName);
7578
report(exception);
7679
}

0 commit comments

Comments
 (0)