问题标签 [kapt]
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 - 如何使用 java / kotlin 中的注释处理将方法附加到现有类?
我是注释处理和代码生成的新手。我想了解如何执行此类操作,例如将新方法附加到现有类。这是我想做的一个例子:
假设我们有一个带有自定义注释的类,如下所示:
我想要得到的结果 - 该类的扩展副本:
我已经找到了如何创建注释处理器。我正在寻找一种方法来保存源类中的所有现有字段、属性和方法,并在其中添加更多方法。
如果可以在不创建新类的情况下修改类 - 这将是完美的,但在所有教程中只创建新类,我没有找到任何将源类的所有内容复制到另一个类的示例。
请不要建议使用反射。我需要这个用于android,所以反射不是资源成本的选择原因。我正在寻找编译时解决方案。
它是在应用程序中实现的自定义脚本语言所必需的,应该用于简化包装类结构。当这项工作直接在代码中完成时 - 当这样的方法计数超过每个类 20 时,它看起来很糟糕。
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 - 错误:与属性不兼容:(attr) 参考 [弱]
我正在尝试集成这个库。我遇到了“缺少属性”的问题,所以我将这些属性添加到我的项目中:
之后,当我清理项目并再次运行构建过程时,我遇到了这个问题:
在某些地方,其中一个是使用数据绑定的库生成的布局文件中的这一行:
在该库生成的 Kotlin 代码中,声明为:
这个库在 Kotlin 中。是什么原因造成的?
是KAPT吗?是数据绑定吗?
java - 没有 kotlin 代码时,我真的需要使用 kapt 吗?
这个问题的原因是下一个问题:我一直在使用这个库使类在 Java 中可打包,我决定将所有模型迁移到 kotlin 类。
阅读一些文档后,我意识到我需要使用KAPT而不是“annotationProcessor”。
问题:问题是后来当我尝试运行应用程序时,我开始遇到使用“annotationProcessor”的 Dagger 2 和 Butterknife 的问题,因为它们处理的是 JAVA 类,而不是 Kotlin 类。为了让事情重新开始,我必须在我的 gradle 文件中为每个“annotationProcessor”添加一个新行,但改用“kapt”。
所以我的问题是:如果使用这些框架所涉及的代码是纯 java 类,我真的需要这样做吗?如果我需要这样做,你能解释一下原因吗?
感谢您抽时间阅读!
java - 为什么我的错误被 Kapt 和 Kotlin 掩盖了?如何增加错误限制?
我遇到了涉及 Android 数据绑定、Room 和 Dagger 的问题。如果任何代码生成步骤失败,所有这些都会在编译时生成带有错误的代码,将对象显示为未找到。这会导致很多很多错误。错误数可能超过 Java 错误限制。
结果,根本原因错误被埋没了。它在错误列表中不可见。
增加 Java 错误限制不起作用,因为 Kotlin 注释处理器 Kapt 会忽略它。如何增加 Java 错误限制?
java - Kotlin-kapt 不会生成任何东西
我正在使用带有 querydsl-4.1.4 的 Kapt 版本 3。以下是我的build.gradle文件:
构建过程正确执行而没有错误,但不会生成 querydsl q 类。我遵循了kotlin-example build.gradle 示例,但没有任何反应。此外,我在许多网站上搜索了一个可能的解决方案并尝试了许多不同的解决方案......但没有。
kotlin - Kotlin kapt 参数一个键的多个值
我正在尝试将没有反射的牙签库集成到我的多模块项目中。我按照本指南将我的所有模块与 DI 连接起来。例如我有三个模块::app, :feature1, :feature2
. :app
模块依赖于:feature1
和:feature2
。我需要从两个功能模块中注入类。所以在我:app
的build.gradle
文件中我需要写这样的东西(使用annotationProccessor - 而不是kapt):
如您所见,toothpick_registry_children_package_names
参数有两个值(两个值的列表)。但是如何使用 kapt 插件为一个键设置多个值?我试过这样做:
但生成的代码如下所示:
如您所见,参数包括方括号(第一个参数以“[”开头,第二个以“]”结尾)。我究竟做错了什么?我试图删除方括号,但两个模块名称只是像这样连接:
是 kapt 插件中的错误还是我做错了什么?
android - Android:将 Kotlin 与 Dagger 和 Protobuf 集成
我有使用 Java、gRPC (Protobuf) 和 Dagger2 成功构建的现有项目。我想将 Kotlin 添加到项目中。
我已经很容易地将数据文件转换为 Kotlin。当我转换第一个活动(包含 Dagger2)时,构建失败。添加apply plugin: 'kotlin-kapt'
并按下 Sync Now 后,它说
构建仍然失败,现在它也无法识别 protobuf 生成的文件。
有没有人一起尝试过 Kotlin、Dagger、Protobuf?我不想用 Kotlin 完全取代 Java。
这是我的模块级 gradle 文件:
这是我的项目 gradle 文件: