Package org.mvel2

Class ParserContext

java.lang.Object
org.mvel2.ParserContext
All Implemented Interfaces:
Serializable

public class ParserContext extends Object implements Serializable
The ParserContext is the main environment object used for sharing state throughout the entire parser/compileShared process. The ParserContext is used to configure the parser/compiler. For example:

 ParserContext parserContext = new ParserContext();
 parserContext.setStrongTyping(true); // turn on strong typing.

 Serializable comp = MVEL.compileExpression("foo.bar", parserContext);
 
See Also:
  • Field Details

    • sourceFile

      private String sourceFile
    • lineCount

      private int lineCount
    • lineOffset

      private int lineOffset
    • parent

      private ParserContext parent
    • parserConfiguration

      private ParserConfiguration parserConfiguration
    • evaluationContext

      private Object evaluationContext
    • indexedInputs

      private ArrayList<String> indexedInputs
    • indexedLocals

      private ArrayList<String> indexedLocals
    • variableVisibility

      private ArrayList<Set<String>> variableVisibility
    • variables

      private HashMap<String,Class> variables
    • inputs

      private Map<String,Class> inputs
    • typeParameters

      private transient HashMap<String,Map<String,Type>> typeParameters
    • lastTypeParameters

      private transient Type[] lastTypeParameters
    • globalFunctions

      private HashMap<String,Function> globalFunctions
    • errorList

      private transient List<ErrorDetail> errorList
    • sourceLineLookups

      private transient Map<String,LineMapper.LineLookup> sourceLineLookups
    • visitedLines

      private transient Map<String,Set<Integer>> visitedLines
    • lastLineLabel

      private LineLabel lastLineLabel
    • rootParser

      private transient Parser rootParser
    • compiledExpressionCache

      private transient Map<String,CompiledExpression> compiledExpressionCache
    • returnTypeCache

      private transient Map<String,Class> returnTypeCache
    • functionContext

      private boolean functionContext
    • compiled

      private boolean compiled
    • strictTypeEnforcement

      private boolean strictTypeEnforcement
    • strongTyping

      private boolean strongTyping
    • optimizationMode

      private boolean optimizationMode
    • fatalError

      private boolean fatalError
    • retainParserState

      private boolean retainParserState
    • debugSymbols

      private boolean debugSymbols
    • blockSymbols

      private boolean blockSymbols
    • executableCodeReached

      private boolean executableCodeReached
    • indexAllocation

      private boolean indexAllocation
    • variablesEscape

      protected boolean variablesEscape
  • Constructor Details

  • Method Details

    • createSubcontext

      public ParserContext createSubcontext()
    • createColoringSubcontext

      public ParserContext createColoringSubcontext()
    • hasVarOrInput

      public boolean hasVarOrInput(String name)
      Tests whether or not a variable or input exists in the current parser context.
      Parameters:
      name - The name of the identifier.
      Returns:
      boolean
    • getVarOrInputType

      public Class getVarOrInputType(String name)
      Return the variable or input type froom the current parser context. Returns Object.class if the type cannot be determined.
      Parameters:
      name - The name of the identifier
      Returns:
      boolean
    • getVarOrInputTypeOrNull

      public Class getVarOrInputTypeOrNull(String name)
    • getLineCount

      public int getLineCount()
      Get total number of lines declared in the current context.
      Returns:
      int of lines
    • setLineCount

      public int setLineCount(int lineCount)
      Set the current number of lines in the current context. (Generally only used by the compiler)
      Parameters:
      lineCount - The number of lines
      Returns:
      int of lines
    • incrementLineCount

      public int incrementLineCount(int increment)
      Increments the current line count by the specified amount
      Parameters:
      increment - The number of lines to increment
      Returns:
      int of lines
    • getLineOffset

      public int getLineOffset()
      Get the current line offset. This measures the number of cursor positions back to the beginning of the line.
      Returns:
      int offset
    • setLineOffset

      public void setLineOffset(int lineOffset)
      Sets the current line offset. (Generally only used by the compiler)
      Parameters:
      lineOffset - The offset amount
    • setLineAndOffset

      public void setLineAndOffset(int lineCount, int lineOffset)
      Sets both the current line count and line offset
      Parameters:
      lineCount - The line count
      lineOffset - The line offset
    • getImport

      public Class getImport(String name)
      Get an import that has been declared, either in the parsed script or programatically
      Parameters:
      name - The name identifier for the imported class (ie. "HashMap")
      Returns:
      An instance of Class denoting the imported class.
    • getStaticImport

      public MethodStub getStaticImport(String name)
      Get a MethodStub which wraps a static method import.
      Parameters:
      name - The name identifier
      Returns:
      An instance of MethodStub
    • getStaticOrClassImport

      public Object getStaticOrClassImport(String name)
      Returns either an instance of Class or MethodStub (whichever matches).
      Parameters:
      name - The name identifier.
      Returns:
      An instance of Class or MethodStub
    • addPackageImport

      public void addPackageImport(String packageName)
      Adds a package import to a parse session.
      Parameters:
      packageName - A fully qualified package (eg. java.util.concurrent).
    • hasImport

      public boolean hasImport(String name)
      Tests to see if the specified import exists.
      Parameters:
      name - A name identifier
      Returns:
      boolean
    • hasProtoImport

      public boolean hasProtoImport(String name)
    • getProtoImport

      public Proto getProtoImport(String name)
    • addImport

      public void addImport(Class cls)
      Adds an import for the specified Class.
      Parameters:
      cls - The instance of the Class which represents the imported class.
    • addImport

      public void addImport(Proto proto)
    • addImport

      public void addImport(String name, Class cls)
      Adds an import for a specified Class using an alias. For example:
      
       parserContext.addImport("sys", System.class);
       
      ... doing this would allow an MVEL script to be written as such:
      
       sys.currentTimeMillis();
       
      Parameters:
      name - The alias to use
      cls - The instance of the Class which represents the imported class.
    • addImport

      public void addImport(String name, Method method)
      Adds an import for a specified Method representing a static method import using an alias. For example:
      
       parserContext.addImport("time", MVEL.getStaticMethod(System.class, "currentTimeMillis", new Class[0]));
       
      ... doing this allows the System.currentTimeMillis() method to be executed in a script simply by writing time().
      Parameters:
      name - The alias to use
      method - The instance of Method which represents the static import.
    • addImport

      public void addImport(String name, MethodStub method)
      Adds a static import for the specified MethodStub with an alias.
      Parameters:
      name - The alias to use
      method - The instance of Method which represents the static import.
      See Also:
    • initializeTables

      public void initializeTables()
      Initializes internal Maps. Called by the compiler.
    • addVariable

      public void addVariable(String name, Class type, boolean failIfNewAssignment)
    • addVariable

      public void addVariable(String name, Class type)
    • addVariables

      public void addVariables(Map<String,Class> variables)
    • addInput

      public void addInput(String name, Class type)
    • addInput

      public void addInput(String name, Class type, Class[] typeParameters)
    • addInputs

      public void addInputs(Map<String,Class> inputs)
    • processTables

      public void processTables()
    • getInputs

      public Map<String,Class> getInputs()
    • setInputs

      public void setInputs(Map<String,Class> inputs)
    • getErrorList

      public List<ErrorDetail> getErrorList()
    • setErrorList

      public void setErrorList(List<ErrorDetail> errorList)
    • addError

      public void addError(ErrorDetail errorDetail)
    • isFatalError

      public boolean isFatalError()
    • setFatalError

      public void setFatalError(boolean fatalError)
    • isStrictTypeEnforcement

      public boolean isStrictTypeEnforcement()
    • setStrictTypeEnforcement

      public void setStrictTypeEnforcement(boolean strictTypeEnforcement)
      Enables strict type enforcement -
      Parameters:
      strictTypeEnforcement - -
    • isStrongTyping

      public boolean isStrongTyping()
    • setStrongTyping

      public void setStrongTyping(boolean strongTyping)
      Enables strong type enforcement.
      Parameters:
      strongTyping - -
    • isRetainParserState

      public boolean isRetainParserState()
    • setRetainParserState

      public void setRetainParserState(boolean retainParserState)
    • getRootParser

      public Parser getRootParser()
    • setRootParser

      public void setRootParser(Parser rootParser)
    • getSourceFile

      public String getSourceFile()
    • setSourceFile

      public void setSourceFile(String sourceFile)
    • getInterceptors

      public Map<String,Interceptor> getInterceptors()
    • setInterceptors

      public void setInterceptors(Map<String,Interceptor> interceptors)
    • getImports

      public Map<String,Object> getImports()
    • setImports

      public void setImports(Map<String,Object> imports)
    • initVariableVisibility

      private void initVariableVisibility()
    • pushVariableScope

      public void pushVariableScope()
    • popVariableScope

      public void popVariableScope()
    • makeVisible

      public void makeVisible(String var)
    • getVariableScope

      public Set<String> getVariableScope()
    • isVariableVisible

      public boolean isVariableVisible(String var)
    • getVariables

      public HashMap<String,Class> getVariables()
    • setVariables

      public void setVariables(HashMap<String,Class> variables)
    • isCompiled

      public boolean isCompiled()
    • setCompiled

      public void setCompiled(boolean compiled)
    • isDebugSymbols

      public boolean isDebugSymbols()
    • setDebugSymbols

      public void setDebugSymbols(boolean debugSymbols)
    • isLineMapped

      public boolean isLineMapped(String sourceName)
    • initLineMapping

      public void initLineMapping(String sourceName, char[] expr)
    • getLineFor

      public int getLineFor(String sourceName, int cursor)
    • isVisitedLine

      public boolean isVisitedLine(String sourceName, int lineNumber)
    • visitLine

      public void visitLine(String sourceName, int lineNumber)
    • getLastLineLabel

      public LineLabel getLastLineLabel()
    • setLastLineLabel

      public LineLabel setLastLineLabel(LineLabel lastLineLabel)
    • hasImports

      public boolean hasImports()
    • declareFunction

      public void declareFunction(Function function)
    • getFunction

      public Function getFunction(String name)
    • getFunctions

      public Map getFunctions()
    • hasFunction

      public boolean hasFunction(String name)
    • hasFunction

      public boolean hasFunction()
    • addTypeParameters

      public void addTypeParameters(Map<String,Map<String,Type>> typeParameters)
    • getTypeParameters

      public Map<String,Type> getTypeParameters(String name)
    • getTypeParametersAsArray

      public Type[] getTypeParametersAsArray(String name)
    • isBlockSymbols

      public boolean isBlockSymbols()
    • setBlockSymbols

      public void setBlockSymbols(boolean blockSymbols)
    • isVariablesEscape

      public boolean isVariablesEscape()
    • isExecutableCodeReached

      public boolean isExecutableCodeReached()
    • setExecutableCodeReached

      public void setExecutableCodeReached(boolean executableCodeReached)
    • optimizationNotify

      public void optimizationNotify()
    • isOptimizerNotified

      public boolean isOptimizerNotified()
    • initIndexedVariables

      private void initIndexedVariables()
    • getIndexedInputs

      public ArrayList<String> getIndexedInputs()
    • addIndexedInput

      public void addIndexedInput(String[] variables)
    • addIndexedLocals

      public void addIndexedLocals(String[] variables)
    • addIndexedLocals

      public void addIndexedLocals(Collection<String> variables)
    • addIndexedInput

      public void addIndexedInput(String variable)
    • addIndexedInputs

      public void addIndexedInputs(Collection<String> variables)
    • variableIndexOf

      public int variableIndexOf(String name)
    • getEvaluationContext

      public Object getEvaluationContext()
    • hasIndexedInputs

      public boolean hasIndexedInputs()
    • isIndexAllocation

      public boolean isIndexAllocation()
    • setIndexAllocation

      public void setIndexAllocation(boolean indexAllocation)
    • isFunctionContext

      public boolean isFunctionContext()
    • getParserConfiguration

      public ParserConfiguration getParserConfiguration()
    • getClassLoader

      public ClassLoader getClassLoader()
    • getLastTypeParameters

      public Type[] getLastTypeParameters()
    • setLastTypeParameters

      public void setLastTypeParameters(Type[] lastTypeParameters)
    • isAllowBootstrapBypass

      public boolean isAllowBootstrapBypass()
    • setAllowBootstrapBypass

      public void setAllowBootstrapBypass(boolean allowBootstrapBypass)
    • getIndexedVarNames

      public String[] getIndexedVarNames()
    • getCompiledExpressionCache

      public Map<String,CompiledExpression> getCompiledExpressionCache()
    • getReturnTypeCache

      public Map<String,Class> getReturnTypeCache()
    • create

      public static ParserContext create()
    • stronglyTyped

      public ParserContext stronglyTyped()
    • withInput

      public ParserContext withInput(String name, Class type)
    • withInputs

      public ParserContext withInputs(Map<String,Class> inputs)
    • withTypeParameters

      public ParserContext withTypeParameters(Map<String,Map<String,Type>> typeParameters)
    • withImport

      public ParserContext withImport(Class clazz)
    • withIndexedVars

      public ParserContext withIndexedVars(String[] varNames)