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:
- 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.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()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)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.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()
-
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)
-
-