如何创建带有参数的函数调用语句并添加函数
How to create FunctionCall statement with arguments and add in function
我需要创建像Utiliy.initialize("value")这样的FunctionCall语句,并将其添加到js文件每个函数的第一行。
下面是我尝试创建函数调用的代码
private FunctionCall getFunctionCall() {
FunctionCall functionCall = new FunctionCall();
Name name = new Name();
name.setIdentifier("initialize");
functionCall.setTarget(name);
}
下面是我用来在每个函数节点中添加的代码
class FunctionVisitor implements NodeVisitor {
@Override
public boolean visit(AstNode node) {
if (node.getClass() == FunctionNode.class) {
FunctionNode fun = (FunctionNode) node;
fun.addChildrenToFront(getFunctionCall());
}
return true;
}
}
请建议如何创建带有参数的函数调用以及如何打印创建的函数调用语句进行测试。是否有任何工具可用于查看javascript节点,如java ASTVIEW查看器?
您必须创建 StringLiteral 作为参数并将其添加到 functionCall,在这种情况下,它可以是 NumberLiteral、ArrrayLiteral 等(参见:http://javadox.com/org.mozilla/rhino/1.7R4/org/mozilla/javascript/ast/AstNode.html)
private FunctionCall getFunctionCall() {
FunctionCall functionCall = new FunctionCall();
Name name = new Name();
name.setIdentifier("initialize");
functionCall.setTarget(name);
StringLiteral arg = new StringLiteral();
arg.setValue("value");
arg.setQuoteCharacter('"');
functionCall.addArgument(arg);
return functionCall;
}
class FunctionVisitor implements NodeVisitor {
@Override
public boolean visit(AstNode node) {
if (node.getClass() == FunctionNode.class) {
FunctionNode fun = (FunctionNode) node;
if(fun.getName().equals("initialize")) //prevents infinit loop
{
return true;
}
fun.getBody().addChildrenToFront(new EmptyStatement()); // adds ';', I don't know if required
fun.getBody().addChildrenToFront(getFunctionCall());//no fun.addChildrenToFront
}
return true;
}
}
您可以通过toSource()方法打印每个corect AstNode。我希望这会有所帮助。
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- 如何通过函数调用设置图像的src
- 从全局函数调用Ember控制器上的方法
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JavaScript函数调用(arg1)(arg2)
- 打印链接时,将javascript函数调用到链接中
- 在函数调用中封装数据除了隐藏数据之外还有什么优点
- Js提示:“;期望一个赋值或函数调用,而看到一个表达式“;,Switch语句
- 异步函数调用是否可以在两个同步语句之间完成
- 如何创建带有参数的函数调用语句并添加函数
- if语句中的函数仅在第一次未定义,但在休息时间函数调用也是如此
- 在node.js中,我们能否在执行下一个语句之前强制函数调用完成并返回?
- 在javascript的case语句中添加后端函数调用会导致显著的速度下降
- '或者'函数调用中的语句