Как сгенерировать файл kotlin из обработчика аннотаций?

У меня есть обработчик аннотации java, который генерирует кучу java-файлов во время компиляции. Я хотел бы сделать сгенерированные классы более приятными для использования в kotlin, добавив методы расширения. Мне говорили на форумах kotlin, что я мог бы попробовать написать файл kotlin, содержащий мои функции расширения. Я пробовал это, я использовал Filerобъект для создания этого файла, выводя его в каталог StandardLocations.SOURCE_OUTPUT. Intellij может видеть мой сгенерированный класс, и я могу использовать функции расширения по назначению, но приложение не будет компилироваться, потому что компилятор не может найти новый файл kotlin. Есть ли способ написать новый файл kotlin, который будет получен компилятором kotlin?

kotlin,annotation-processing,

19

Ответов: 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")

Но на данный момент вам нужно вызвать компилятор, чтобы вызвать выполнение задачи compileDebugKotlin перед вызовом обработчика аннотации javax с помощью задачи compileDebugJavaWithJavac)


0

Выведите файлы (с соответствующими именами пакетов) в каталог, например src/build/generated-src/kotlin/your/package/File.kt

и добавьте это к своему build.gradle:

sourceSets {
    main.java.srcDirs += 'build/generated-src/kotlin'
}
Kotlin, аннотаций обработки,
Похожие вопросы