是否有可能访问的抽象的法树(AST)内部javac.exe 编程方式?你能提供一个例子吗?

有帮助吗?

解决方案

是的,这是可能的,但仅由于Java6. 彼得von der Ahé 谈到两个Jsr在 这个采访.JSR199:

JSR199编译器API由三件事:第一个基本上允许你调用一个编译器通过API。第二,API允许你自编译器是如何找到并写入了文件。我的意思是文件在抽象意义,因为该文件的编译器处理不一定在本文件系统。JSR199的文件的抽象可以让你有文件放在一个数据库,以及产生直接输出到存储器,例如。最后,JSR199API让你收集诊断从编译器在一个结构化的方式,以便可以容易地改变错误信息,例如,进行IDE的编辑。

JSR269是注释处理。

这篇文章 提供了一个很好的概述访问 编译器树API."部分访问的抽象语法树:编译器树API"似乎尤其适合于你的问题。

取决于你在做什么,你也可能想看看 大奖的规则语言, ,这是一个独立的重构引擎,插入编译器树。

其他提示

编译和运行-cp tools.jar这(在那里你必须指定tools.jar的位置,很明显)。

import com.sun.source.util.Trees;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

public class JCTreeTest {
    private static final JavaCompiler javac
            = ToolProvider.getSystemJavaCompiler();

    public static void main(String[] args) {
        final StandardJavaFileManager jfm
                = javac.getStandardFileManager(null, null, null);
        final JavaCompiler.CompilationTask task
                = javac.getTask(null, jfm, null, null, null,
                  jfm.getJavaFileObjects(args));
        final Trees trees = Trees.instance(task);
        // Do stuff with "trees"
    }
}

据编译和运行对我来说,虽然我还没有与树玩的东西我自己,所以你必须的阅读的javadoc 自己。 :-)祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top