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

java - Kotlin/KAPT 生成的 Kotlin 类不被识别为类成员,但它在方法内部

我已经编写了一个注释处理器,它为我的类生成一个构建器类@DataBuilder

我用这个注释注释的类位于com.my.package.model包中,生成的构建器类也位于同一个包com.my.package.model中,但是在生成的目录中,当然build/generated/source/kapt/debug/com/my/package/model/MyModelBuilder.kt,我可以在我的模型类中使用这些生成的类(用 Kotlin 编写)

但是不能在 java 类中使用生成的MyModelBuilderKotlin 类作为类成员

Android Studio 可以识别该类,但我遇到了这个编译问题

这很奇怪,因为我只能在方法内部使用这个生成的构建器类,这段代码编译得很好:

这里有人可以帮助我理解这种行为以及如何解决这个问题吗?提前,谢谢!

更新

我刚刚使用必要的代码创建了这个 repo 来复制问题 https://github.com/epool/HelloKapt

该项目在克隆和运行后工作正常,要复制问题,请取消注释此行https://github.com/epool/HelloKapt/blob/master/app/src/main/java/com/nearsoft/hellokapt/app /MainActivity.java#L13

注意:如果我将 MainActivity.java 类转换为 Kotlin(MainActivity.kt) 问题是不可重现的并且工作正常,但由于到目前为止的一些项目限制,我不想这样做

Kotlin 问题: https ://youtrack.jetbrains.net/issue/KT-24591

0 投票
1 回答
904 浏览

java - 没有 kotlin 代码时,我真的需要使用 kapt 吗?

这个问题的原因是下一个问题:我一直在使用这个使类在 Java 中可打包,我决定将所有模型迁移到 kotlin 类。

阅读一些文档后,我意识到我需要使用KAPT而不是“annotationProcessor”。

问题:问题是后来当我尝试运行应用程序时,我开始遇到使用“annotationProcessor”的 Dagger 2 和 Butterknife 的问题,因为它们处理的是 JAVA 类,而不是 Kotlin 类。为了让事情重新开始,我必须在我的 gradle 文件中为每个“annotationProcessor”添加一个新行,但改用“kapt”。

所以我的问题是:如果使用这些框架所涉及的代码是纯 java 类,我真的需要这样做吗?如果我需要这样做,你能解释一下原因吗?

感谢您抽时间阅读!

0 投票
1 回答
152 浏览

java - 是否可以在注释处理中引发方法返回类型的编译错误

例如,如果您编写了具有错误返回值的覆盖方法。

编译器将标记您的返回值int并给您错误“返回类型与 Runnable.run() 不兼容”。

现在我正在编写一个注释处理器,我可以在返回值上标记错误吗?

编辑

编译错误不仅仅是因为注解处理。但是注释处理会引发编译错误。问题是如何在方法的返回类型上标记错误。答案可能是“有可能”或“不可能”。如果可能,请帮助提供样品。

0 投票
1 回答
263 浏览

java - 为什么我会收到 Velocity “Velocity 未正确初始化”这个错误?

我在扩展 AbstractProcessor 的注释处理器中初始化速度引擎,如下所示:

调用方法时会发生异常init()

我将带有 Velocity jar 文件的处理器导出为 jar 文件,并将 eclipse 配置为将其用作注释处理器。

0 投票
0 回答
216 浏览

java - Java中的Kotlin转换失去了集合的专业化?

我正在为 Android 开发一个基于注释处理器的库。我正在尝试提高库与 Kotlin 的兼容性。我有以下情况:

如您所见,这是 kotlin 中的一个简单数据类。我的图书馆将认为每个收藏都是“专业的”(具有通用性)。当我尝试在 Java 中反编译这个类时,我得到:

如您所见,有关通道字段的专业化信息丢失了:它被签名为 List。

预计 Java 版本的类保持 List 的特化。

这是我弄错了,或者只是 Kotlin 以这种方式工作?

更新

这是一种非常奇怪的行为。接口上使用的泛型被识别,类号上的泛型。

0 投票
1 回答
1826 浏览

lombok - 带有 Gradle 4.9 的 Lombok 注释处理器

如果您在下面收到该异常/警告,当您使用 Gradle 4.9 时,请降级到 Gradle 4.8。

警告:lombok.javac.apt.LombokProcessor 无法初始化。Lombok 在此编译期间不会运行:java.lang.ClassCastException: org.gradle.api.internal.tasks.compile.processing.IncrementalFiler cannot be cast to jdk.compiler/com.sun.tools.javac.processing.JavacFiler

lombok.javac.apt.LombokProcessor

0 投票
1 回答
333 浏览

java - 在 Java 中的注释处理过程中发生错误时如何打印堆栈跟踪

我正在开发一个具有注释处理器的Java 库。为了捕获异常,我编写了类似于以下代码的代码:

发生异常时,实际上显示为:

虽然我期待完整的堆栈跟踪,但对于检测问题出在哪里很有用。有什么想法可以完成这项任务吗?

提前致谢。

0 投票
0 回答
538 浏览

android - 如何在 Android 模块之间共享使用 annotationProcessor 的依赖项?

我有一个 Android 应用程序模块 (A) 和一个 Android 库模块 (B)。(A) 和 (B) 都包含这些相同的依赖项:

但是在我的项目中,模块(A)依赖于模块(B),所以我在堆栈溢出上搜索了如何实现Don't Repeat Yourself设计模式,以便我将这些依赖项仅包含在模块(B)中,我发现很有用但我没有找到如何使这种依赖

这两个模块之间共享,所以我该怎么做?

0 投票
1 回答
4651 浏览

java - 警告:没有处理器声明任何这些注释:javax.annotation.Generated

我正在开发 NetBeans 8.2 中的一个模块项目,它带有一个 GUI 和一切。我正在使用大量 IDE 功能为 GUI 自动生成代码。

每次我对项目进行干净构建时,都会收到来自编译器的警告:

浏览构建目录,我看到 IDE 为我生成了一个类Bundle.java,它在它上面添加了给定的注释:

我需要这个警告消失。我尝试在网上搜索处理此特定注释的注释处理器,但我没有运气。此特定注释的注释处理器是否存在?

如果这是一个“无害的警告”,我需要理解为什么在我的构建输出中证明它的存在是无害的。

如果需要,我可以在这个问题中包含从 IDE-processorpath传递给javac的选项的参数;我没有故意包含它,因为它很长,但如果需要我可以添加它

编辑#1:

我对 NetBeans 安装目录下的common.xml文件进行了“hacky”修改,以使对javac的调用不包含该-processorpath选项,这样做会使警告消失。我还是不明白为什么会这样

0 投票
1 回答
101 浏览

java - 编译测试库不编译接口的静态方法(Java 8)

Java 8 的特性之一是能够向接口添加静态方法。我正在研究基于注释处理器的 java 库,名为Kripton Persistence Library

我正在使用谷歌编译测试库。当我尝试测试以下接口的编译时:

使用如下代码:

我收到以下错误:

完整代码可在:

https://github.com/xcesco/kripton/tree/v5.x/kripton-processor/src/test/java/sqlite/feature/transition

我错了什么?