public class ExpressRunner
extends java.lang.Object
| Constructor and Description |
|---|
ExpressRunner() |
ExpressRunner(boolean isPrecise,
boolean isTrace) |
ExpressRunner(boolean isPrecise,
boolean isTrace,
IExpressResourceLoader iExpressResourceLoader,
NodeTypeManager nodeTypeManager) |
ExpressRunner(boolean isPrecise,
boolean isTrace,
IExpressResourceLoader iExpressResourceLoader,
NodeTypeManager nodeTypeManager,
java.util.Map<java.lang.String,java.util.concurrent.Future<InstructionSet>> cacheMap) |
ExpressRunner(boolean isPrecise,
boolean isTrace,
java.util.Map<java.lang.String,java.util.concurrent.Future<InstructionSet>> cacheMap) |
ExpressRunner(boolean isPrecise,
boolean isStrace,
NodeTypeManager nodeTypeManager) |
| Modifier and Type | Method and Description |
|---|---|
void |
addClassField(java.lang.String field,
java.lang.Class<?> bindingClass,
java.lang.Class<?> returnType,
Operator op)
添加类的方法
|
void |
addClassField(java.lang.String field,
java.lang.Class<?> bindingClass,
Operator op)
添加类的方法
|
void |
addClassMethod(java.lang.String name,
java.lang.Class<?> bindingClass,
OperatorBase op)
添加类的方法
|
void |
addFunction(java.lang.String name,
OperatorBase op)
添加函数定义
|
void |
addFunctionAndClassMethod(java.lang.String name,
java.lang.Class<?> bindingClass,
OperatorBase op)
添加函数定义扩展类的方法
|
void |
addFunctionOfClassMethod(java.lang.String name,
java.lang.Class<?> clazz,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String errorInfo)
添加一个类的函数定义,例如:Math.abs(double) 映射为表达式中的 "取绝对值(-5.0)"
|
void |
addFunctionOfClassMethod(java.lang.String name,
java.lang.String className,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String errorInfo)
添加一个类的函数定义,例如:Math.abs(double) 映射为表达式中的 "取绝对值(-5.0)"
|
void |
addFunctionOfClassMethod(java.lang.String name,
java.lang.String className,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String[] parameterDesc,
java.lang.String[] parameterAnnotation,
java.lang.String errorInfo)
添加一个类的函数定义,例如:Math.abs(double) 映射为表达式中的 "取绝对值(-5.0)"
|
void |
addFunctionOfClassMethod(java.lang.String name,
java.lang.String className,
java.lang.String functionName,
java.lang.String[] parameterTypes,
java.lang.String errorInfo)
添加一个类的函数定义,例如:Math.abs(double) 映射为表达式中的 "取绝对值(-5.0)"
|
void |
addFunctionOfClassMethod(java.lang.String name,
java.lang.String className,
java.lang.String functionName,
java.lang.String[] parameterTypes,
java.lang.String[] parameterDesc,
java.lang.String[] parameterAnnotation,
java.lang.String errorInfo)
添加一个类的函数定义,例如:Math.abs(double) 映射为表达式中的 "取绝对值(-5.0)"
|
void |
addFunctionOfServiceMethod(java.lang.String name,
java.lang.Object serviceObject,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String errorInfo)
用于将一个用户自己定义的对象(例如Spring对象)方法转换为一个表达式计算的函数
|
void |
addFunctionOfServiceMethod(java.lang.String name,
java.lang.Object serviceObject,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String[] parameterDesc,
java.lang.String[] parameterAnnotation,
java.lang.String errorInfo)
用于将一个用户自己定义的对象(例如Spring对象)方法转换为一个表达式计算的函数
|
void |
addFunctionOfServiceMethod(java.lang.String name,
java.lang.Object serviceObject,
java.lang.String functionName,
java.lang.String[] parameterTypes,
java.lang.String errorInfo)
用于将一个用户自己定义的对象(例如Spring对象)方法转换为一个表达式计算的函数
|
void |
addFunctionOfServiceMethod(java.lang.String name,
java.lang.Object serviceObject,
java.lang.String functionName,
java.lang.String[] parameterTypes,
java.lang.String[] parameterDesc,
java.lang.String[] parameterAnnotation,
java.lang.String errorInfo) |
void |
addMacro(java.lang.String macroName,
java.lang.String express)
添加宏定义
例如: macro 宏名称 { abc(userInfo.userId);}
|
void |
addOperator(java.lang.String name,
Operator operator)
添加操作符号,此操作符号的优先级与 "*"相同,语法形式也是 data name data
|
void |
addOperator(java.lang.String name,
java.lang.String refOperatorName,
Operator operator)
添加操作符号,此操作符号与给定的参照操作符号在优先级别和语法形式上一致
|
void |
addOperatorWithAlias(java.lang.String keyWordName,
java.lang.String realKeyWordName,
java.lang.String errorInfo)
添加操作符和关键字的别名,同时对操作符可以指定错误信息。
例如:addOperatorWithAlias("加","+",null)
|
void |
addSystemFunctions() |
boolean |
checkSyntax(java.lang.String text)
提供简答的语法检查,保证可以在运行期本地环境编译成指令
|
boolean |
checkSyntax(java.lang.String text,
boolean mockRemoteJavaClass,
java.util.List<java.lang.String> remoteJavaClassNames)
提供复杂的语法检查,(比如检查自定义的java类),不保证运行期在本地环境可以编译成指令
|
void |
clearExpressCache()
清除缓存
|
void |
createInstructionSet(ExpressNode root,
InstructionSet result) |
InstructionSet |
createInstructionSet(ExpressNode root,
java.lang.String type) |
boolean |
createInstructionSetPrivate(InstructionSet result,
java.util.Stack<ForRelBreakContinue> forStack,
ExpressNode node,
boolean isRoot) |
java.lang.Object |
execute(InstructionSet instructionSet,
IExpressContext<java.lang.String,java.lang.Object> context,
java.util.List<java.lang.String> errorList,
boolean isTrace,
boolean isCatchException)
执行指令集
|
java.lang.Object |
execute(java.lang.String expressString,
IExpressContext<java.lang.String,java.lang.Object> context,
java.util.List<java.lang.String> errorList,
boolean isCache,
boolean isTrace)
执行一段文本
|
java.lang.Object |
execute(java.lang.String expressString,
IExpressContext<java.lang.String,java.lang.Object> context,
java.util.List<java.lang.String> errorList,
boolean isCache,
boolean isTrace,
long timeoutMillis)
执行一段文本
|
java.lang.Object |
executeByExpressName(java.lang.String name,
IExpressContext<java.lang.String,java.lang.Object> context,
java.util.List<java.lang.String> errorList,
boolean isTrace,
boolean isCatchException)
根据表达式的名称进行执行
|
AppendingClassFieldManager |
getAppendingClassFieldManager() |
AppendingClassMethodManager |
getAppendingClassMethodManager() |
ExportItem[] |
getExportInfo()
输出全局定义信息
|
IExpressResourceLoader |
getExpressResourceLoader() |
OperatorBase |
getFunction(java.lang.String name)
获取函数定义,通过函数定义可以拿到参数的说明信息
|
InstructionSet |
getInstructionSetFromLocalCache(java.lang.String expressString)
优先从本地指令集缓存获取指令集,没有的话生成并且缓存在本地
|
NodeTypeManager |
getNodeTypeManager()
获取语法定义的管理器
|
IOperateDataCache |
getOperateDataCache() |
OperatorFactory |
getOperatorFactory()
获取操作符号管理器
|
java.lang.String[] |
getOutFunctionNames(java.lang.String express) |
java.lang.String[] |
getOutVarNames(java.lang.String express)
获取一个表达式需要的外部变量名称列表
|
ExpressPackage |
getRootExpressPackage() |
boolean |
isIgnoreConstChar()
是否忽略charset类型的数据,而识别为string,比如'a' -》 "a"
默认为不忽略,正常识别为String
|
boolean |
isShortCircuit() |
void |
loadExpress(java.lang.String expressName)
装载文件中定义的Express
|
void |
loadMultiExpress(java.lang.String expressName,
java.lang.String express)
装载表达式,但不执行,例如一些宏定义,或者自定义函数
|
InstructionSet |
parseInstructionSet(java.lang.String text)
解析一段文本,生成指令集合
|
OperatorBase |
replaceOperator(java.lang.String name,
OperatorBase op)
替换操作符处理
|
void |
setIgnoreConstChar(boolean ignoreConstChar) |
void |
setShortCircuit(boolean isShortCircuit) |
public ExpressRunner()
public ExpressRunner(boolean isPrecise,
boolean isTrace)
isPrecise - 是否需要高精度计算支持isTrace - 是否跟踪执行指令的过程public ExpressRunner(boolean isPrecise,
boolean isTrace,
java.util.Map<java.lang.String,java.util.concurrent.Future<InstructionSet>> cacheMap)
isPrecise - isTrace - cacheMap - user can define safe and efficient cache or use default concurrentMappublic ExpressRunner(boolean isPrecise,
boolean isStrace,
NodeTypeManager nodeTypeManager)
public ExpressRunner(boolean isPrecise,
boolean isTrace,
IExpressResourceLoader iExpressResourceLoader,
NodeTypeManager nodeTypeManager)
isPrecise - 是否需要高精度计算支持isTrace - 是否跟踪执行指令的过程iExpressResourceLoader - 表达式的资源装载器public ExpressRunner(boolean isPrecise,
boolean isTrace,
IExpressResourceLoader iExpressResourceLoader,
NodeTypeManager nodeTypeManager,
java.util.Map<java.lang.String,java.util.concurrent.Future<InstructionSet>> cacheMap)
isPrecise - 是否需要高精度计算支持isTrace - 是否跟踪执行指令的过程iExpressResourceLoader - 表达式的资源装载器cacheMap - 指令集缓存, 必须是线程安全的集合public AppendingClassMethodManager getAppendingClassMethodManager()
public AppendingClassFieldManager getAppendingClassFieldManager()
public IOperateDataCache getOperateDataCache()
public void addSystemFunctions()
public NodeTypeManager getNodeTypeManager()
public OperatorFactory getOperatorFactory()
public IExpressResourceLoader getExpressResourceLoader()
public void addMacro(java.lang.String macroName,
java.lang.String express)
throws java.lang.Exception
macroName - 宏名称express - 表达式,示例:abc(userInfo.userId);java.lang.Exceptionpublic void loadMultiExpress(java.lang.String expressName,
java.lang.String express)
throws java.lang.Exception
expressName - express - java.lang.Exceptionpublic void loadExpress(java.lang.String expressName)
throws java.lang.Exception
expressName - java.lang.Exceptionpublic void addFunction(java.lang.String name,
OperatorBase op)
name - 函数名称op - 对应的操作实现类public void addFunctionAndClassMethod(java.lang.String name,
java.lang.Class<?> bindingClass,
OperatorBase op)
name - bindingClass - op - public void addClassField(java.lang.String field,
java.lang.Class<?> bindingClass,
Operator op)
field - bindingClass - op - public void addClassField(java.lang.String field,
java.lang.Class<?> bindingClass,
java.lang.Class<?> returnType,
Operator op)
field - bindingClass - returnType - op - public void addClassMethod(java.lang.String name,
java.lang.Class<?> bindingClass,
OperatorBase op)
name - bindingClass - op - public OperatorBase getFunction(java.lang.String name)
name - 函数名称public void addFunctionOfClassMethod(java.lang.String name,
java.lang.String className,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String errorInfo)
throws java.lang.Exception
name - 函数名称className - 类名称functionName - 类中的方法名称parameterClassTypes - 方法的参数类型名称errorInfo - 如果函数执行的结果是false,需要输出的错误信息java.lang.Exceptionpublic void addFunctionOfClassMethod(java.lang.String name,
java.lang.Class<?> clazz,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String errorInfo)
throws java.lang.Exception
name - 函数名称clazz - 类functionName - 类中的方法名称parameterClassTypes - 方法的参数类型名称errorInfo - 如果函数执行的结果是false,需要输出的错误信息java.lang.Exceptionpublic void addFunctionOfClassMethod(java.lang.String name,
java.lang.String className,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String[] parameterDesc,
java.lang.String[] parameterAnnotation,
java.lang.String errorInfo)
throws java.lang.Exception
name - 函数名称className - 类名称functionName - 类中的方法名称parameterClassTypes - 方法的参数类型名称parameterDesc - 方法的参数说明parameterAnnotation - 方法的参数注解errorInfo - 如果函数执行的结果是false,需要输出的错误信息java.lang.Exceptionpublic void addFunctionOfClassMethod(java.lang.String name,
java.lang.String className,
java.lang.String functionName,
java.lang.String[] parameterTypes,
java.lang.String errorInfo)
throws java.lang.Exception
name - 函数名称className - 类名称functionName - 类中的方法名称parameterTypes - 方法的参数类型名称errorInfo - 如果函数执行的结果是false,需要输出的错误信息java.lang.Exceptionpublic void addFunctionOfClassMethod(java.lang.String name,
java.lang.String className,
java.lang.String functionName,
java.lang.String[] parameterTypes,
java.lang.String[] parameterDesc,
java.lang.String[] parameterAnnotation,
java.lang.String errorInfo)
throws java.lang.Exception
name - 函数名称className - 类名称functionName - 类中的方法名称parameterTypes - 方法的参数类型名称parameterDesc - 方法的参数说明parameterAnnotation - 方法的参数注解errorInfo - 如果函数执行的结果是false,需要输出的错误信息java.lang.Exceptionpublic void addFunctionOfServiceMethod(java.lang.String name,
java.lang.Object serviceObject,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String errorInfo)
throws java.lang.Exception
name - serviceObject - functionName - parameterClassTypes - errorInfo - java.lang.Exceptionpublic void addFunctionOfServiceMethod(java.lang.String name,
java.lang.Object serviceObject,
java.lang.String functionName,
java.lang.Class<?>[] parameterClassTypes,
java.lang.String[] parameterDesc,
java.lang.String[] parameterAnnotation,
java.lang.String errorInfo)
throws java.lang.Exception
name - serviceObject - functionName - parameterClassTypes - parameterDesc - 方法的参数说明parameterAnnotation - 方法的参数注解errorInfo - java.lang.Exceptionpublic void addFunctionOfServiceMethod(java.lang.String name,
java.lang.Object serviceObject,
java.lang.String functionName,
java.lang.String[] parameterTypes,
java.lang.String errorInfo)
throws java.lang.Exception
name - serviceObject - functionName - parameterTypes - errorInfo - java.lang.Exceptionpublic void addFunctionOfServiceMethod(java.lang.String name,
java.lang.Object serviceObject,
java.lang.String functionName,
java.lang.String[] parameterTypes,
java.lang.String[] parameterDesc,
java.lang.String[] parameterAnnotation,
java.lang.String errorInfo)
throws java.lang.Exception
java.lang.Exceptionpublic void addOperator(java.lang.String name,
Operator operator)
throws java.lang.Exception
name - operator - java.lang.Exceptionpublic void addOperator(java.lang.String name,
java.lang.String refOperatorName,
Operator operator)
throws java.lang.Exception
name - 操作符号名称refOperatorName - 参照的操作符号,例如 "+","--"等operator - java.lang.Exceptionpublic void addOperatorWithAlias(java.lang.String keyWordName,
java.lang.String realKeyWordName,
java.lang.String errorInfo)
throws java.lang.Exception
keyWordName - realKeyWordName - errorInfo - java.lang.Exceptionpublic OperatorBase replaceOperator(java.lang.String name, OperatorBase op)
name - public ExpressPackage getRootExpressPackage()
public void clearExpressCache()
public java.lang.Object executeByExpressName(java.lang.String name,
IExpressContext<java.lang.String,java.lang.Object> context,
java.util.List<java.lang.String> errorList,
boolean isTrace,
boolean isCatchException)
throws java.lang.Exception
name - context - errorList - isTrace - isCatchException - java.lang.Exceptionpublic java.lang.Object execute(InstructionSet instructionSet, IExpressContext<java.lang.String,java.lang.Object> context, java.util.List<java.lang.String> errorList, boolean isTrace, boolean isCatchException) throws java.lang.Exception
instructionSet - context - errorList - isTrace - isCatchException - java.lang.Exceptionpublic java.lang.Object execute(java.lang.String expressString,
IExpressContext<java.lang.String,java.lang.Object> context,
java.util.List<java.lang.String> errorList,
boolean isCache,
boolean isTrace,
long timeoutMillis)
throws java.lang.Exception
expressString - 程序文本context - 执行上下文errorList - 输出的错误信息ListisCache - 是否使用Cache中的指令集isTrace - 是否输出详细的执行指令信息timeoutMillis - 超时毫秒时间java.lang.Exceptionpublic java.lang.Object execute(java.lang.String expressString,
IExpressContext<java.lang.String,java.lang.Object> context,
java.util.List<java.lang.String> errorList,
boolean isCache,
boolean isTrace)
throws java.lang.Exception
expressString - 程序文本context - 执行上下文errorList - 输出的错误信息ListisCache - 是否使用Cache中的指令集isTrace - 是否输出详细的执行指令信息java.lang.Exceptionpublic InstructionSet parseInstructionSet(java.lang.String text) throws java.lang.Exception
text - java.lang.Exceptionpublic ExportItem[] getExportInfo()
public InstructionSet getInstructionSetFromLocalCache(java.lang.String expressString) throws java.lang.Exception
expressString - java.lang.Exceptionpublic InstructionSet createInstructionSet(ExpressNode root, java.lang.String type) throws java.lang.Exception
java.lang.Exceptionpublic void createInstructionSet(ExpressNode root, InstructionSet result) throws java.lang.Exception
java.lang.Exceptionpublic boolean createInstructionSetPrivate(InstructionSet result, java.util.Stack<ForRelBreakContinue> forStack, ExpressNode node, boolean isRoot) throws java.lang.Exception
java.lang.Exceptionpublic java.lang.String[] getOutVarNames(java.lang.String express)
throws java.lang.Exception
express - java.lang.Exceptionpublic java.lang.String[] getOutFunctionNames(java.lang.String express)
throws java.lang.Exception
java.lang.Exceptionpublic boolean isShortCircuit()
public void setShortCircuit(boolean isShortCircuit)
public boolean isIgnoreConstChar()
public void setIgnoreConstChar(boolean ignoreConstChar)
public boolean checkSyntax(java.lang.String text)
text - public boolean checkSyntax(java.lang.String text,
boolean mockRemoteJavaClass,
java.util.List<java.lang.String> remoteJavaClassNames)
text - mockRemoteJavaClass - remoteJavaClassNames - Copyright © 2012-2023 Alibaba Group. All Rights Reserved.