Ошибка привязки данных к плагину Android Gradle 3.5.1 с типом Kotiln Generic - PullRequest
3 голосов
/ 03 октября 2019

Я сейчас пытаюсь модулировать библиотеку, чтобы что-то здесь могло происходить. После обновления с Android Gradle Plugin 3.5.0 до 3.5.1 я теперь получаю ошибку привязки данных в макете, который использует мой класс Resource.kt. Я полагаю, что класс был взят из примера браузера Google Github (по какой-то причине я вообще не могу получить последний коммит этого кода). Похоже, ошибка связана с полем общих данных T.

Resource.kt

data class Resource<out T>(val status: Status, val data: T?, val message: String?, val throwable: Throwable? = null) {
    companion object {
        fun <T> success(data: T?): Resource<T> {
            return Resource(SUCCESS, data, null)
        }

        fun <T> error(data: T?, msg: String, throwable: Throwable?): Resource<T> {
            return Resource(ERROR, data, msg, throwable)
        }

        fun <T> loading(data: T?): Resource<T> {
            return Resource(LOADING, data, null)
        }
    }
}

Layout xml:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <import type="android.view.View" />

        <import type="core.sdk.data.remote.response.Resource" />

        <import type="core.sdk.data.remote.response.Status" />

        <variable
            name="resource"
            type="Resource" />

        <variable
            name="progressText"
            type="String" />
    </data>

    <LinearLayout
        android:id="@+id/circular_progress"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:orientation="vertical"
        app:visibleGone="@{resource.data == null}">

        <androidx.core.widget.ContentLoadingProgressBar
            android:id="@+id/progress_bar"
            style="@style/Widget.AppCompat.ProgressBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:indeterminateTint="@color/ll_secondary"
            android:indeterminateTintMode="src_in"
            app:visibleGone="@{resource.status == Status.LOADING}"
            tools:ignore="UnusedAttribute" />

        <TextView
            android:id="@+id/progress_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="@{progressText}"
            android:textAppearance="?attr/textAppearanceHeadline5"
            android:textColor="@color/ll_secondary"
            android:textStyle="italic"
            app:visibleGone="@{resource.status == Status.LOADING}"
            tools:text="loading..." />
    </LinearLayout>

</layout>

Ошибка:

LoadingStateBindingImpl.java: 106: ошибка: ';'ожидается? resourceData = null;enter image description here

У меня есть инкрементная привязка данных и kapt:

android.databinding.incremental=true
kapt.incremental.apt=true

Проект полностью Kotlin, использующий Kotlin 1.3.50 с целью jvm 1.8:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

kotlinOptions {
    jvmTarget = "1.8"
}

Эта ошибка не появляется с AGP 3.5.0. Вот тот же файл с 3.5.0 и без ошибок:

enter image description here

...