mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
add engine and fix bug
This commit is contained in:
parent
83a2244f80
commit
9867333f68
@ -3,15 +3,17 @@
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
# 5.5.2 (2020-11-17)
|
||||
# 5.5.2 (2020-11-18)
|
||||
|
||||
### 新特性
|
||||
* 【crypto 】 KeyUtil增加重载,AES构造增加重载(issue#I25NNZ@Gitee)
|
||||
* 【json 】 JSONUtil增加toList重载(issue#1228@Github)
|
||||
* 【core 】 新增CollStreamUtil(issue#1228@Github)
|
||||
* 【extra 】 新增Rhino表达式执行引擎(pr#1229@Github)
|
||||
|
||||
### Bug修复
|
||||
* 【cron 】 修复CronTimer可能死循环的问题(issue#1224@Github)
|
||||
* 【core 】 修复Calculator.conversion单个数字越界问题(issue#1222@Github)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
@ -53,7 +53,7 @@ public class Calculator {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (arr[0] == '~' || arr[1] == '(') {
|
||||
if (arr[0] == '~' || (arr.length > 1 && arr[1] == '(')) {
|
||||
arr[0] = '-';
|
||||
return "0" + new String(arr);
|
||||
} else {
|
||||
|
@ -16,4 +16,10 @@ public class CalculatorTest {
|
||||
final double conversion = Calculator.conversion("77 * 12");
|
||||
Assert.assertEquals(924.0, conversion, 2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void conversationTest3(){
|
||||
final double conversion = Calculator.conversion("1");
|
||||
Assert.assertEquals(1, conversion, 2);
|
||||
}
|
||||
}
|
||||
|
@ -413,7 +413,7 @@
|
||||
<dependency>
|
||||
<groupId>org.mozilla</groupId>
|
||||
<artifactId>rhino</artifactId>
|
||||
<version>1.7.12</version>
|
||||
<version>1.7.13</version>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.hutool.extra.expression.engine.rhino;
|
||||
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.extra.expression.ExpressionEngine;
|
||||
import org.mozilla.javascript.Context;
|
||||
import org.mozilla.javascript.Scriptable;
|
||||
@ -11,30 +12,22 @@ import java.util.Map;
|
||||
* rhino引擎封装<br>
|
||||
* 见:https://github.com/mozilla/rhino
|
||||
*
|
||||
* @since 5.5.2
|
||||
* @author lzpeng
|
||||
* @since 5.5.2
|
||||
*/
|
||||
public class RhinoEngine implements ExpressionEngine {
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*/
|
||||
public RhinoEngine(){
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object eval(String expression, Map<String, Object> context) {
|
||||
Context ctx = Context.enter();
|
||||
Scriptable scope = ctx.initStandardObjects();
|
||||
if (context != null && !context.isEmpty()) {
|
||||
for (Map.Entry<String, Object> entry : context.entrySet()) {
|
||||
// 将java对象转为js对象
|
||||
Object jsObj = Context.javaToJS(entry.getValue(), scope);
|
||||
// 将java对象放置JS的作用域中
|
||||
ScriptableObject.putProperty(scope, entry.getKey(), jsObj);
|
||||
}
|
||||
final Context ctx = Context.enter();
|
||||
final Scriptable scope = ctx.initStandardObjects();
|
||||
if (MapUtil.isNotEmpty(context)) {
|
||||
context.forEach((key, value)->{
|
||||
// 将java对象转为js对象后放置于JS的作用域中
|
||||
ScriptableObject.putProperty(scope, key, Context.javaToJS(value, scope));
|
||||
});
|
||||
}
|
||||
Object result = ctx.evaluateString(scope, expression, "rhino.js", 1, null);
|
||||
final Object result = ctx.evaluateString(scope, expression, "rhino.js", 1, null);
|
||||
Context.exit();
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user