Open
Description
问题版本:5.4.3
测试代码(Java 17):
String content = "a + b;\n" +
"x = a+b;\n" + // 报错行
"return x;\n"
;
Expression expression = AviatorEvaluator.getInstance().compile(content, false);
expression.execute(Map.of(
"a", 1,
"b", 2
));
执行脚本抛出异常:
java.lang.UnsupportedOperationException: null
at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)
at java.base/java.util.ImmutableCollections$AbstractImmutableMap.put(ImmutableCollections.java:1072)
at com.googlecode.aviator.utils.Env.put(Env.java:492)
at com.googlecode.aviator.utils.Env.put(Env.java:52)
at com.googlecode.aviator.runtime.type.AviatorJavaType.setValue(AviatorJavaType.java:427)
at AviatorScript_1744627627722_78.execute0(AviatorScript_1744627627722_78:3)
at com.googlecode.aviator.ClassExpression.executeDirectly(ClassExpression.java:55)
at com.googlecode.aviator.BaseExpression.execute(BaseExpression.java:268)
at com.googlecode.aviator.BaseExpression.execute(BaseExpression.java:255)
如果没有定义新的变量,则不会有这个问题。根据源码猜测,是引擎内的 Env 直接将传入的 Immutable Map 作为内部的 Value Map 使用了。
Metadata
Metadata
Assignees
Labels
No labels