FILLER的原始元素有用吗? [英] Are Filer's originating elements useful?

查看:0
本文介绍了FILLER的原始元素有用吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个Java程序(Dagger),它使用Java批注处理API来生成代码。当我们的程序在Foo.java中遇到批注时,它会生成Foo$$InjectAdapter.java。我们使用Filer接口附加触发生成代码的原始Element

文件管理器文档说这是为了帮助增量构建:

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

有人知道使用此信息的增量式环境吗?javac或Eclipse编译器是否使用此信息?

推荐答案

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

抱歉,我不知道。

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

  1. 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。

    所以这是一个很大的错误。

  2. 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;
    

    所以这是一个很大的错误。

这篇关于FILLER的原始元素有用吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆