Class EvaluationContextImpl

java.lang.Object
io.pebbletemplates.pebble.template.EvaluationContextImpl
All Implemented Interfaces:
EvaluationContext, RenderedSizeContext

public class EvaluationContextImpl extends Object implements EvaluationContext, RenderedSizeContext
An evaluation context will store all stateful data that is necessary for the evaluation of a template. Passing the entire state around will assist with thread safety.
  • Field Details

    • strictVariables

      private final boolean strictVariables
    • hierarchy

      private final Hierarchy hierarchy
      A template will look to it's parent and children for overridden macros and other features; this inheritance chain will help the template keep track of where in the inheritance chain it currently is.
    • scopeChain

      private final ScopeChain scopeChain
      A scope is a set of visible variables. A trivial template will only have one scope. New scopes are added with for loops and macros for example.

      Most scopes will have a link to their parent scope which allow an evaluation to look up the scope chain for variables. A macro is an exception to this as it only has access to it's local variables.

    • locale

      private final Locale locale
      The locale of this template.
    • maxRenderedSize

      private final int maxRenderedSize
      The maximum size of the rendered template, in chars.
    • extensionRegistry

      private final ExtensionRegistry extensionRegistry
      All the available filters/tests/functions for this template.
    • tagCache

      private final PebbleCache<CacheKey,Object> tagCache
      The tag cache
    • executorService

      private final ExecutorService executorService
      The user-provided ExecutorService (can be null).
    • importedTemplates

      private final List<PebbleTemplateImpl> importedTemplates
      The imported templates are used to look up macros.
    • namedImportedTemplates

      private final Map<String,PebbleTemplateImpl> namedImportedTemplates
      The named imported templates are used to look up macros.
    • evaluationOptions

      private final EvaluationOptions evaluationOptions
      evaluation options
    • charsRendered

      private final AtomicInteger charsRendered
      Total number of chars written by all writers sharing this context.
  • Constructor Details

  • Method Details

    • shallowCopyWithoutInheritanceChain

      public EvaluationContextImpl shallowCopyWithoutInheritanceChain(PebbleTemplateImpl self)
      Makes an exact copy of the evaluation context EXCEPT for the inheritance chain. This is necessary for the "include" tag.
      Parameters:
      self - The template implementation
      Returns:
      A copy of the evaluation context
    • threadSafeCopy

      public EvaluationContextImpl threadSafeCopy(PebbleTemplateImpl self)
      Makes a "snapshot" of the evaluation context. The scopeChain object will be a deep copy and the imported templates will be a new list. This is used for the "parallel" tag.
      Parameters:
      self - The template implementation
      Returns:
      A copy of the evaluation context
    • getNamedImportedTemplate

      public PebbleTemplateImpl getNamedImportedTemplate(String alias)
      Returns the named imported template.
      Returns:
      the named imported template.
    • addNamedImportedTemplates

      public void addNamedImportedTemplates(String alias, PebbleTemplateImpl template)
    • isStrictVariables

      public boolean isStrictVariables()
      Returns whether or not this template is being evaluated in "strict templates" mode
      Specified by:
      isStrictVariables in interface EvaluationContext
      Returns:
      Whether or not this template is being evaluated in "strict templates" mode.
    • getLocale

      public Locale getLocale()
      Returns the locale
      Specified by:
      getLocale in interface EvaluationContext
      Returns:
      The current locale
    • getMaxRenderedSize

      public int getMaxRenderedSize()
      Returns the max rendered size.
      Specified by:
      getMaxRenderedSize in interface RenderedSizeContext
      Returns:
      The max rendered size.
    • getExtensionRegistry

      public ExtensionRegistry getExtensionRegistry()
      Returns the extension registry used to access all of the tests/filters/functions
      Returns:
      The extension registry
    • getExecutorService

      public ExecutorService getExecutorService()
      Returns the executor service if exists or null
      Returns:
      The executor service if exists, or null
    • getImportedTemplates

      public List<PebbleTemplateImpl> getImportedTemplates()
      Returns a list of imported templates.
      Returns:
      A list of imported templates.
    • getTagCache

      public PebbleCache<CacheKey,Object> getTagCache()
      Returns the cache used for the "cache" tag
      Returns:
      The cache used for the "cache" tag
    • getScopeChain

      public ScopeChain getScopeChain()
      Returns the scope chain data structure that allows variables to be added/removed from the current scope and retrieved from the nearest visible scopes.
      Returns:
      The scope chain.
    • getHierarchy

      public Hierarchy getHierarchy()
      Returns the data structure representing the entire hierarchy of the template currently being evaluated.
      Returns:
      The inheritance chain
    • getEvaluationOptions

      public EvaluationOptions getEvaluationOptions()
      Returns the evaluation options.
      Returns:
      the evaluation options
    • getVariable

      public Object getVariable(String key)
      Specified by:
      getVariable in interface EvaluationContext
    • pushScope

      private void pushScope(EvaluationContextImpl newContext, Map<?,?> additionalVariables, Callbacks.PebbleConsumer<EvaluationContextImpl> scopedFunction) throws IOException
      Throws:
      IOException
    • scopedShallowWithoutInheritanceChain

      public void scopedShallowWithoutInheritanceChain(PebbleTemplateImpl template, Map<?,?> additionalVariables, Callbacks.PebbleConsumer<EvaluationContextImpl> scopedFunction) throws IOException
      Throws:
      IOException
    • addAndGet

      public int addAndGet(int delta)
      Specified by:
      addAndGet in interface RenderedSizeContext