问题标签 [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 投票
0 回答
505 浏览

java - getElementsAnnotatedWith 方法在注释处理时返回空列表

我的目标是通过注释处理器生成代码。我想通过根据注释排除一些字段并添加一些约束验证器等,在现有基类的顶部生成新类。我有 3 个模块。第一个是包含 Car 类和注释 BaseClass、A 和 B 的基本模块。第二个模块是注释处理器模块。它包含 CustomCodeGenerator 注释及其处理器。第三个模块是我想在其上生成 NewCar 类并在其中使用该 NewCar 类的模块。

车类

CustomCodeGenerator.class

CustomCodeGeneratorProcessor.class

第三个模块也如下所示。

主类

ValidPassengerCount.class

ValidPassengerCountValidator.class

问题是 CustomCodeGeneratorProcessor.class 中的 roundEnv.getElementsAnnotatedWith(BaseClass.class) 返回空列表。如果我将 Car 移到第三个模块中,它就可以工作。然而,我的目标是从来自依赖模块的基类生成新代码,对于这个例子来说,它是模块 1。有没有办法到达依赖模块的注释元素?

0 投票
1 回答
605 浏览

android - 将注释处理器迁移到 androidX

我有一个带有以下依赖项的 android 注释处理器:

在我的处理器中,我访问ActivityFragment上课。我现在需要哪些内容才能使用新的 android x Fragment?我找不到任何关于这个的...

我天真地尝试添加

但这无济于事......

0 投票
1 回答
671 浏览

android - 在 kotlin 中使用注释处理器

我的处理器中有一个简单的注释,如下所示:

这适用于 java 文件,但是一旦我将文件转换为 kotlin,注释的导入就不再起作用了。为什么?

在此处输入图像描述

我需要改变什么才能让他的注释也能在 kotlin 中工作?从文档中我可以看到 kotlin 与 java 注释 100% 兼容,所以我有点困惑这里有什么问题......我会理解处理器是否不工作并且需要调整以与 kotlin 一起工作,但是我不知道为什么导入本身不起作用...

我正在谈论的图书馆在这里:https ://github.com/MFlisar/BundleArgs

0 投票
1 回答
589 浏览

kotlin - 注释处理器:如何知道 Kotlin 类是否用 Element 的“内部”可见性修饰符标记

我正在使用自动服务来处理一些注释,但我无法确定 Kotlin 类是否具有来自注释处理器 API 的“内部”可见性修饰符。

我在处理器中使用 KAPT 和 Kotlin。依赖项:

样本类:

我在 process 方法中得到了 this 的 TypeElement

但我不知道如何检测该类是否具有“内部”修饰符。

如果我这样做:classElement.modifiers我得到这个: 在此处输入图像描述

关于如何检测“内部”修饰符的任何想法?

0 投票
1 回答
364 浏览

java - 查找被注释处理覆盖的方法

代码结构

假设我们有这样的结构:

我想要达到的目标

使用注释处理我试图从AMethodAnnotation位于myMethodclass 内部方法上的注释中提取数据A。类B扩展了这个类并覆盖了它的方法myMethod

扭曲是我想要来自方法的数据,AMethodAnnotation如果它里面的类有注释MyClassAnnotation

我正在获取带有注释的类MyClassAnnotation并循环通过enclosedElements,在那里我可以检查它是否具有Override注释,但我不确定如何获取它覆盖的方法,因为这是AMethodAnnotation我想要的数据所在的位置。ExecutableElement似乎没有提供方法来获得这个。

问题

有没有办法获得对被覆盖的方法的引用?

有一种方法,您获取Bis的超类A并遍历enclosedElementsin A,然后您必须验证方法名称是否相同,以及参数是否相同且顺序相同。但我发现这种方法需要大量检查,因此我的问题是是否有更好的方法。

0 投票
1 回答
741 浏览

android - 如何在 gradle 模块中声明注释处理器女巫

我的 Android 项目中有模块。其中一个模块(例如moduleA)使用另一个(moduleB)作为依赖项:

而且我还有 apt 和 old gradle plagin。现在,我从 gradle 文件中删除 apt,升级插件版本并得到错误:

如果我们使用一些外部依赖项,我们会这样做(例如)来解决这个问题:

但是,当注释处理器位于 gradle 模块内部时,我需要做什么?你能解释一下吗,因为我对这方面没有深入的了解,通常我只是简单地走这条线

来自图书馆提供者的存储库。我试图研究这个案例,但没有找到类似的东西。

0 投票
1 回答
509 浏览

java - Java注释处理如何检查VariableElement是原始类型(int,float)还是某个类的对象

我有一堂课

CustomAnnotation1 是我定义的自定义注释,可以放在任何字段上。假设类ClassObject是这样的

我想要实现的- 如果我的注释放在任何不是原始类型的字段上,我想访问该类的所有字段。

我的方法- 获取所有用 注释的字段CustomAnnotation1,遍历所有字段,如果它是非原始的,则获取该类和进程中的所有字段。

我已经尝试过- 我能够使用我的AbstractProcessor类中的以下代码来获取所有用我的注释进行注释的元素。

问题-

  • 我对这个VariableElement类进行了很多研究,但无法找到一种方法来检查该字段是否是原始的。这可以做到吗?
  • 有没有更好的方法来实现这一目标?
0 投票
1 回答
868 浏览

android - Dagger 2 的 AssistedInject 是如何工作的?

Square的AssitedInject库实际上是一个生成Dagger 2模块的注释处理器。Dagger 2 也是一个注释处理器。

而且据我所知,没有办法控制处理器执行的顺序

在此示例中(请参见下面的代码段),您可以看到模块依赖于由 AssistedInject 生成的类AssistedInject_MainModule。因此,如果 Dagger 2 将首先运行,则构建应该会失败,因为此时AssistedInject_MainModule不存在。

但是可以编译。它是如何工作的?

0 投票
1 回答
1124 浏览

java - IntelliJ IDEA annotation processing doesn't generate sources in configured forlder

I'm struggling with IntelliJ Idea (IntelliJ IDEA 2018.3.2 (Ultimate Edition)), Gradle, and Immutables library. What I'm trying to do is generating sources in the generated directory as expected by the configuration at Using annotation processor in IDE > IntelliJ IDEA.

At the moment the result I get is that both compiled classes and sources are put inside /build/classes/java/main Have you got the same issues? Do you have suggestions to solve the problem? I'm looking for answers but I didn't find a working solution yet.

0 投票
1 回答
891 浏览

java - 如何从注释处理器中的嵌套注释中读取 Class[] 值

我正在尝试使用 Java 注释处理工具生成一些代码,我有嵌套注释,其中父注释值是子注释的数组,子注释值是类数组。

注释:

用法:

使用我的子类型调用value()注释Processor失败,但出现以下异常:

那么我如何从注释中读取这些类List<TypeMirror>