Fixed
Status Update
Comments
yb...@google.com <yb...@google.com>
st...@gmail.com <st...@gmail.com> #2
I believe adding @JvmSuppressWildcards to the List's type argument solves this issue.
Example:
@Query("SELECT * FROM Job WHERE service IN (:services)")
fun getActiveJobs(services: List<@JvmSuppressWildcards Service>): LiveData<List<Job>>
Example:
@Query("SELECT * FROM Job WHERE service IN (:services)")
fun getActiveJobs(services: List<@JvmSuppressWildcards Service>): LiveData<List<Job>>
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 56fadb32c627ccac51695516c2cc63743ba9dc28
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Wed Apr 03 10:17:16 2019
Fix TypeConverter detection of Collection parameters in Kotlin functions
A DAO function which takes a List<Obj> as parameter is seen by the
annotation processor as List<? extends Obj>. Therefore to properly find
a binder we need to extends the bounds of the type argument.
This is similar to aosp/878892
Bug: 122066791
Test: ./gradlew room:integration-tests:room-testapp-kotlin:cC
Change-Id: I5c89e3d6897859df7b5d18a7a5cf1775b219d659
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/dao/BooksDao.kt
https://android-review.googlesource.com/938523
https://goto.google.com/android-sha1/56fadb32c627ccac51695516c2cc63743ba9dc28
Branch: androidx-master-dev
commit 56fadb32c627ccac51695516c2cc63743ba9dc28
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Wed Apr 03 10:17:16 2019
Fix TypeConverter detection of Collection parameters in Kotlin functions
A DAO function which takes a List<Obj> as parameter is seen by the
annotation processor as List<? extends Obj>. Therefore to properly find
a binder we need to extends the bounds of the type argument.
This is similar to aosp/878892
Bug: 122066791
Test: ./gradlew room:integration-tests:room-testapp-kotlin:cC
Change-Id: I5c89e3d6897859df7b5d18a7a5cf1775b219d659
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/dao/BooksDao.kt
Description
Version used: 2.0.0
Devices/Android versions reproduced on: Compile time error
@Dao
@TypeConverters(ControllerTypeConverters::class)
interface JobDao {
...
@Query("SELECT * FROM Job WHERE service IN (:services)")
fun getActiveJobs(services: List<Service>): LiveData<List<Job>>
}
object ControllerTypeConverters {
...
@TypeConverter
@JvmStatic
fun stringToOrderStatus(data: String?): Service? {
return if (data != null) Service.valueOf(data) else null
}
@TypeConverter
@JvmStatic
fun orderStatusToString(service: Service?): String? {
return service?.name
}
}
Fails when trying to run unit tests with
D:\...\JobDao.java:17: error: Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.
java.util.List<? extends com.magentatechnology.emiratescontroller.model.Service> services);
If I replace the list with a single object, if works fine:
@Query("SELECT * FROM Job WHERE service = (:services)")
fun getActiveJobs(services: Service): LiveData<List<Job>>