< 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 >