From 07f743fb45b7787238f4aa014ce482232ea401af Mon Sep 17 00:00:00 2001 From: guojiaxiong399 Date: Mon, 19 Aug 2024 14:07:34 +0800 Subject: [PATCH 1/6] fix IllegalAccessException in OperatorSelfDefineServiceFunction when run junit --- .../op/OperatorSelfDefineServiceFunction.java | 1 + .../Issue342IllegalAccessExceptionTest.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java diff --git a/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java b/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java index ad33a8432..0e45008e1 100644 --- a/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java +++ b/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java @@ -72,6 +72,7 @@ public OperatorBase cloneMe(String operatorName, String errorInfo) throws Except public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { Object[] parameters = DynamicParamsUtil.transferDynamicParams(parent, list, parameterClasses, this.maybeDynamicParams); + method.setAccessible(true); Object obj = this.method.invoke(this.serviceObject, ExpressUtil.transferArray(parameters, parameterClasses)); if (obj != null) { return OperateDataCacheManager.fetchOperateData(obj, obj.getClass()); diff --git a/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java b/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java new file mode 100644 index 000000000..71e101a6e --- /dev/null +++ b/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java @@ -0,0 +1,23 @@ +package com.ql.util.express.issue; + +import com.ql.util.express.DefaultContext; +import com.ql.util.express.ExpressRunner; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author gjx + */ +public class Issue342IllegalAccessExceptionTest { + @Test + public void test10() throws Exception { + String express = "" + + " 打印(70);" + + " return 10;"; + ExpressRunner runner = new ExpressRunner(false, true); + runner.addFunctionOfServiceMethod("打印", System.out, "println", new String[] {"int"}, null); + DefaultContext context = new DefaultContext<>(); + Object r = runner.execute(express, context, null, false, true); + Assert.assertEquals("for循环后面跟着一个函数的时候错误", "10", r.toString()); + } +} \ No newline at end of file From 27457bf315aacfe5fb75603cd7d4367ab0ddfa3b Mon Sep 17 00:00:00 2001 From: guojiaxiong399 Date: Tue, 20 Aug 2024 10:24:26 +0800 Subject: [PATCH 2/6] fix method accessible --- .../instruction/op/OperatorSelfDefineServiceFunction.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java b/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java index 0e45008e1..fe96a1c78 100644 --- a/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java +++ b/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java @@ -72,8 +72,10 @@ public OperatorBase cloneMe(String operatorName, String errorInfo) throws Except public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { Object[] parameters = DynamicParamsUtil.transferDynamicParams(parent, list, parameterClasses, this.maybeDynamicParams); + boolean oldA = method.isAccessible(); method.setAccessible(true); Object obj = this.method.invoke(this.serviceObject, ExpressUtil.transferArray(parameters, parameterClasses)); + method.setAccessible(oldA); if (obj != null) { return OperateDataCacheManager.fetchOperateData(obj, obj.getClass()); } From 9817e0a17dd632b93c15440a1695e066d93c8cd1 Mon Sep 17 00:00:00 2001 From: guojiaxiong399 Date: Tue, 20 Aug 2024 16:10:43 +0800 Subject: [PATCH 3/6] add MyPrintStream --- .../op/OperatorSelfDefineServiceFunction.java | 3 --- .../Issue342IllegalAccessExceptionTest.java | 27 +++++++++++++++++++ .../express/test/ForFlowFunctionTest.java | 27 +++++++++++++++++++ 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java b/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java index fe96a1c78..ad33a8432 100644 --- a/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java +++ b/src/main/java/com/ql/util/express/instruction/op/OperatorSelfDefineServiceFunction.java @@ -72,10 +72,7 @@ public OperatorBase cloneMe(String operatorName, String errorInfo) throws Except public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception { Object[] parameters = DynamicParamsUtil.transferDynamicParams(parent, list, parameterClasses, this.maybeDynamicParams); - boolean oldA = method.isAccessible(); - method.setAccessible(true); Object obj = this.method.invoke(this.serviceObject, ExpressUtil.transferArray(parameters, parameterClasses)); - method.setAccessible(oldA); if (obj != null) { return OperateDataCacheManager.fetchOperateData(obj, obj.getClass()); } diff --git a/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java b/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java index 71e101a6e..3b5300bc5 100644 --- a/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java +++ b/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java @@ -2,13 +2,40 @@ import com.ql.util.express.DefaultContext; import com.ql.util.express.ExpressRunner; +import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; +import java.io.PrintStream; + /** * @author gjx */ public class Issue342IllegalAccessExceptionTest { + class MyPrintStream extends PrintStream { + public MyPrintStream(OutputStream out) { + super(out); + } + + @Override + public void println(String x) { + super.println(x); + } + } + private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + private final PrintStream originalOut = System.out; + @Before + public void setUpStreams() {System.setOut(new MyPrintStream(outContent)); + System.setOut(new MyPrintStream(outContent)); + } + + @After + public void restoreStreams() { + System.setOut(originalOut); + } @Test public void test10() throws Exception { String express = "" diff --git a/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java b/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java index 659df6448..e9b5af2b3 100644 --- a/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java +++ b/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java @@ -2,10 +2,37 @@ import com.ql.util.express.DefaultContext; import com.ql.util.express.ExpressRunner; +import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; +import java.io.PrintStream; + public class ForFlowFunctionTest { + class MyPrintStream01 extends PrintStream { + public MyPrintStream01(OutputStream out) { + super(out); + } + + @Override + public void println(String x) { + super.println(x); + } + } + private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + private final PrintStream originalOut = System.out; + @Before + public void setUpStreams() {System.setOut(new MyPrintStream01(outContent)); + System.setOut(new MyPrintStream01(outContent)); + } + + @After + public void restoreStreams() { + System.setOut(originalOut); + } @Test public void testABC() throws Exception { From 96818fedd86acc10a704d000908ca656170240a0 Mon Sep 17 00:00:00 2001 From: guojiaxiong399 Date: Tue, 20 Aug 2024 16:12:15 +0800 Subject: [PATCH 4/6] remove Issue342IllegalAccessExceptionTest --- .../Issue342IllegalAccessExceptionTest.java | 50 ------------------- 1 file changed, 50 deletions(-) delete mode 100644 src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java diff --git a/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java b/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java deleted file mode 100644 index 3b5300bc5..000000000 --- a/src/test/java/com/ql/util/express/issue/Issue342IllegalAccessExceptionTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ql.util.express.issue; - -import com.ql.util.express.DefaultContext; -import com.ql.util.express.ExpressRunner; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.io.ByteArrayOutputStream; -import java.io.OutputStream; -import java.io.PrintStream; - -/** - * @author gjx - */ -public class Issue342IllegalAccessExceptionTest { - class MyPrintStream extends PrintStream { - public MyPrintStream(OutputStream out) { - super(out); - } - - @Override - public void println(String x) { - super.println(x); - } - } - private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); - private final PrintStream originalOut = System.out; - @Before - public void setUpStreams() {System.setOut(new MyPrintStream(outContent)); - System.setOut(new MyPrintStream(outContent)); - } - - @After - public void restoreStreams() { - System.setOut(originalOut); - } - @Test - public void test10() throws Exception { - String express = "" - + " 打印(70);" - + " return 10;"; - ExpressRunner runner = new ExpressRunner(false, true); - runner.addFunctionOfServiceMethod("打印", System.out, "println", new String[] {"int"}, null); - DefaultContext context = new DefaultContext<>(); - Object r = runner.execute(express, context, null, false, true); - Assert.assertEquals("for循环后面跟着一个函数的时候错误", "10", r.toString()); - } -} \ No newline at end of file From 1d3a63fe892afa45a7bf32c032928888f8fda3df Mon Sep 17 00:00:00 2001 From: guojiaxiong399 Date: Tue, 20 Aug 2024 16:13:06 +0800 Subject: [PATCH 5/6] code clean --- src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java b/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java index e9b5af2b3..bdd77378d 100644 --- a/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java +++ b/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java @@ -25,7 +25,7 @@ public void println(String x) { private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); private final PrintStream originalOut = System.out; @Before - public void setUpStreams() {System.setOut(new MyPrintStream01(outContent)); + public void setUpStreams() { System.setOut(new MyPrintStream01(outContent)); } From 60d413f1fddf361db0123210eabbedd30eeb1792 Mon Sep 17 00:00:00 2001 From: guojiaxiong399 Date: Mon, 26 Aug 2024 10:24:59 +0800 Subject: [PATCH 6/6] code clean --- .../util/express/test/ForFlowFunctionTest.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java b/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java index bdd77378d..4143c8845 100644 --- a/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java +++ b/src/test/java/com/ql/util/express/test/ForFlowFunctionTest.java @@ -12,26 +12,14 @@ import java.io.PrintStream; public class ForFlowFunctionTest { - class MyPrintStream01 extends PrintStream { - public MyPrintStream01(OutputStream out) { - super(out); - } - - @Override - public void println(String x) { - super.println(x); - } - } - private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); - private final PrintStream originalOut = System.out; @Before public void setUpStreams() { - System.setOut(new MyPrintStream01(outContent)); + System.setOut(new PrintStream(new ByteArrayOutputStream())); } @After public void restoreStreams() { - System.setOut(originalOut); + System.setOut(System.out); } @Test