检索 Java 中函数执行的代码

Retrieve code executed by function in Java

我正在尝试分析一些 Java 代码,看看代码是否写得太复杂了。我从一个包含 Java-class 内容的字符串开始。 给定一个函数名,我想从那里检索该函数的 "inner code" 。在这个例子中:

public class testClass{
    public int testFunction(char x) throws Exception{
        if(x=='a'){
            return 1;
        }else if(x=='{'){
            return 2;
        }else{
            return 3;
        }
    }
    public int testFunctionTwo(int y){
        return y;
    }
}

我想在调用 String code = getcode("testFunction"); 时得到 code 包含 if(x=='a'){ ... return 3; }。我让输入代码变得格外难看,以演示在逐字符分析时可能遇到的一些问题(因为 else if,大括号将不再匹配,因为异常抛出,函数声明不是 functionName{ //contents } 等形式)

是否有可靠的方法来获取testFunction的内容,还是我应该手动实现描述的所有问题?

您是否考虑过使用解析器来读取您的代码?那里有很多解析器,上次我处理这样的问题时 http://qdox.codehaus.org 很快就解决了这类问题。

您需要一个 java 解析器。我也和 QDox 一起工作过。这个用起来很简单。此处示例:

import com.thoughtworks.qdox.JavaProjectBuilder;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;

import java.io.File;
import java.io.IOException;

public class Parser {

    public void parseFile() throws IOException {
        File file = new File("/path/to/testClass.java");

        JavaProjectBuilder builder = new JavaProjectBuilder();
        builder.addSource(file);

        for (JavaClass javaClass : builder.getClasses()) {
            if (javaClass.getName().equals("testClass")) {
                for (JavaMethod javaMethod : javaClass.getMethods()) {
                    if (javaMethod.getName().equals("testMethod")) {
                        System.out.println(javaMethod.getSourceCode());
                    }
                }
            }
        }
    }
}