如何使用Java和Rhino查找Javascript函数的所有实例
我需要使用Java和Rhino搜索Javascript文件中出现的所有特定Javascript函数。我已经成功地使用Visitor模式浏览了所有函数调用的实例(请参见下面的代码),但是我无法检索被调用函数的名称。哪种方法正确如何使用Java和Rhino查找Javascript函数的所有实例,java,javascript,rhino,Java,Javascript,Rhino,我需要使用Java和Rhino搜索Javascript文件中出现的所有特定Javascript函数。我已经成功地使用Visitor模式浏览了所有函数调用的实例(请参见下面的代码),但是我无法检索被调用函数的名称。哪种方法正确 package it.dss.javascriptParser; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import org.mozilla.java
package it.dss.javascriptParser;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import org.mozilla.javascript.Parser;
import org.mozilla.javascript.ast.AstNode;
import org.mozilla.javascript.ast.FunctionCall;
import org.mozilla.javascript.ast.NodeVisitor;
public class JavascriptParser {
public static void main(String[] args) throws IOException {
class Printer implements NodeVisitor {
public boolean visit(AstNode node) {
if (node instanceof FunctionCall) {
// How do I get the name of the function being called?
}
return true;
}
}
String file = "/dss2.js";
Reader reader = new FileReader(file);
try {
AstNode node = new Parser().parse(reader, file, 1);
node.visit(new Printer());
} finally {
reader.close();
}
}
}
从
FunctionCall
中,您可以通过执行以下操作来检索函数名:
((FunctionCall) node).getTarget().getEnclosingFunction().getFunctionName();
注意:匿名函数将返回null
给定函数名和访问者模式,您可以很容易地找到任何命名函数的出现情况。FunctionCall类仅代表函数调用,其目标是函数名(org.mozilla.javascript.ast.name) 要获取被调用函数的名称,请使用:
AstNode target = ((FunctionCall) node).getTarget();
Name name = (Name) target;
System.out.println(name.getIdentifier());