summaryrefslogtreecommitdiff
path: root/libjava/classpath/java/util/ResourceBundle.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/java/util/ResourceBundle.java')
-rw-r--r--libjava/classpath/java/util/ResourceBundle.java70
1 files changed, 62 insertions, 8 deletions
diff --git a/libjava/classpath/java/util/ResourceBundle.java b/libjava/classpath/java/util/ResourceBundle.java
index 9b82bc80152..21243403c5f 100644
--- a/libjava/classpath/java/util/ResourceBundle.java
+++ b/libjava/classpath/java/util/ResourceBundle.java
@@ -41,6 +41,8 @@ package java.util;
import gnu.classpath.VMStackWalker;
+import gnu.java.lang.CPStringBuilder;
+
import java.io.IOException;
import java.io.InputStream;
@@ -121,9 +123,10 @@ public abstract class ResourceBundle
*
* @see BundleKey
*/
- private static Map bundleCache = new LinkedHashMap(CACHE_SIZE + 1, 0.75F, true)
+ private static Map<BundleKey,Object> bundleCache =
+ new LinkedHashMap<BundleKey,Object>(CACHE_SIZE + 1, 0.75F, true)
{
- public boolean removeEldestEntry(Map.Entry entry)
+ public boolean removeEldestEntry(Map.Entry<BundleKey,Object> entry)
{
return size() > CACHE_SIZE;
}
@@ -294,14 +297,29 @@ public abstract class ResourceBundle
&& locale.equals(key.locale)
&& classLoader.equals(key.classLoader);
}
+
+ public String toString()
+ {
+ CPStringBuilder builder = new CPStringBuilder(getClass().getName());
+ builder.append("[defaultLocale=");
+ builder.append(defaultLocale);
+ builder.append(",baseName=");
+ builder.append(baseName);
+ builder.append(",locale=");
+ builder.append(locale);
+ builder.append(",classLoader=");
+ builder.append(classLoader);
+ builder.append("]");
+ return builder.toString();
+ }
}
/** A cache lookup key. This avoids having to a new one for every
* getBundle() call. */
- private static BundleKey lookupKey = new BundleKey();
+ private static final BundleKey lookupKey = new BundleKey();
/** Singleton cache entry to represent previous failed lookups. */
- private static Object nullEntry = new Object();
+ private static final Object nullEntry = new Object();
/**
* Get the appropriate ResourceBundle for the given locale. The following
@@ -452,7 +470,7 @@ public abstract class ResourceBundle
ResourceBundle bundle = null;
try
{
- Class rbClass;
+ Class<?> rbClass;
if (classloader == null)
rbClass = Class.forName(localizedName);
else
@@ -495,7 +513,7 @@ public abstract class ResourceBundle
}
/**
- * Tries to load a the bundle for a given locale, also loads the backup
+ * Tries to load the bundle for a given locale, also loads the backup
* locales with the same language.
*
* @param baseName the raw bundle name, without locale qualifiers
@@ -515,9 +533,9 @@ public abstract class ResourceBundle
int baseLen = baseName.length();
- // Build up a StringBuffer containing the complete bundle name, fully
+ // Build up a CPStringBuilder containing the complete bundle name, fully
// qualified by locale.
- StringBuffer sb = new StringBuffer(baseLen + variant.length() + 7);
+ CPStringBuilder sb = new CPStringBuilder(baseLen + variant.length() + 7);
sb.append(baseName);
@@ -568,4 +586,40 @@ public abstract class ResourceBundle
return first;
}
+
+ /**
+ * Remove all resources from the cache that were loaded
+ * using the class loader of the calling class.
+ *
+ * @since 1.6
+ */
+ public static final void clearCache()
+ {
+ clearCache(VMStackWalker.getCallingClassLoader());
+ }
+
+ /**
+ * Remove all resources from the cache that were loaded
+ * using the specified class loader.
+ *
+ * @param loader the loader used for the bundles that will be removed.
+ * @throws NullPointerException if {@code loader} is {@code null}.
+ * @since 1.6
+ */
+ public static final void clearCache(ClassLoader loader)
+ {
+ if (loader == null)
+ throw new NullPointerException("The loader can not be null.");
+ synchronized (ResourceBundle.class)
+ {
+ Iterator<BundleKey> iter = bundleCache.keySet().iterator();
+ while (iter.hasNext())
+ {
+ BundleKey key = iter.next();
+ if (key.classLoader == loader)
+ iter.remove();
+ }
+ }
+ }
+
}