首页 文章

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

提问于
浏览
19

我有一个java注释处理器,它在编译期间生成一堆java文件 . 我已经在kotlin论坛上告诉我,我可以尝试的是写一个包含我的扩展功能的kotlin文件 . 我试过这个,我用 Filer 对象来创建这个文件,将它输出到StandardLocations.SOURCE_OUTPUT目录 . Intellij可以看到我生成的类,我可以按预期使用扩展函数,但应用程序赢了't compile because the compiler can't找到新的kotlin文件 . 有什么方法可以编写一个新的kotlin文件,它将被kotlin编译器选中吗?

2 回答

  • 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不起作用(见问题KT-14070

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

    Writer w = processingEnv.getFiler().createResource(SOURCE_OUTPUT, "package_name", "Sample.kt")
    

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

  • 0

    将文件(使用正确的包名称)输出到 src/build/generated-src/kotlin/your/package/File.kt 之类的目录中

    并将其添加到 build.gradle

    sourceSets {
        main.java.srcDirs += 'build/generated-src/kotlin'
    }
    

相关问题