Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Switching to org.apache.freemarker package and Maven group. [Status: Done]
  • Modularization: FM2 is one big jar, which contains lot of non-core functionality. FM3 should be split to multiple modules (jar-s, sub-projects), especially the Servlet/JSP support should be factored out. [Status: Done; we have freemarker-core.jar, freemarker-servlet.jar, etc. See the aggregate JavaDoc here; each org.apache.freemarker subpackage is a module.]
  • Configuration (and TemplateConfiguration and Template) should be immutable. Builder and fluent API-s should be used to configure them. [Status: Done, see Configuration.Builder, etc.]
  • Change Configuration defaults to fit best practices [Status: Done]
  • Switch the build system from Ant to Gradle [Status: Partially done; the project has already switched to Gradle, but additional tasks will be needed for distribution and such.]
  • Template loading/caching architecture improvements:
    • Better TemplateLoader, especially considering more efficient loading for databases [Status: Done]
    • Optionally allow the whole loading/caching mechanism to be replaced, as opposed to only replacing some aspects of the hard-wired logic [Status: Done, see TemplateResolver]
    • Two layer caching: When two different template lookups point to the same physical template “file”, they should use a common entry from a 2nd level cache, rather than loading/caching the same template twice. [Status: Possible solutions were discussed]
    • The template acquisition feature need to be fixed (or dropped) [Status: Not done]
  • Either clean up the TemplateModel API‑s (especially, hashes should support non-string keys), or switch to MOP mechanism instead of object wrapping [Status: Some API cleanup was done]
  • Unify the various FM2 callable FTL types (TemplateDirectiveModel-s, TemplateTransformModel-s, macros, functions (defined in template), TemplateMethodModel-s, TemplateMethodModelEx-s, etc.) into fever, more universal classes. [Status: Done. See the new TemplateDirectiveModel and TemplateFunctionModel, which together replace all legacy interfaces. These support both named and positional parameters, just like macros. Also, #macro and #function now creates a TemplateDirectiveModel-s or TemplateFunctionModel, respectively.]
  • New API-s needed for "custom dialects" feature (see later). Such as, allow defining custom directives and custom functions (callable as built-ins), which are looked up and bound to the template during the parsing phase. [Status: Not done]
  • Android compatibility [Status: Not done]
  • Various smaller cleanup tasks [Status: A lot of it was done… like we have switched to SLF4J and removed the internal log abstraction, removed the support for emulating old bugs, replaced int constants with Java 5 enums on most places, etc.]

...