(A version history fix)
Configuration.setTemplateLoader doesn't clear the cache anymore if you set the same TemplateLoader object (same instance) again.
Added interface freemarker.cache.CacheStorageWithGetSize which allows querying the current number of cache entries in a CacheStorage that implements it. It's implemented by all out-of-the-box CacheStorage implementations. Also added getStrongSize() and getSoftSize() to MRUCacheStorage.
Bug fix [394]: When trying to access the optional Jython (or W3C DOM) classes has failed in DefaultObjectWrapper with an Error, rather than with an Exception, loading the DefaultObjectWrapper class itself has failed, instead of the Jython (or W3C DOM) support being disabled. From now in, it will survive any kind of Throwable there, and if the Throwable is not an ClassNotFoundException, it will also log the Throwable.
Bug fix [311]: TemplateBooleanModel.TRUE and FALSE are now serializable
Bug fixed [373]: This are three bugs actually, which can cause problems when FreeMarker re-loads a template because of a charset override with <#ftl encoding="...">: First, if the template loader was a URLTemplateLoader, when TemplateLoader.getReader() was called for the second time, and the Reader returned for the first time was already used, it might returned an empty or corrupted template, depending on the backing URL implementation. Secondly, when FreeMarer has decided if a template file has to be re-loaded because its encoding specified with <#ftl encoding="..."> differs from the encoding used for loading the template first, it has used case-sensitive comparison, thus often re-loaded needlessly (like "UTF-8" and "utf-8" mean the same). Now this comparison is case-insensitive. Last not least, when retrying with the second charset, The TemplateCache has forgotten to close the first Reader, which can be a handle leak.
(Manual typo...)
Bug fixed [300]: Logger class availability check was incorrect in that it has checked the availability of logger libraries with the thread context class loader, then later it tried to link to them with the defining class loader of the FreeMarker classes. With some class loader setups (notably under Netbeans sometimes) this led to ClassDefNotFoundError-s that made FreeMarker unusable. (The check itself was also not very durable, as it didn't expected LinakeError-s, only ClassNotFoundException.)
(Internal renaming: read-only -> write protected)
template_loader was added as possible configuration setting Properties key.
(Some Javadoc improvements regarding sharedVariables)
Template not found exceptions now explain that the template path is relative to a virtual file system, and show the toString of the TemplateLoader. The out-of-the-box TemplateLoader implementations now have an overridden toString to show the actual base directory and such details. Custom TemplateLoader implementations are encouraged to override toString.
(Template-not-found error messages minor refinements.)
When the undefined variable's name is started with $ (frequent mistake of Velocity users), a hint is added that explains that the $ is probably not needed.
Hint to explain in the case of goodName.undefined and goodName["undefined"] that it's the last step of the quoted expression that caused the error.
(Fixed JavaDoc @Deprecated text)
Error message tip to suggest using ?size and ?length when foo.size and foo.length fails with undefined variable. Also added tests for the AST-based tips.
Test that runs the example from the bug report #363 summary
(Updated Java DateFormat link, also added it to one more place.)
Added some tests for parser error messages.