diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c9bcaac0..d3a43fc5a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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)
-------------------------------------------------------------------------------------------------------------
diff --git a/hutool-core/src/main/java/cn/hutool/core/math/Calculator.java b/hutool-core/src/main/java/cn/hutool/core/math/Calculator.java
index 0fb845ea7..ac0cd0c94 100644
--- a/hutool-core/src/main/java/cn/hutool/core/math/Calculator.java
+++ b/hutool-core/src/main/java/cn/hutool/core/math/Calculator.java
@@ -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 {
diff --git a/hutool-core/src/test/java/cn/hutool/core/math/CalculatorTest.java b/hutool-core/src/test/java/cn/hutool/core/math/CalculatorTest.java
index 553c1691e..4cda5bcc0 100644
--- a/hutool-core/src/test/java/cn/hutool/core/math/CalculatorTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/math/CalculatorTest.java
@@ -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);
+ }
}
diff --git a/hutool-extra/pom.xml b/hutool-extra/pom.xml
index 5806b4ce2..3a1db5418 100644
--- a/hutool-extra/pom.xml
+++ b/hutool-extra/pom.xml
@@ -413,7 +413,7 @@
org.mozilla
rhino
- 1.7.12
+ 1.7.13
compile
true
diff --git a/hutool-extra/src/main/java/cn/hutool/extra/expression/engine/rhino/RhinoEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/expression/engine/rhino/RhinoEngine.java
index eef25ffc4..0e3610228 100644
--- a/hutool-extra/src/main/java/cn/hutool/extra/expression/engine/rhino/RhinoEngine.java
+++ b/hutool-extra/src/main/java/cn/hutool/extra/expression/engine/rhino/RhinoEngine.java
@@ -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引擎封装
* 见: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 context) {
- Context ctx = Context.enter();
- Scriptable scope = ctx.initStandardObjects();
- if (context != null && !context.isEmpty()) {
- for (Map.Entry 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;
}