【问题标题】:How to find all the occurrences of a Javascript function using Java and Rhino如何使用 Java 和 Rhino 查找所有出现的 Javascript 函数
【发布时间】:2013-02-08 15:19:07
【问题描述】:

我需要使用 Java 和 Rhino 在 Javascript 文件中搜索所有出现的特定 Javascript 函数。我已经成功地使用访问者模式浏览了所有出现的函数调用(参见下面的代码),但我无法检索被调用函数的名称。哪种方法是正确的?

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();
    }
}
}

【问题讨论】:

    标签: java javascript rhino


    【解决方案1】:

    FunctionCall 类只代表函数的调用,它的目标是函数名(org.mozilla.javascript.ast.Name)。

    要获取调用函数的名称,请使用:

    AstNode target = ((FunctionCall) node).getTarget();
    Name name = (Name) target;
    System.out.println(name.getIdentifier());
    

    【讨论】:

      【解决方案2】:

      FunctionCall,您可以通过执行以下操作来检索函数名称:

      ((FunctionCall) node).getTarget().getEnclosingFunction().getFunctionName();
      

      注意:匿名函数将返回null

      给定函数名称和访问者模式,您可以轻松找出任何命名函数的出现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-18
        • 2021-10-14
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多