Package org.mvel2
Class ParserContext
- java.lang.Object
-
- org.mvel2.ParserContext
-
- All Implemented Interfaces:
Serializable
- Direct Known Subclasses:
SandboxedParserContext
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:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected booleanvariablesEscape
-
Constructor Summary
Constructors Constructor Description ParserContext()ParserContext(boolean debugSymbols)ParserContext(Map<String,Object> imports, Map<String,Interceptor> interceptors, String sourceFile)ParserContext(Parser rootParser)ParserContext(ParserConfiguration parserConfiguration)ParserContext(ParserConfiguration parserConfiguration, Object evaluationContext)ParserContext(ParserConfiguration parserConfiguration, ParserContext parent, boolean functionContext)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddError(ErrorDetail errorDetail)voidaddImport(Class cls)Adds an import for the specified Class.voidaddImport(String name, Class cls)Adds an import for a specified Class using an alias.voidaddImport(String name, Method method)Adds an import for a specified Method representing a static method import using an alias.voidaddImport(String name, MethodStub method)Adds a static import for the specifiedMethodStubwith an alias.voidaddImport(Proto proto)voidaddIndexedInput(String variable)voidaddIndexedInput(String[] variables)voidaddIndexedInputs(Collection<String> variables)voidaddIndexedLocals(String[] variables)voidaddIndexedLocals(Collection<String> variables)voidaddInput(String name, Class type)voidaddInput(String name, Class type, Class[] typeParameters)voidaddInputs(Map<String,Class> inputs)voidaddPackageImport(String packageName)Adds a package import to a parse session.voidaddTypeParameters(Map<String,Map<String,Type>> typeParameters)voidaddVariable(String name, Class type)voidaddVariable(String name, Class type, boolean failIfNewAssignment)voidaddVariables(Map<String,Class> variables)static ParserContextcreate()ParserContextcreateColoringSubcontext()ParserContextcreateSubcontext()voiddeclareFunction(Function function)ClassLoadergetClassLoader()Map<String,CompiledExpression>getCompiledExpressionCache()List<ErrorDetail>getErrorList()ObjectgetEvaluationContext()FunctiongetFunction(String name)MapgetFunctions()ClassgetImport(String name)Get an import that has been declared, either in the parsed script or programaticallyMap<String,Object>getImports()ArrayList<String>getIndexedInputs()String[]getIndexedVarNames()Map<String,Class>getInputs()Map<String,Interceptor>getInterceptors()LineLabelgetLastLineLabel()Type[]getLastTypeParameters()intgetLineCount()Get total number of lines declared in the current context.intgetLineFor(String sourceName, int cursor)intgetLineOffset()Get the current line offset.ObjectgetLiteral(String property)ParserConfigurationgetParserConfiguration()ProtogetProtoImport(String name)Map<String,Class>getReturnTypeCache()ParsergetRootParser()StringgetSourceFile()MethodStubgetStaticImport(String name)Get aMethodStubwhich wraps a static method import.ObjectgetStaticOrClassImport(String name)Returns either an instance of Class orMethodStub(whichever matches).Map<String,Type>getTypeParameters(String name)Type[]getTypeParametersAsArray(String name)HashMap<String,Class>getVariables()Set<String>getVariableScope()ClassgetVarOrInputType(String name)Return the variable or input type froom the current parser context.ClassgetVarOrInputTypeOrNull(String name)booleanhasFunction()booleanhasFunction(String name)booleanhasImport(String name)Tests to see if the specified import exists.booleanhasImports()booleanhasIndexedInputs()booleanhasLiteral(String property)booleanhasProtoImport(String name)booleanhasVarOrInput(String name)Tests whether or not a variable or input exists in the current parser context.intincrementLineCount(int increment)Increments the current line count by the specified amountvoidinitializeTables()Initializes internal Maps.voidinitLineMapping(String sourceName, char[] expr)booleanisAllowBootstrapBypass()booleanisBlockSymbols()booleanisCompiled()booleanisDebugSymbols()booleanisExecutableCodeReached()booleanisFatalError()booleanisFunctionContext()booleanisIndexAllocation()booleanisLineMapped(String sourceName)booleanisMethodAllowed(Method method)booleanisOptimizerNotified()booleanisRetainParserState()booleanisStrictTypeEnforcement()booleanisStrongTyping()booleanisVariablesEscape()booleanisVariableVisible(String var)booleanisVisitedLine(String sourceName, int lineNumber)voidmakeVisible(String var)voidoptimizationNotify()voidpopVariableScope()voidprocessTables()voidpushVariableScope()voidsetAllowBootstrapBypass(boolean allowBootstrapBypass)voidsetBlockSymbols(boolean blockSymbols)voidsetCompiled(boolean compiled)voidsetDebugSymbols(boolean debugSymbols)voidsetErrorList(List<ErrorDetail> errorList)voidsetExecutableCodeReached(boolean executableCodeReached)voidsetFatalError(boolean fatalError)voidsetImports(Map<String,Object> imports)voidsetIndexAllocation(boolean indexAllocation)voidsetInputs(Map<String,Class> inputs)voidsetInterceptors(Map<String,Interceptor> interceptors)LineLabelsetLastLineLabel(LineLabel lastLineLabel)voidsetLastTypeParameters(Type[] lastTypeParameters)voidsetLineAndOffset(int lineCount, int lineOffset)Sets both the current line count and line offsetintsetLineCount(int lineCount)Set the current number of lines in the current context.voidsetLineOffset(int lineOffset)Sets the current line offset.voidsetLiterals(Map<String,Object> literals)voidsetRetainParserState(boolean retainParserState)voidsetRootParser(Parser rootParser)voidsetSourceFile(String sourceFile)voidsetStrictTypeEnforcement(boolean strictTypeEnforcement)Enables strict type enforcement -voidsetStrongTyping(boolean strongTyping)Enables strong type enforcement.voidsetVariables(HashMap<String,Class> variables)ParserContextstronglyTyped()intvariableIndexOf(String name)voidvisitLine(String sourceName, int lineNumber)ParserContextwithImport(Class clazz)ParserContextwithIndexedVars(String[] varNames)ParserContextwithInput(String name, Class type)ParserContextwithInputs(Map<String,Class> inputs)ParserContextwithTypeParameters(Map<String,Map<String,Type>> typeParameters)
-
-
-
Constructor Detail
-
ParserContext
public ParserContext()
-
ParserContext
public ParserContext(boolean debugSymbols)
-
ParserContext
public ParserContext(Parser rootParser)
-
ParserContext
public ParserContext(ParserConfiguration parserConfiguration)
-
ParserContext
public ParserContext(ParserConfiguration parserConfiguration, Object evaluationContext)
-
ParserContext
public ParserContext(ParserConfiguration parserConfiguration, ParserContext parent, boolean functionContext)
-
-
Method Detail
-
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
-
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 countlineOffset- 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 aMethodStubwhich 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 orMethodStub(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)
-
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:
... doing this would allow an MVEL script to be written as such:parserContext.addImport("sys", System.class);sys.currentTimeMillis();- Parameters:
name- The alias to usecls- 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:
... doing this allows the System.currentTimeMillis() method to be executed in a script simply by writing time().parserContext.addImport("time", MVEL.getStaticMethod(System.class, "currentTimeMillis", new Class[0]));- Parameters:
name- The alias to usemethod- The instance of Method which represents the static import.
-
addImport
public void addImport(String name, MethodStub method)
Adds a static import for the specifiedMethodStubwith an alias.- Parameters:
name- The alias to usemethod- The instance of Method which represents the static import.- See Also:
addImport(String, org.mvel2.util.MethodStub)
-
initializeTables
public void initializeTables()
Initializes internal Maps. Called by the compiler.
-
processTables
public void processTables()
-
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)
-
pushVariableScope
public void pushVariableScope()
-
popVariableScope
public void popVariableScope()
-
makeVisible
public void makeVisible(String var)
-
isVariableVisible
public boolean isVariableVisible(String var)
-
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()
-
hasImports
public boolean hasImports()
-
declareFunction
public void declareFunction(Function function)
-
getFunctions
public Map getFunctions()
-
hasFunction
public boolean hasFunction(String name)
-
hasFunction
public boolean hasFunction()
-
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()
-
hasLiteral
public boolean hasLiteral(String property)
-
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()
-
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)
-
isMethodAllowed
public boolean isMethodAllowed(Method method)
-
-