Make i18n use ResourceOracle to improve speed.
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5629 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/i18n/rebind/AbstractLocalizableImplCreator.java b/user/src/com/google/gwt/i18n/rebind/AbstractLocalizableImplCreator.java
index 74460f6..396cf2f 100644
--- a/user/src/com/google/gwt/i18n/rebind/AbstractLocalizableImplCreator.java
+++ b/user/src/com/google/gwt/i18n/rebind/AbstractLocalizableImplCreator.java
@@ -95,7 +95,7 @@
ResourceList resourceList = null;
try {
resourceList = ResourceFactory.getBundle(logger, targetClass, locale,
- assignableToConstants);
+ assignableToConstants, context.getResourcesOracle().getResourceMap());
} catch (MissingResourceException e) {
throw error(logger,
"Localization failed; there must be at least one resource accessible through"
diff --git a/user/src/com/google/gwt/i18n/rebind/ResourceFactory.java b/user/src/com/google/gwt/i18n/rebind/ResourceFactory.java
index f95c0fa..a43ae7d 100644
--- a/user/src/com/google/gwt/i18n/rebind/ResourceFactory.java
+++ b/user/src/com/google/gwt/i18n/rebind/ResourceFactory.java
@@ -19,6 +19,7 @@
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.typeinfo.JClassType;
+import com.google.gwt.dev.resource.Resource;
import com.google.gwt.dev.util.collect.IdentityHashSet;
import com.google.gwt.i18n.client.LocalizableResource.DefaultLocale;
import com.google.gwt.i18n.rebind.AbstractResource.ResourceList;
@@ -42,10 +43,10 @@
* Pair of JClassType and GwtLocale.
*/
private static class ClassLocale {
-
+
private final JClassType clazz;
private final GwtLocale locale;
-
+
public ClassLocale(JClassType clazz, GwtLocale locale) {
assert clazz != null;
assert locale != null;
@@ -62,7 +63,7 @@
return false;
}
ClassLocale other = (ClassLocale) obj;
- return clazz.equals(other.clazz) && locale.equals(other.locale);
+ return clazz.equals(other.clazz) && locale.equals(other.locale);
}
public JClassType getJClass() {
@@ -77,7 +78,7 @@
public int hashCode() {
return clazz.hashCode() + locale.hashCode() * 53;
}
-
+
@Override
public String toString() {
return clazz.getQualifiedSourceName() + "/" + locale.toString();
@@ -85,13 +86,12 @@
}
/**
- * Separator between class name and locale in resource files. Should not
+ * Separator between class name and locale in resource files. Should not
* appear in valid localizable class names.
*/
public static final char LOCALE_SEPARATOR = '_';
- private static Map<ClassLocale, ResourceList> cache = new HashMap<
- ClassLocale, ResourceList>();
+ private static Map<ClassLocale, ResourceList> cache = new HashMap<ClassLocale, ResourceList>();
private static List<ResourceFactory> loaders = new ArrayList<ResourceFactory>();
static {
@@ -114,18 +114,18 @@
* @return resource list
*/
public static ResourceList getBundle(TreeLogger logger, JClassType topClass,
- GwtLocale bundleLocale, boolean isConstants) {
+ GwtLocale bundleLocale, boolean isConstants,
+ Map<String, Resource> resourceMap) {
List<GwtLocale> locales = bundleLocale.getCompleteSearchList();
List<JClassType> classes = new ArrayList<JClassType>();
Set<JClassType> seenClasses = new IdentityHashSet<JClassType>();
- Map<ClassLocale, AnnotationsResource> annotations = new HashMap<ClassLocale,
- AnnotationsResource>();
+ Map<ClassLocale, AnnotationsResource> annotations = new HashMap<ClassLocale, AnnotationsResource>();
GwtLocaleFactory factory = LocaleUtils.getLocaleFactory();
GwtLocale defaultLocale = factory.getDefault();
walkInheritanceTree(logger, topClass, factory, defaultLocale, classes,
annotations, seenClasses, isConstants);
// TODO(jat): handle explicit subinterface with other locales -- ie:
- // public interface Foo_es_MX extends Foo { ... }
+ // public interface Foo_es_MX extends Foo { ... }
ResourceList allResources = new ResourceList();
for (GwtLocale locale : locales) {
for (JClassType clazz : classes) {
@@ -136,7 +136,7 @@
} else {
cache.put(key, null);
resources = new ResourceList();
- addFileResources(clazz, locale, resources);
+ addFileResources(clazz, locale, resourceMap, resources);
AnnotationsResource annotationsResource = annotations.get(key);
if (annotationsResource != null) {
resources.add(annotationsResource);
@@ -166,7 +166,7 @@
}
private static void addFileResources(JClassType clazz, GwtLocale locale,
- ResourceList resources) {
+ Map<String, Resource> resourceMap, ResourceList resources) {
// TODO: handle classes in the default package?
String targetPath = clazz.getPackage().getName() + '.'
+ getResourceName(clazz);
@@ -175,21 +175,20 @@
localizedPath = targetPath + LOCALE_SEPARATOR + locale.getAsString();
}
// Check for file-based resources.
- ClassLoader loader = ResourceFactory.class.getClassLoader();
String partialPath = localizedPath.replace('.', '/');
for (int i = 0; i < loaders.size(); i++) {
ResourceFactory element = loaders.get(i);
String ext = "." + element.getExt();
String path = partialPath + ext;
- InputStream m = loader.getResourceAsStream(path);
- if (m == null && partialPath.contains("$")) {
+ Resource resource = resourceMap.get(path);
+ if (resource == null && partialPath.contains("$")) {
// Also look for A_B for inner classes, as $ in path names
// can cause issues for some build tools.
path = partialPath.replace('$', '_') + ext;
- m = loader.getResourceAsStream(path);
+ resource = resourceMap.get(path);
}
- if (m != null) {
- AbstractResource found = element.load(m, locale);
+ if (resource != null) {
+ AbstractResource found = element.load(resource.openContents(), locale);
found.setPath(path);
resources.add(found);
}
@@ -215,14 +214,14 @@
ClassLocale key = new ClassLocale(clazz, defaultLocale);
annotations.put(key, resource);
String defLocaleValue = null;
-
+
// If the class has an embedded locale in it, use that for the default
String className = clazz.getSimpleSourceName();
int underscore = className.indexOf('_');
if (underscore >= 0) {
defLocaleValue = className.substring(underscore + 1);
}
-
+
// If there is an annotation declaring the default locale, use that
DefaultLocale defLocaleAnnot = getClassAnnotation(clazz,
DefaultLocale.class);
@@ -240,13 +239,13 @@
logger.log(TreeLogger.ERROR, e.getMessage(), e);
}
if (clazz.getSuperclass() != null) {
- walkInheritanceTree(logger, clazz.getSuperclass(), factory, defaultLocale,
- classes, annotations, seenClasses, isConstants);
+ walkInheritanceTree(logger, clazz.getSuperclass(), factory,
+ defaultLocale, classes, annotations, seenClasses, isConstants);
}
for (JClassType intf : clazz.getImplementedInterfaces()) {
walkInheritanceTree(logger, intf, factory, defaultLocale, classes,
annotations, seenClasses, isConstants);
- }
+ }
}
abstract String getExt();