问题标签 [annotation-processing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
eclipse - 如何在保存时在 Eclipse 中运行注释处理器
目前我在eclipse中为一个项目生成带有注释处理器的文件
这是相当耗时的。如何设置 Eclipse 以使其在保存时运行注释处理器?
我有“自动构建”功能集,但它似乎忽略了注释处理器。顺便说一句,我正在使用带有“自动配置 JDT APT 激活”的 m2e apt 插件。
java - Java 注释处理 - 目的和示例
即使度过了愉快的时光,我也无法理解注释处理的目的。
我理解为什么运行时需要注释,我能想到的最简单的例子是:
- 更换标记接口。
- 替换一种类型的市场属性(例如瞬态)
- 一般来说,可以在运行时完成的任何用处。
但不幸的是,我无法理解在编译时使用注释的任何实际示例/原因(JDK 提供的默认注释除外,例如 @Override 等)。
我不明白使用注释处理器“生成代码”的目的/需要是什么。
编辑:Javadoc/Custom Java doc 是我可以认为是使用注释处理器的一个实用程序。
java - eclipse java注解处理提交生成的java类,带有subclipse到svn
我正在使用 Java 注释处理来生成几个 Java 源文件。我在项目特定设置( Properties -> Java Compile -> Annotation Processing)上启用了它。生成工作正常,类最终在.apt_generated
源文件夹中。
不幸的是,我无法使用Subversive将生成的 Java 源文件提交到 svn 服务器。如果我选择了.apt_generated
源文件夹并执行Team -> Add to Version Control ...对话框不会列出任何要提交的文件。到目前为止,我一直.apt_generated
在从命令行提交源文件夹。我可以自定义此行为吗?我无法在团队偏好中找到任何关于此的内容。
我知道调整无头构建的选项。由于我的文件不会经常更改,所以我现在只想提交生成的文件。谢谢!
java - 优雅地处理 TypeMirror 和 Class
我刚刚在这里进入 javax AnnotationProcessing,并且遇到了一个丑陋的案例。我将用一系列描述我的学习过程的伪代码行来说明它:
问题是,现在我发现如果客户端代码包含一个核心类,如java.lang.String
或java.lang.Object
作为Class
参数,这一行:
...导致 a ClassCastException
,因为 AnnotationProcessor 环境足以Class
在这种情况下实际检索对象。
我已经想出了TypeMirror
在没有的情况下如何做我需要做的一切Class
——我现在需要在我的代码中处理它们吗?有没有办法TypeMirror
从Class
对象中获取 a ?因为我找不到
java - 自定义注释处理器 - 使用注释检测方法
我正在尝试编写一个注释 Procssor 来检测使用 @PrintMethod 注释注释的方法。例如在下面的测试类中,我想在测试方法中打印代码。有没有办法做到这一点?
从下面说明的 AnnotationProcessor 类中,我只能获取方法名称,但不能获取方法的详细信息。
测试班
注释处理器类
java - Annotation Processor - How to get the Class it is processing
I am trying to write a custom Anntoation processor. The annotation processor will process each class file at compile time to check annotations, But how am i able to get the class that it is currently processing? I am only able to get the class name in the following codes.
java - 注释处理器仅在首次运行后处理修改的类
我正在开发一个注释处理器。
当处理器项目被编译为 .jar 时,处理发生在我使用处理器的第二个项目的所有类上(当我在 Eclipse 上使用 Project->Clean... 时也会发生)。但是当我更改一个类并保存它时,在我的第二个项目中,处理只发生在这个类中。
问题是我的处理器必须获取所有类的根元素,但是,当它只在一个类中运行时,它只能获取该类的根元素。
关于如何获取项目的所有根元素的任何想法?
java - 无法在注释处理器中加载资源(不在类路径上)
我有一个注释处理器,它将使用接口的 getter 方法定义的键生成一个枚举。
该接口位于
MyProject/src/main/java/my.package.MyInterfaces.java。
我想验证驻留在其中的属性文件MyProject/src/main/resources/META-INF/resource-bundle/
是否包含生成的枚举中定义的键。
我的问题是属性文件不能通过处理器的类加载器或 Filer.getResource(...) 获得。
如何使该项目的源代码或类路径可供处理器使用,以便我可以加载属性文件?
现在我只有处理器所在的 jar 中的资源可用。我确实尝试通过 eclipse Project/Properties/Java compiler/Annotation processing/Processor 选项定义 -classpath 和/或 -sourcepath 但它没有成功。
有没有人遇到过这样的问题,谁能给我一个线索,告诉我如何让处理器可以使用这些资源?
我确实有 maven 结构但不使用 maven,因为应用程序中有旧的依赖项。所以maven现在不是我的选择。
Eclipse 3.6 Helios 似乎
StandardLocation.SOURCE_PATH
并StandardLocation.CLASS_PATH
没有在 Filer#getResource() 中实现,因此将生成的源或类文件写入SOURCE_PATH
或CLASS_PATH
似乎是不可能的,还可以访问SOURCE_PATH
和CLASS_PATH
*上的任何文件
谢谢。
java - 如何判断 TypeElement 是否间接实现了接口
的getInterfaces()
方法TypeElement
只返回元素直接实现的接口。有没有一种简单的方法来查找给定的是否TypeElement
间接实现了给定的接口?
也就是说,我有一个TypeElement
并且我想知道它是否从给定接口下降。
java - 通过注解处理添加注解
我正在尝试使用注释对我的代码进行一些预处理。在加载时,我想制作类的“虚拟”副本及其功能。但是在编译/构建时,我必须使用注释进行一些“预编译”。我需要 java 的 AbstractProcessor 子类的进程函数中的代码。它应将带有特殊参数的注释“@Named”(取决于注释@SpecialClass 中定义的名称和方法/字段名称)添加到每个既没有@Invisible 也没有@Named 手段的方法/字段到每个字段/方法没有任何注释。如果检测到@SpecialClass-Annotation,则调用 AbstractProcessor 的过程函数。
我想编译这个:
对此:
我此时的问题是我不知道如何向类对象(字段/方法)添加注释我也不了解过程函数的 2 个参数的操作。
我已经找到了这个主题:向 Java 类添加编程注释,但没有人真正给出具体示例。这就是为什么我在这里再次询问,希望有人可以描述它的工作方式。
先感谢您。
附加信息:
实际上我不想确切地问这个问题,因为我不希望人们认为我只是想要你的解决方案,但是当我要求一个例子时,我希望有人可以为我解决它。稍后,当代码被加载到 VM 中时,我会检查每个类的注解 @Named。如果我找到了一个,我将在代表命名空间的对象中注册函数或字段。这意味着如果我想通过这个昵称调用一个函数,我只需选择“对象”并查找方法的昵称。我需要在编译时而不是运行时完成带有注释的方法和字段,因为它可能是真正的方法名称被混淆了。所以运行时的方法和字段可能有无意义的名称。这就是为什么我想在代码被混淆之前完成代码 -> 在编译时。