Fork me on GitHub

ScopeChain

In package com.mitchellbosecke.pebble.template

public class ScopeChain extends Object

A stack data structure used to represent the scope of variables that are currently accessible. Pushing a new scope will allow the template to add variables with names of pre-existing variables without overriding the originals; to access the original variables you would pop the scope again.

Constructors

public ScopeChain()

Constructs an empty scope chain without any known scopes.

Parameters:
  • No parameters

Methods

public ScopeChain deepCopy()

Creates a deep copy of the ScopeChain. This is used for the parallel tag because every new thread should have a "snapshot" of the scopes, i.e. if one thread adds a new object to a scope, it should not be available to the other threads.

This will construct a new scope chain and new scopes but it will continue to have references to the original user-provided variables. This is why it is important for the user to only provide thread-safe variables when using the "parallel" tag.

Parameters:
  • No parameters
public void pushScope()

Adds an empty non-local scope to the scope chain

Parameters:
  • No parameters
public void pushScope(Map<String, Object> map)

Adds a new non-local scope to the scope chain

Parameters:
  • Map<String, Object> map

    The known variables of this scope.

public void pushLocalScope()

Adds a new local scope to the scope chain

Parameters:
  • No parameters
public void popScope()

Pops the most recent scope from the scope chain.

Parameters:
  • No parameters
public void put(String key, Object value)

Adds a variable to the current scope.

Parameters:
  • String key

    The name of the variable

  • Object value

    The value of the variable

public Object get(String key)

Retrieves a variable from the scope chain, starting at the current scope and working it's way up all visible scopes.

Parameters:
  • String key

    The name of the variable

public boolean containsKey(String key)

This method checks if the given {@code key} does exists within the scope chain.

Parameters:
  • String key

    the for which the the check should be executed for.

public boolean currentScopeContainsVariable(String variableName)

Checks if the current scope contains a variable without then looking up the scope chain.

Parameters:
  • String variableName

    The name of the variable

public void set(String key, Object value)

Sets the value of a variable in the first scope in the chain that already contains the variable; adds a variable to the current scope if an existing variable is not found.

Parameters:
  • String key

    The name of the variable

  • Object value

    The value of the variable

public List<Scope> getGlobalScopes()
Parameters:
  • No parameters