< prev index next >
src/java.base/share/classes/java/util/ResourceBundle.java
Print this page
*** 658,667 ****
--- 658,668 ----
// of this instance.
private int hashCodeCache;
// ResourceBundleProviders for loading ResourceBundles
private ServiceLoader<ResourceBundleProvider> providers;
+ private boolean providersChecked;
// Boolean.TRUE if the factory method caller provides a ResourceBundleProvier.
private Boolean callerHasProvider;
CacheKey(String baseName, Locale locale, ClassLoader loader, Module module) {
*** 673,683 ****
this.loaderRef = null;
} else {
this.loaderRef = new KeyElementReference<>(loader, referenceQueue, this);
}
this.moduleRef = new KeyElementReference<>(module, referenceQueue, this);
- this.providers = getServiceLoader(module, baseName);
calculateHashCode();
}
String getName() {
return name;
--- 674,683 ----
*** 710,724 ****
Module getModule() {
return moduleRef.get();
}
ServiceLoader<ResourceBundleProvider> getProviders() {
return providers;
}
boolean hasProviders() {
! return providers != null;
}
boolean callerHasProvider() {
return callerHasProvider == Boolean.TRUE;
}
--- 710,728 ----
Module getModule() {
return moduleRef.get();
}
ServiceLoader<ResourceBundleProvider> getProviders() {
+ if (!providersChecked) {
+ providers = getServiceLoader(getModule(), name);
+ providersChecked = true;
+ }
return providers;
}
boolean hasProviders() {
! return getProviders() != null;
}
boolean callerHasProvider() {
return callerHasProvider == Boolean.TRUE;
}
*** 787,798 ****
clone.loaderRef = new KeyElementReference<>(getLoader(),
referenceQueue, clone);
}
clone.moduleRef = new KeyElementReference<>(getModule(),
referenceQueue, clone);
! // Clear the reference to ResourceBundleProviders
clone.providers = null;
// Clear the reference to a Throwable
clone.cause = null;
// Clear callerHasProvider
clone.callerHasProvider = null;
return clone;
--- 791,803 ----
clone.loaderRef = new KeyElementReference<>(getLoader(),
referenceQueue, clone);
}
clone.moduleRef = new KeyElementReference<>(getModule(),
referenceQueue, clone);
! // Clear the reference to ResourceBundleProviders and the flag
clone.providers = null;
+ clone.providersChecked = false;
// Clear the reference to a Throwable
clone.cause = null;
// Clear callerHasProvider
clone.callerHasProvider = null;
return clone;
*** 1839,1848 ****
--- 1844,1856 ----
return bundle;
}
private static ServiceLoader<ResourceBundleProvider> getServiceLoader(Module module,
String baseName) {
+ if (!module.isNamed()) {
+ return null;
+ }
PrivilegedAction<ClassLoader> pa = module::getClassLoader;
ClassLoader loader = AccessController.doPrivileged(pa);
return getServiceLoader(module, loader, baseName);
}
< prev index next >