freemarker.template.instruction
Class FunctionInstruction

java.lang.Object
  extended by freemarker.template.instruction.GenericStartInstruction
      extended by freemarker.template.instruction.FunctionInstruction
All Implemented Interfaces:
FunctionTemplateProcessor, ContainerInstruction, Instruction, TemplateProcessor, java.io.Serializable

public final class FunctionInstruction
extends GenericStartInstruction
implements FunctionTemplateProcessor, java.io.Serializable

An instruction representing a function definition. Function calls are represented by the CallInstruction class.

Unlike other instructions, FunctionInstruction is not added directly to the TemplateProcessor chain. Instead, instances are added directly to the template using the FunctionTemplateProcessor.addFunction(java.lang.String, freemarker.template.instruction.TemplateFunctionModel) method. At run time, these functions can be added to the data model for speedy lookup.

At compile time, instances of FunctionInstruction are replaced by NOOPInstruction, so that the TemplateProcessor tree doesn't have to deal with null values.

Version:
$Id: FunctionInstruction.java 1162 2013-04-20 12:04:32Z run2000 $
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from interface freemarker.template.TemplateProcessor
TemplateProcessor.ExitStatus
 
Nested classes/interfaces inherited from interface freemarker.template.instruction.Instruction
Instruction.EndType
 
Field Summary
 
Fields inherited from class freemarker.template.instruction.GenericStartInstruction
body
 
Constructor Summary
FunctionInstruction(Identifier name, java.util.List<Identifier> arguments)
          Constructor for a function definition.
 
Method Summary
 void addFunction(java.lang.String name, TemplateFunctionModel function)
          Adds an inner function to this function.
 TemplateProcessor callBuilder(TemplateBuilder builder)
          Call the TemplateBuilder with this function instruction.
 java.util.List<Identifier> getArgumentNames()
          Retrieve a list of argument names.
 TemplateFunctionModel getFunction(java.lang.String name)
          Retrieves an inner function from this function.
 java.util.Set<java.lang.String> getFunctionNames()
          Retrieve a Set of inner function names for this function.
 java.lang.String getName()
          Retrieve the function name.
 TemplateProcessor.ExitStatus process(TemplateProcessorParameters p)
          Processes the contents of this <function ...
 boolean testEndInstruction(Instruction endInstruction)
          Is this the right kind of instruction for the given EndInstruction?
 java.lang.String toString()
          Returns a string representation of the object.
 
Methods inherited from class freemarker.template.instruction.GenericStartInstruction
getEndType, isEndInstruction, setBody
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

FunctionInstruction

public FunctionInstruction(Identifier name,
                           java.util.List<Identifier> arguments)
Constructor for a function definition.

Parameters:
name - the name of the function
arguments - a List of Identifiers containing the names of each of the arguments
Throws:
java.lang.NullPointerException - the name or argument list is null
Method Detail

getName

public java.lang.String getName()
Retrieve the function name.

Returns:
the name of the function as a String

getArgumentNames

public java.util.List<Identifier> getArgumentNames()
Retrieve a list of argument names.

Returns:
a List of Identifiers representing the argument names

testEndInstruction

public boolean testEndInstruction(Instruction endInstruction)
Is this the right kind of instruction for the given EndInstruction?

Specified by:
testEndInstruction in interface ContainerInstruction
Parameters:
endInstruction - the end instruction we're testing
Returns:
true if the EndInstruction is a function end instruction, otherwise false

callBuilder

public TemplateProcessor callBuilder(TemplateBuilder builder)
                              throws ParseException
Call the TemplateBuilder with this function instruction.

Specified by:
callBuilder in interface Instruction
Overrides:
callBuilder in class GenericStartInstruction
Parameters:
builder - the TemplateBuilder to be called back
Throws:
ParseException

getFunction

public TemplateFunctionModel getFunction(java.lang.String name)
Retrieves an inner function from this function. Called by CallInstructions at run-time.

Specified by:
getFunction in interface FunctionTemplateProcessor
Parameters:
name - the name of the function to be retrieved

getFunctionNames

public java.util.Set<java.lang.String> getFunctionNames()
Retrieve a Set of inner function names for this function.

Specified by:
getFunctionNames in interface FunctionTemplateProcessor
Returns:
a Set of inner function names (String objects) that have been defined for this template.

addFunction

public void addFunction(java.lang.String name,
                        TemplateFunctionModel function)
                 throws java.lang.IllegalStateException
Adds an inner function to this function. Called by the TemplateBuilder at compile-time.

Specified by:
addFunction in interface FunctionTemplateProcessor
Parameters:
name - the name of the function to be stored
function - the inner function to be stored by this function
Throws:
java.lang.IllegalStateException - the method has been called after the template has been compiled

process

public TemplateProcessor.ExitStatus process(TemplateProcessorParameters p)
                                     throws java.io.IOException
Processes the contents of this <function ... > and outputs the resulting text to a Writer.

Specified by:
process in interface TemplateProcessor
Parameters:
p - template processing parameters
Returns:
an exit code indicating how the process terminated, typically used for short-circuiting template processing
Throws:
java.io.IOException - an IO error occurred during processing

toString

public java.lang.String toString()
Returns a string representation of the object.

Overrides:
toString in class java.lang.Object
Returns:
a String representing this instruction subtree