diff --git a/pom.xml b/pom.xml
index c15fe3582559a9fa0ff2ba54cf195b9e3d0b64f6..55e12c6c03d5bbf7ebc3a4399171bbd7efc13913 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.taobao.util
taobao-express
jar
- 3.1.6
+ 3.1.7
taobao-express
diff --git a/src/main/java/com/ql/util/express/InstructionSet.java b/src/main/java/com/ql/util/express/InstructionSet.java
index 517231a1631202a83b3b63c42a47dabc38249805..af914fefb2c931d97b0ef9ceb543513d4ee9d18e 100644
--- a/src/main/java/com/ql/util/express/InstructionSet.java
+++ b/src/main/java/com/ql/util/express/InstructionSet.java
@@ -99,17 +99,19 @@ public class InstructionSet implements Serializable{
if (instruction instanceof InstructionOperator) {
String opName = ((InstructionOperator) instruction)
.getOperator().getName();
- if (opName.equalsIgnoreCase("def")
- || opName.equalsIgnoreCase("exportDef")) {
- String varLocalName = (String) ((InstructionConstData) instructionList[i - 1])
- .getOperateData().getObject(null);
- result.remove(varLocalName);
- } else if (opName.equalsIgnoreCase("alias")
- || opName.equalsIgnoreCase("exportAlias")) {
- String varLocalName = (String) ((InstructionConstData) instructionList[i - 2])
- .getOperateData().getObject(null);
- result.remove(varLocalName);
- }
+ if(opName != null){//addOperator(op)中op.name有可能为空
+ if (opName.equalsIgnoreCase("def")
+ || opName.equalsIgnoreCase("exportDef")) {
+ String varLocalName = (String) ((InstructionConstData) instructionList[i - 1])
+ .getOperateData().getObject(null);
+ result.remove(varLocalName);
+ } else if (opName.equalsIgnoreCase("alias")
+ || opName.equalsIgnoreCase("exportAlias")) {
+ String varLocalName = (String) ((InstructionConstData) instructionList[i - 2])
+ .getOperateData().getObject(null);
+ result.remove(varLocalName);
+ }
+ }
}
}
return result.keySet().toArray(new String[0]);
diff --git a/src/test/java/com/ql/util/express/example/ArgumentTypeMismatchTest.java b/src/test/java/com/ql/util/express/example/ArgumentTypeMismatchTest.java
index bf6d67a9c6ae0b41a08e5b784daa33f5aa103d9a..5834217746220e01faf0046419dfec431f8ca41a 100644
--- a/src/test/java/com/ql/util/express/example/ArgumentTypeMismatchTest.java
+++ b/src/test/java/com/ql/util/express/example/ArgumentTypeMismatchTest.java
@@ -1,9 +1,9 @@
package com.ql.util.express.example;
-import com.ql.util.express.DefaultContext;
-import com.ql.util.express.ExpressRunner;
-import com.ql.util.express.IExpressContext;
-import com.ql.util.express.Operator;
+import com.ql.util.express.*;
+import com.ql.util.express.instruction.op.OperatorBase;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
import org.junit.Test;
/**
@@ -60,4 +60,50 @@ public class ArgumentTypeMismatchTest {
}
System.out.print("test ok!");
}
+
+ @Test
+ public void test3() throws Exception {
+ ExpressRunner runner = new ExpressRunner();
+ runner.addFunction("abc", new Operator() {
+ @Override
+ public Object executeInner(Object[] list) throws Exception {
+ Long paramA = Long.valueOf(list[0].toString());
+ Integer paramB = Integer.valueOf(list[1].toString());
+ String paramC = list[2].toString();
+ singleton.functionABC(paramA, paramB, paramC);
+ return null;
+ }
+ });
+
+ OperatorBase function = runner.getFunciton("abc");
+ System.out.println("function = " + ToStringBuilder.reflectionToString(function, ToStringStyle.MULTI_LINE_STYLE));
+
+ String exp = "abc(a,b,c)";
+ IExpressContext context = new DefaultContext();
+ context.put("a", "1");
+ context.put("b", "2");
+ context.put("c", "3");
+
+ InstructionSet instructionSet = runner.getInstructionSetFromLocalCache(exp);
+ String[] outFunctionNames = runner.getOutFunctionNames(exp);
+ String[] outVarNames = runner.getOutVarNames(exp);
+ System.out.println("before execute instructionSet = " + instructionSet);
+ System.out.println("outFunctionNames = " + ToStringBuilder.reflectionToString(outFunctionNames, ToStringStyle.MULTI_LINE_STYLE));
+ System.out.println("outVarNames = " + ToStringBuilder.reflectionToString(outVarNames, ToStringStyle.MULTI_LINE_STYLE));
+
+ try {
+ runner.execute(exp, context, null, false, false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ instructionSet = runner.getInstructionSetFromLocalCache(exp);
+ outFunctionNames = runner.getOutFunctionNames(exp);
+ outVarNames = runner.getOutVarNames(exp);
+ System.out.println("after execute instructionSet = " + instructionSet);
+ System.out.println("outFunctionNames = " + ToStringBuilder.reflectionToString(outFunctionNames, ToStringStyle.MULTI_LINE_STYLE));
+ System.out.println("outVarNames = " + ToStringBuilder.reflectionToString(outVarNames, ToStringStyle.MULTI_LINE_STYLE));
+
+ System.out.println("test ok!");
+ }
}