Сочетание `by lazy` и` object` приводит к ошибке компилятора "не удается найти символ" - PullRequest
0 голосов
/ 06 ноября 2018

Я не могу больше скомпилировать после обновления до Kotlin 1.3.0 ( работает в 1.2.71 ) при попытке использовать by lazy и object. Кажется, это происходит только в моем проекте. Демонстрационный проект работает нормально.

Я хочу добавить интерфейс к данному классу и лениво загрузить его значения.

Я создал небольшой пример, который не работает в моем проекте , но отлично работает в любом другом :

open class Foo

interface Bar {
    val lazyLoadedString : String
}

class Test {
    private val foo by lazy {
        object : Foo(), Bar {
            override val lazyLoadedString  = "Demo"
        }
    }
}

Как только я объединю object и by lazy, он больше не может скомпилироваться и выдает следующую ошибку. Использование каждого по отдельности работает.

Test.java: 9: ошибка: не удается найти символ
закрытый финал my.package.Test $ foo $ 2 $ 1 getFoo ()

символ: класс Test $ foo $ 2 $ 1
Расположение: пакет my.package

Если присмотреться, вы увидите, что сгенерированный файл Java показывает эту ошибку, а не код kotlin.

Есть идеи по этому поводу?

1 Ответ

0 голосов
/ 07 ноября 2018

Похоже, что Kapt не работает в Kotlin 1.3.0 для этого конкретного вида кода.

В приведенном выше коде именно процессор аннотаций, зарегистрированный Realm, вызвал его, но любой другой процессор аннотаций мог привести к той же ошибке.

Проблема отслеживается здесь: https://youtrack.jetbrains.net/issue/KT-28053

...