Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Для 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)

Ответ 2

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

и добавьте это в свой build.gradle:

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