如何从注释处理器生成kotlin文件?

Bra*_*ell 19 annotation-processing kotlin

我有一个java注释处理器,它在编译期间生成一堆java文件.我想通过添加扩展方法使生成的类更好地在kotlin中使用.我在kotlin论坛上被告知,我可以尝试的是写一个包含我的扩展功能的kotlin文件.我试过这个,我使用该Filer对象创建此文件,将其输出到StandardLocations.SOURCE_OUTPUT目录.Intellij可以看到我生成的类,我可以按预期使用扩展函数,但是app不会编译,因为编译器找不到新的kotlin文件.有什么方法可以编写一个新的kotlin文件,它将被kotlin编译器选中吗?

Ale*_*nov 2

对于 kapt,您可以通过获取源文件夹。

Map<String, String> options = processingEnv.getOptions();
                String generatedPath = options.get("kapt.kotlin.generated");

String path = generatedPath
                    .replaceAll("(.*)tmp(/kapt/debug/)kotlinGenerated",
                            "$1generated/source$2");
Run Code Online (Sandbox Code Playgroud)

不幸的是它不适用于 kapt2 (请参阅问题KT-14070

您还可以通过资源编写器创建 .kt 文件

Writer w = processingEnv.getFiler().createResource(SOURCE_OUTPUT, "package_name", "Sample.kt")
Run Code Online (Sandbox Code Playgroud)

但现在您需要调用编译器两次,因为compileDebugKotlin任务在通过compileDebugJavaWithJavac任务调用javax注释处理器之前运行)