我有一个java注释处理器,它在编译期间生成一堆java文件。我想通过添加扩展方法使生成的类更好地在kotlin中使用。我在kotlin论坛上被告知,我可以尝试的是写一个包含我的扩展功能的kotlin文件。我试过这个,我使用Filer
对象创建此文件,将其输出到StandardLocations.SOURCE_OUTPUT目录。 Intellij可以看到我生成的类,我可以按预期使用扩展函数,但是应用程序不会编译,因为编译器无法找到新的kotlin文件。有什么方法可以写一个新的kotlin文件,它会被kotlin编译器接收吗?
答案 0 :(得分: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");
不幸的是,它对kapt2不起作用(参见问题htmlpurifier)
您还可以通过资源编写器
创建.kt文件Writer w = processingEnv.getFiler().createResource(SOURCE_OUTPUT, "package_name", "Sample.kt")
但是现在你需要调用编译器两次,因为在通过compileDebugJavaWithJavac任务调用javax注释处理器之前运行compileDebugKotlin任务)
答案 1 :(得分:0)
将文件(包含正确的包名称)输出到src/build/generated-src/kotlin/your/package/File.kt
并将其添加到您的build.gradle
:
sourceSets {
main.java.srcDirs += 'build/generated-src/kotlin'
}