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!"); + } }