if (context.equals(tOCache.populatedFrom)) {
return;
}
final TypeOracle typeOracle = context.getTypeOracle();
final MetaClassCache cache = MetaClassFactory.getMetaClassCache();
if (typeOracle != null) {
final Map<String, MetaClass> classesToPush = new HashMap<String, MetaClass>(typeOracle.getTypes().length);
final Set<String> translatable = new HashSet<String>(RebindUtils.findTranslatablePackages(context));
final Set<String> reloadable = RebindUtils.getReloadablePackageNames(context);
translatable.remove("java.lang");
translatable.remove("java.lang.annotation");
for (final JClassType type : typeOracle.getTypes()) {
if (!translatable.contains(type.getPackage().getName())) {
// logger.log(com.google.gwt.core.ext.TreeLogger.Type.DEBUG, "Skipping non-translatable " + type.getQualifiedSourceName());
continue;
}
if (type.isAnnotation() != null || type.getQualifiedSourceName().equals("java.lang.annotation.Annotation")) {
// logger.log(com.google.gwt.core.ext.TreeLogger.Type.DEBUG, "Caching annotation type " + type.getQualifiedSourceName());
if (!MetaClassFactory.canLoadClass(type.getQualifiedBinaryName())) {
throw new RuntimeException("a new annotation has been introduced (" + type.getQualifiedSourceName() + "); "
+ "you cannot currently introduce new annotations in devmode. Please restart.");
}
final MetaClass clazz = JavaReflectionClass
.newUncachedInstance(MetaClassFactory.loadClass(type.getQualifiedBinaryName()));
if (isReloadable(clazz, reloadable))
classesToPush.put(clazz.getFullyQualifiedName(), clazz);
else
cache.pushCache(clazz);
}
else {
logger.log(TreeLogger.Type.DEBUG, "Caching translatable type " + type.getQualifiedSourceName());
final MetaClass clazz = GWTClass.newInstance(typeOracle, type);
if (isReloadable(clazz, reloadable))
classesToPush.put(clazz.getFullyQualifiedName(), clazz);
else
cache.pushCache(clazz);
}
}
cache.updateCache(classesToPush);
}
tOCache.populatedFrom = context;
CacheUtil.getCache(EnvUtil.EnvironmentConfigCache.class).clear();
}