问题标签 [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.
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 类中使用生成的MyModelBuilder
Kotlin 类作为类成员
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) 问题是不可重现的并且工作正常,但由于到目前为止的一些项目限制,我不想这样做
java - 没有 kotlin 代码时,我真的需要使用 kapt 吗?
这个问题的原因是下一个问题:我一直在使用这个库使类在 Java 中可打包,我决定将所有模型迁移到 kotlin 类。
阅读一些文档后,我意识到我需要使用KAPT而不是“annotationProcessor”。
问题:问题是后来当我尝试运行应用程序时,我开始遇到使用“annotationProcessor”的 Dagger 2 和 Butterknife 的问题,因为它们处理的是 JAVA 类,而不是 Kotlin 类。为了让事情重新开始,我必须在我的 gradle 文件中为每个“annotationProcessor”添加一个新行,但改用“kapt”。
所以我的问题是:如果使用这些框架所涉及的代码是纯 java 类,我真的需要这样做吗?如果我需要这样做,你能解释一下原因吗?
感谢您抽时间阅读!
java - 是否可以在注释处理中引发方法返回类型的编译错误
例如,如果您编写了具有错误返回值的覆盖方法。
编译器将标记您的返回值int
并给您错误“返回类型与 Runnable.run() 不兼容”。
现在我正在编写一个注释处理器,我可以在返回值上标记错误吗?
编辑
编译错误不仅仅是因为注解处理。但是注释处理会引发编译错误。问题是如何在方法的返回类型上标记错误。答案可能是“有可能”或“不可能”。如果可能,请帮助提供样品。
java - 为什么我会收到 Velocity “Velocity 未正确初始化”这个错误?
我在扩展 AbstractProcessor 的注释处理器中初始化速度引擎,如下所示:
调用方法时会发生异常init()
。
我将带有 Velocity jar 文件的处理器导出为 jar 文件,并将 eclipse 配置为将其用作注释处理器。
java - Java中的Kotlin转换失去了集合的专业化?
我正在为 Android 开发一个基于注释处理器的库。我正在尝试提高库与 Kotlin 的兼容性。我有以下情况:
如您所见,这是 kotlin 中的一个简单数据类。我的图书馆将认为每个收藏都是“专业的”(具有通用性)。当我尝试在 Java 中反编译这个类时,我得到:
如您所见,有关通道字段的专业化信息丢失了:它被签名为 List。
预计 Java 版本的类保持 List 的特化。
这是我弄错了,或者只是 Kotlin 以这种方式工作?
更新
这是一种非常奇怪的行为。接口上使用的泛型被识别,类号上的泛型。
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
java - 在 Java 中的注释处理过程中发生错误时如何打印堆栈跟踪
我正在开发一个具有注释处理器的Java 库。为了捕获异常,我编写了类似于以下代码的代码:
发生异常时,实际上显示为:
虽然我期待完整的堆栈跟踪,但对于检测问题出在哪里很有用。有什么想法可以完成这项任务吗?
提前致谢。
android - 如何在 Android 模块之间共享使用 annotationProcessor 的依赖项?
我有一个 Android 应用程序模块 (A) 和一个 Android 库模块 (B)。(A) 和 (B) 都包含这些相同的依赖项:
但是在我的项目中,模块(A)依赖于模块(B),所以我在堆栈溢出上搜索了如何实现Don't Repeat Yourself
设计模式,以便我将这些依赖项仅包含在模块(B)中,我发现这很有用但我没有找到如何使这种依赖
这两个模块之间共享,所以我该怎么做?
java - 警告:没有处理器声明任何这些注释:javax.annotation.Generated
我正在开发 NetBeans 8.2 中的一个模块项目,它带有一个 GUI 和一切。我正在使用大量 IDE 功能为 GUI 自动生成代码。
每次我对项目进行干净构建时,都会收到来自编译器的警告:
浏览构建目录,我看到 IDE 为我生成了一个类Bundle.java,它在它上面添加了给定的注释:
我需要这个警告消失。我尝试在网上搜索处理此特定注释的注释处理器,但我没有运气。此特定注释的注释处理器是否存在?
如果这是一个“无害的警告”,我需要理解为什么在我的构建输出中证明它的存在是无害的。
如果需要,我可以在这个问题中包含从 IDE-processorpath
传递给javac的选项的参数;我没有故意包含它,因为它很长,但如果需要我可以添加它
编辑#1:
我对 NetBeans 安装目录下的common.xml文件进行了“hacky”修改,以使对javac的调用不包含该-processorpath
选项,这样做会使警告消失。我还是不明白为什么会这样
java - 编译测试库不编译接口的静态方法(Java 8)
Java 8 的特性之一是能够向接口添加静态方法。我正在研究基于注释处理器的 java 库,名为Kripton Persistence Library。
我正在使用谷歌编译测试库。当我尝试测试以下接口的编译时:
使用如下代码:
我收到以下错误:
完整代码可在:
我错了什么?