我有一个Java注释处理器,在编译过程中会生成一堆Java文件。我想通过添加扩展方法使生成的类在kotlin中更易于使用。在kotlin论坛上有人告诉我,我可以尝试做的事情是写一个包含扩展功能的kotlin文件。我已经尝试过了,我使用Filer
对象创建了该文件,并将其输出到StandardLocations.SOURCE_OUTPUT目录。 Intellij可以看到我生成的类,并且可以按预期使用扩展功能,但是该应用程序无法编译,因为编译器无法找到新的kotlin文件。有什么办法可以编写一个新的kotlin文件,该文件会被kotlin编译器获取?
最佳答案
对于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(请参阅问题KT-14070)
您还可以通过资源编写器创建.kt文件
Writer w = processingEnv.getFiler().createResource(SOURCE_OUTPUT, "package_name", "Sample.kt")
但是现在您需要两次调用编译器,因为在通过compileDebugJavaWithJavac任务调用javax注释处理器之前,将运行compileDebugKotlin任务)