当前位置:  开发笔记 > 编程语言 > 正文

Filer的原始元素是否有用?

如何解决《Filer的原始元素是否有用?》经验,为你挑选了1个好方法。

我正在研究一个使用Java注释处理API生成代码的Java程序(Dagger).当我们的程序遇到注释时Foo.java,它会生成Foo$$InjectAdapter.java.我们使用FilerAPI来附加Element触发生成代码的原始内容.

Filer文档说这是为了帮助增量构建:

"此信息可用于增量环境,以确定是否需要重新运行处理器或删除生成的文件.非增量环境可能会忽略原始元素信息."

有谁知道使用此信息的增量环境?javacEclipse编译器是否使用此信息?



1> Glen Best..:

有谁知道使用此信息的增量环境?

对不起,我没有.

javac或Eclipse编译器是否使用此信息?

    javac的:

    javac的内部注释处理环境使用javax.annotation.processing.Filer实现类com.sun.tools.javac.processing.JavacFiler.以下是此类的相关代码段:

    public JavaFileObject createSourceFile(CharSequence paramCharSequence, 
                                           Element[] paramArrayOfElement) throws IOException {
        return createSourceOrClassFile(true, paramCharSequence.toString());
    }
    

    即它只是抛弃原始元素,而不是以任何方式使用它们.

    对createClassFile和createResourceFile也是如此.

    所以这是一个很大的问题.

    Eclipse编译器:

    在Eclipse中,您可以通过启用java 6样式的注释处理

    项目属性 - > Java编译器 - >注释处理 - >选中"启用项目特定设置"并选中"启用注释处理"

    这将注释处理委托给JDT-Core内部编译器,后者使用它自己的注释处理实现.Eclipse 4.2,3.7和3.6源代码不包含字符串javax.annotation.processingoriginatingElements- 即根本不使用新的java 6注释处理API.搜索时Filer,我们看到它使用旧的jdk-5样式Filer界面:

    org.eclipse.jdt.apt.core.internal.env.BuildFilerImpl扩展了org.eclipse.jdt.apt.core.internal.env.FilerImpl,它实现了com.sun.mirror.apt.Filer

    所有这些都有方法签名:

    PrintWriter createSourceFile(String name) throws IOException;
    OutputStream createClassFile(String name) throws IOException;
    PrintWriter createTextFile(Location loc, String pkg, File relPath, String charsetName) throws IOException;
    OutputStream createBinaryFile(Location loc, String pkg, File relPath) throws IOException;
    

    所以这是一个很大的问题.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有