gpt4 book ai didi

java - Filer 的原始元素有用吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:53:56 26 4
gpt4 key购买 nike

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

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

"This information may be used in an incremental environment to determine the need to rerun processors or remove generated files. Non-incremental environments may ignore the originating element information."

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

最佳答案

Does anyone know of an incremental environment that use this information?

对不起,我不知道。

Does javac or the Eclipse compiler use this information?

  1. 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 也是如此。

    所以这是一个很大的否定。

  2. Eclipse 编译器:

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

    项目属性 -> Java 编译器 -> 注释处理 -> 勾选“启用项目特定设置” & 勾选“启用注释处理”

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

    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;

    所以这是一个很大的否定。

关于java - Filer 的原始元素有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16452980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com