问题标签 [annotation-processor]

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.

0 投票
2 回答
2305 浏览

android - annotationProcessor + androidTest + dagger2

对于插桩测试,我有一个TestApplication创建一个TestComponent,但不再生成文件(Error:/xxx/TestApplication.java:16: The import.xxx.DaggerTestApplicationComponent cannot be resolved)。我无法确定根本原因。我尝试过不同的 Android Studio(2.2、2.1.2)、不同的 gradle 插件(2.2.0-alpha6、5、4)和不同版本的 dagger(2.2 到 2.6)。

我应该使用androidTestAnnotationProcessor吗?(以前不是这样的)

编辑:要使用匕首 2.6,需要添加classpath 'com.google.guava:guava:19.0'

更新: a 有问题Module,因此Component无法创建。但是,使用千斤顶(即使有调试选项),我看不到问题。现在,恢复到 java 7,gradle 插件 2.1.2。这样,无需指定哪个 guava 版本,并且可以使用所有最新的库(dagger 2.6、butterknife 8.2.1、apt 1.8)

0 投票
1 回答
2134 浏览

java - 如何使用 JavaPoet 生成调用超类构造函数的构造函数

我想生成一个使用 JavaPoet 扩展其他类的类。

例如我有这个类:

我想生成这样的新类:

但是,我在 JavaPoet 中没有看到任何现成的 API 来创建调用超类构造函数的构造函数。如何做到这一点以及最佳实践是什么?

0 投票
1 回答
117 浏览

java - 当 RoundEnvironment 指向测试源时如何扫描主要源中的注释

我创建了一个@EnableEntityProcessing打算在测试中使用的注释(src/test/java)。我还创建了关联的注释处理器EnableEntityProcessingProcessor

这样做的目的EnableEntityProcessingProcessor是扫描@Entity在 src/main/java 中找到的 (javax.persistence.Entity) 注释,并根据这些注释生成代码。我希望代码在测试资源下生成,因为它只用于测试。

主要问题是RoundEnvironment对象指向测试代码,因为支持的注释是@EnableEntityProcessing(仅在测试中使用)。

从代码示例中,您可以看到我正在扫描带有 注释的元素EnableEntityProcessing,如果其中一个存在,那么我想查找带有注释的类Entity。问题是 roundEnv 没有找到它们,因为它链接到测试源。

0 投票
1 回答
540 浏览

java - 我如何测试注释处理器生成的无 .java 源?

我一直在使用 Java APT 进行一些注释处理,并且我能够按照 TDD 实践从带注释的类中生成 .java 文件,只要我生成 .java 文件,一切都做得很好,为了测试我使用了谷歌-compile-testing,这是我对生成的源代码进行测试的方式:

有了这个,我能够检查并验证生成的 .java 文件。

但后来我想生成一些 .html 文件,并且我希望能够测试我生成的 html 内容。

但使用上述方法失败,因为它需要 .java 文件,并引发以下断言错误

该错误表明我应该生成 .java 文件,但我知道使用 APT 您可以生成任何类型的源代码,但我认为这里的问题在于我为测试所做的调用或参数,我一直在试图弄清楚如何使用google-compile-testing测试没有 java 生成的源代码,但没有运气。

有人知道如何使用google-compile-testing测试 .html 或其他 java 源的任何其他内容吗?

0 投票
6 回答
20227 浏览

android - 错误:无法解决:annotationProcessor

gradle这是我在向我的 android 项目添加新依赖项时遇到的以下错误。而且这个错误不是项目特定的。如果我在任何其他 android 项目中添加插件,我会遇到同样的错误 添加任何第三方插件时出错

我还发布了我的项目应用级gradle模块截图

应用级 gradle 模块

Annotation Processor我什至在设置中启用了。仍然没有解决办法。请帮忙。

0 投票
2 回答
1909 浏览

java - 如何使用@Target(ElementType.TYPE_USE) 处理注解?

我正在实现一个注释处理器,以确保标有注释的元素是实现某个接口的类的实例,或者是实现某个接口的类型的使用:

对于带注释的元素,必须在方法执行后创建一个日志条目(使用 AOP)。例子:

Report如果实现了,则必须创建日志条目Auditable;如果没有,则抛出运行时异常(哎呀,我忘了实现接口!)。因此,注释处理器有助于在编译时捕捉程序员的错误。到目前为止,我已经成功地检查了参数中的所有用途,但没有检查类型用途。注释处理器的相关代码如下:

只识别带有 kind 的带注释的元素ElementKind.PARAMETER(process() 循环中的第一行只打印一行 for 'newReport')如何检查带注释的类型是否实现Auditable?没有 " ElementKind.TYPE_USE" 常量可以使用。我一直无法找到任何有关此事的信息。感谢您的关注。

0 投票
0 回答
578 浏览

java - 注释处理顺序 - 找不到符号

我有的:

  1. 我编写了一个@ViewModel生成类的注释处理器ViewModel_<annotated class name>
  2. 我已经编写了另一个注释处理器@Retainable,它为带有注释的字段生成构建器@Retainable

我的实现基于这篇文章:

http://blog.stablekernel.com/the-10-step-guide-to-annotation-processing-in-android-studio

但我有两个注释处理器。

我的问题:

如果我ViewModel_<annotated class name>用我的@Retainable注释注释类型的字段。

编译器抱怨:

错误:(33, 15) 错误: 找不到符号类 ViewModel_<annotated class name>

但,

如果我用匕首注释这个字段@Inject而不是我的@Retainable一切都在编译。

问题:

我的注释和匕首有什么区别?我该怎么做才能让它发挥作用?

0 投票
1 回答
4747 浏览

android - annotationprocessor 和 apt 配置等效

我正在使用AndroidAnnotaion,但由于 Android Studio 2.3 和 Gradle 2.3.0,他们说android-apt已经过时了。而且annotationProcessor是新的。所以,我想知道如何annotationProcessorapt以前一样进行配置。

如果我误解了什么,请帮忙。

那么,之前...

现在...

0 投票
2 回答
982 浏览

java - 在 JavaPoet 中将数组作为注释参数的值传递

使用JavaPoet我试图用一个具有数组作为参数值的注释来注释一个类,即

我使用AnnotationSpec.builder及其addMember()方法:

0 投票
2 回答
4538 浏览

android - Android Studio 2.3 更新:警告:使用不兼容的插件进行注释处理:android-apt。这可能会导致意外行为

所以,我已经阅读了我可以在这个网站上找到的关于这个问题的所有问题。我还与一位有类似问题的开发人员在评论中聊天,他能够解决这个问题。

我没有 apt 或 annotationProcessor 在我的 gradle 脚本中写任何地方。

我的代码中没有写 android-apt 这个词。我什至继续检查了所有的图书馆。这包括在我的项目中。

这是一个非常大的问题,需要解决。

我在下面附上修改后的 build.gradle,请建议: