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

时间:2016-02-02 06:20:33

标签: kotlin annotation-processing

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

2 个答案:

答案 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'
}