Browse Source

add engine and fix bug

Looly 5 years ago
parent
commit
9867333f68

+ 3 - 1
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)
 
 -------------------------------------------------------------------------------------------------------------
 

+ 1 - 1
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 {

+ 6 - 0
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);
+	}
 }

+ 1 - 1
hutool-extra/pom.xml

@@ -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>

+ 10 - 17
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引擎封装<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;
 	}