Я написал обработчик аннотаций, который генерирует класс построителя для моих классов, аннотированных @DataBuilder
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.SOURCE)
annotation class DataBuilder
Мои классы, помеченные этой аннотацией, расположены в пакете com.my.package.model
, и сгенерированный класс построителя также находится в том же пакете com.my.package.model
, но, конечно, в сгенерированном каталоге build/generated/source/kapt/debug/com/my/package/model/MyModelBuilder.kt
, я могу использовать эти сгенерированные классы внутри своих классов модели (написанных на Kotlin )
НО я могу НЕ использовать сгенерированный MyModelBuilder
класс Kotlin внутри класса java в качестве члена класса.
package com.my.package.home;
import com.my.package.model.MyModelBuilder;
public class Home {
MyModelBuilder builder; // <=== AS recognizes the class, but I'm having an compilation issue
}
Android Studio распознает класс, но у меня проблема с компиляцией
com/my/package/home/Home.java:4: error: cannot find symbol
MyModelBuilder builder;
^
symbol: class MyModelBuilder
location: class Home
это странно, потому что я могу использовать этот сгенерированный класс построителя только внутри методов, этот код компилируется нормально:
package com.my.package.home;
import com.my.package.model.MyModelBuilder;
public class Home {
public void hello() {
MyModelBuilder builder;
}
}
может ли кто-нибудь здесь помочь мне понять это поведение и как это исправить? Заранее спасибо!
ОБНОВЛЕНИЕ
Я только что создал это репо с необходимым кодом для репликации проблемы https://github.com/epool/HelloKapt а>
Проект отлично работает после клонирования и запуска, чтобы воспроизвести проблему, не комментируйте эту строку https://github.com/epool/HelloKapt/blob/master/app/src/main/java/com/nearsoft/hellokapt/app/MainActivity.java#L13
Примечание. Если я конвертирую свой класс MainActivity.java в Kotlin (MainActivity.kt), проблемы НЕ воспроизводятся и работают нормально, но я пока не хочу этого делать из-за некоторых ограничений проекта.
Проблема с Котлином: https://youtrack.jetbrains.net/issue/KT-24591
...build/generated/source/kapt/debug/...
, это тот же каталог, который используется кинжалом и другими обработчиками аннотаций, моя Android Studio распознает сгенерированный класс, и я могу использовать класс внутри метода, но не как член класса. - person epool   schedule 23.05.2018