热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java–Filer的原始元素是否有用?

我正在研究一个使用Java注释处理API生成代码的Java程序(Dagger).当我们的程序在Foo.java中遇到注释时,它会生成Foo$$InjectAdapter.java.

我正在研究一个使用Java注释处理API生成代码的Java程序(Dagger).当我们的程序在Foo.java中遇到注释时,它会生成Foo $$InjectAdapter.java.我们使用Filer 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?


> 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.processing或originatingElements – 即根本不使用新的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;

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


推荐阅读
  • 开发笔记:Dagger2 探索记3——两大进阶组件
        今天要讲的时@Scope这个组件。为什么说它是进阶组件,就是因为它基本上没作用,但在理解了基本组件之后又必须用到。 ... [详细]
  • Android Studio中使用apt
    AndroidStudio中使用apt一、前言你还在对着枯燥的重复代码一味复制粘贴吗?这样跟搬砖有何区别?你是否曾想过:你用代码编写出一个自动化的APP,但为何代码本身却缺少了活力 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
  • java io换行符_Java IO:为什么从stdin读取时,换行符的数字表示出现在控制台上?...
    只是为了更好地理解我在讲座中听到的内容(关于Java输入和输出流),我自己做了这个小程序:publicstaticvoidmain(String[]args)thro ... [详细]
  • 本文整理了Java中javax.lang.model.util.Types.getNullType()方法的一些代码示例,展示了Types.getNullT ... [详细]
  • 1.在gradle中添加依赖在主项目的build.gradle中添加Dagger2库的依赖dependencies{compilecom.google.dagger:dagger: ... [详细]
  • 高级工程师_免费Android高级工程师学习资源,内容太过真实
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了免费Android高级工程师学习资源,内容太过真实相关的知识,希望对你有一定的参考价值。 ... [详细]
  • dagger2简单使用与理解笔记
    文章目录使用dagger2好处具体案例查看github1.使用dagger2注入基本使用流程概念2.dagger2中各种注解基本使用引入dagger20.写两个对象用来实际操作的1 ... [详细]
author-avatar
拉斯维加斯的单身派对_101
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有