Resolving issues with LiveData and Maybe to ultimately turn on Kotlin codegen in the test app.

Both LiveData and Maybe allow null values, but due to Kotlin's restraints about nulls, this was not translating through. This CL provides a workaround to allow nullables for just these types.

Test: ./gradlew :room:integration-tests:room-testapp-kotlin:connectedWithKspGenKotlinDebugAndroidTest
Change-Id: Id0080f0b20953f8611089373ab55253fbd86888a
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/ObservableQueryResultBinderProvider.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/ObservableQueryResultBinderProvider.kt
index 3b09a3d..5dacce9 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/ObservableQueryResultBinderProvider.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/ObservableQueryResultBinderProvider.kt
@@ -40,6 +40,10 @@
         query: ParsedQuery,
         extras: TypeAdapterExtras
     ): QueryResultBinder {
+        extras.putData(
+            OriginalTypeArg::class,
+            OriginalTypeArg(declared)
+        )
         val typeArg = extractTypeArg(declared)
         val adapter = context.typeAdapterStore.findQueryResultAdapter(typeArg, query, extras)
         val tableNames = (
@@ -55,4 +59,6 @@
             tableNames = tableNames
         )
     }
+
+    data class OriginalTypeArg(val original: XType)
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
index 8d6dbe0..329e023 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
@@ -482,7 +482,12 @@
 
         // TODO: (b/192068912) Refactor the following since this if-else cascade has gotten large
         if (typeMirror.isArray() && typeMirror.componentType.isNotByte()) {
-            checkTypeNullability(typeMirror, typeMirror.componentType, "Array")
+            checkTypeNullability(
+                typeMirror,
+                extras,
+                "Array",
+                arrayComponentType = typeMirror.componentType
+            )
             val rowAdapter =
                 findRowAdapter(typeMirror.componentType, query) ?: return null
             return ArrayQueryResultAdapter(typeMirror, rowAdapter)
@@ -490,9 +495,13 @@
             val rowAdapter = findRowAdapter(typeMirror, query) ?: return null
             return SingleItemQueryResultAdapter(rowAdapter)
         } else if (typeMirror.rawType.asTypeName() == GuavaTypeNames.OPTIONAL) {
-            checkTypeNullability(typeMirror, typeMirror.typeArguments.first(), "Optional")
+            checkTypeNullability(
+                typeMirror,
+                extras,
+                "Optional"
+            )
             // Handle Guava Optional by unpacking its generic type argument and adapting that.
-            // The Optional adapter will reappend the Optional type.
+            // The Optional adapter will re-append the Optional type.
             val typeArg = typeMirror.typeArguments.first()
             // use nullable when finding row adapter as non-null adapters might return
             // default values
@@ -502,7 +511,11 @@
                 resultAdapter = SingleItemQueryResultAdapter(rowAdapter)
             )
         } else if (typeMirror.rawType.asTypeName() == CommonTypeNames.OPTIONAL) {
-            checkTypeNullability(typeMirror, typeMirror.typeArguments.first(), "Optional")
+            checkTypeNullability(
+                typeMirror,
+                extras,
+                "Optional"
+            )
 
             // Handle java.util.Optional similarly.
             val typeArg = typeMirror.typeArguments.first()
@@ -514,7 +527,10 @@
                 resultAdapter = SingleItemQueryResultAdapter(rowAdapter)
             )
         } else if (typeMirror.isTypeOf(ImmutableList::class)) {
-            checkTypeNullability(typeMirror, typeMirror.typeArguments.first())
+            checkTypeNullability(
+                typeMirror,
+                extras
+            )
 
             val typeArg = typeMirror.typeArguments.first().extendsBoundOrSelf()
             val rowAdapter = findRowAdapter(typeArg, query) ?: return null
@@ -523,7 +539,10 @@
                 rowAdapter = rowAdapter
             )
         } else if (typeMirror.isTypeOf(java.util.List::class)) {
-            checkTypeNullability(typeMirror, typeMirror.typeArguments.first())
+            checkTypeNullability(
+                typeMirror,
+                extras
+            )
 
             val typeArg = typeMirror.typeArguments.first().extendsBoundOrSelf()
             val rowAdapter = findRowAdapter(typeArg, query) ?: return null
@@ -534,7 +553,7 @@
         } else if (typeMirror.isTypeOf(ImmutableMap::class)) {
             val keyTypeArg = typeMirror.typeArguments[0].extendsBoundOrSelf()
             val valueTypeArg = typeMirror.typeArguments[1].extendsBoundOrSelf()
-            checkTypeNullability(typeMirror, keyTypeArg)
+            checkTypeNullability(typeMirror, extras)
 
             // Create a type mirror for a regular Map in order to use MapQueryResultAdapter. This
             // avoids code duplication as Immutable Map can be initialized by creating an immutable
@@ -559,7 +578,7 @@
         ) {
             val keyTypeArg = typeMirror.typeArguments[0].extendsBoundOrSelf()
             val valueTypeArg = typeMirror.typeArguments[1].extendsBoundOrSelf()
-            checkTypeNullability(typeMirror, keyTypeArg)
+            checkTypeNullability(typeMirror, extras)
 
             if (valueTypeArg.typeElement == null) {
                 context.logger.e(
@@ -629,7 +648,7 @@
                 else ->
                     typeMirror.typeArguments[0].extendsBoundOrSelf()
             }
-            checkTypeNullability(typeMirror, keyTypeArg)
+            checkTypeNullability(typeMirror, extras)
 
             val mapValueTypeArg = if (mapType.isSparseArray()) {
                 typeMirror.typeArguments[0].extendsBoundOrSelf()
@@ -737,31 +756,49 @@
     }
 
     private fun checkTypeNullability(
-        collectionType: XType,
-        typeArg: XType,
-        typeKeyword: String = "Collection"
+        searchingType: XType,
+        extras: TypeAdapterExtras,
+        typeKeyword: String = "Collection",
+        arrayComponentType: XType? = null
     ) {
         if (context.codeLanguage != CodeLanguage.KOTLIN) {
             return
         }
 
+        val collectionType: XType = extras.getData(
+            ObservableQueryResultBinderProvider.OriginalTypeArg::class
+        )?.original ?: searchingType
+
         if (collectionType.nullability != XNullability.NONNULL) {
             context.logger.w(
                 Warning.UNNECESSARY_NULLABILITY_IN_DAO_RETURN_TYPE,
                 ProcessorErrors.nullableCollectionOrArrayReturnTypeInDaoMethod(
-                    collectionType.asTypeName().toString(context.codeLanguage),
+                    searchingType.asTypeName().toString(context.codeLanguage),
                     typeKeyword
                 )
             )
         }
 
-        if (typeArg.nullability != XNullability.NONNULL) {
+        // Since Array has typeArg in the componentType and not typeArguments, need a special check.
+        if (arrayComponentType != null && arrayComponentType.nullability != XNullability.NONNULL) {
             context.logger.w(
                 Warning.UNNECESSARY_NULLABILITY_IN_DAO_RETURN_TYPE,
                 ProcessorErrors.nullableComponentInDaoMethodReturnType(
-                    collectionType.asTypeName().toString(context.codeLanguage)
+                    searchingType.asTypeName().toString(context.codeLanguage)
                 )
             )
+            return
+        }
+
+        collectionType.typeArguments.forEach { typeArg ->
+            if (typeArg.nullability != XNullability.NONNULL) {
+                context.logger.w(
+                    Warning.UNNECESSARY_NULLABILITY_IN_DAO_RETURN_TYPE,
+                    ProcessorErrors.nullableComponentInDaoMethodReturnType(
+                        searchingType.asTypeName().toString(context.codeLanguage)
+                    )
+                )
+            }
         }
     }
 
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt
index b304272..042b24a 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt
@@ -31,7 +31,8 @@
         context.processingEnv.findType(LifecyclesTypeNames.LIVE_DATA.canonicalName)?.rawType
     }
 
-    override fun extractTypeArg(declared: XType): XType = declared.typeArguments.first()
+    override fun extractTypeArg(declared: XType): XType =
+        declared.typeArguments.first().makeNullable()
 
     override fun create(
         typeArg: XType,
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/RxCallableQueryResultBinderProvider.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/RxCallableQueryResultBinderProvider.kt
index 01bc3de..f2c8970 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/RxCallableQueryResultBinderProvider.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/RxCallableQueryResultBinderProvider.kt
@@ -19,6 +19,7 @@
 import androidx.room.compiler.processing.XType
 import androidx.room.parser.ParsedQuery
 import androidx.room.processor.Context
+import androidx.room.solver.ObservableQueryResultBinderProvider
 import androidx.room.solver.QueryResultBinderProvider
 import androidx.room.solver.RxType
 import androidx.room.solver.TypeAdapterExtras
@@ -34,7 +35,12 @@
         query: ParsedQuery,
         extras: TypeAdapterExtras
     ): QueryResultBinder {
-        val typeArg = declared.typeArguments.first()
+        // Add info that the type mirror is hardcoded into a Kotlin Nullable for Callable
+        extras.putData(
+            ObservableQueryResultBinderProvider.OriginalTypeArg::class,
+            ObservableQueryResultBinderProvider.OriginalTypeArg(declared)
+        )
+        val typeArg = extractTypeArg(declared)
         val adapter = context.typeAdapterStore.findQueryResultAdapter(typeArg, query, extras)
         return RxCallableQueryResultBinder(rxType, typeArg, adapter)
     }
@@ -46,6 +52,15 @@
         return declared.rawType.asTypeName() == rxType.className
     }
 
+    private fun extractTypeArg(declared: XType): XType {
+        // Maybe is always expected to be built with a Callable containing a nullable type argument
+        return if (rxType.canBeNull || rxType.isSingle()) {
+            declared.typeArguments.first().makeNullable()
+        } else {
+            declared.typeArguments.first()
+        }
+    }
+
     companion object {
         fun getAll(context: Context) = listOf(
             RxType.RX2_SINGLE,
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/prepared/binderprovider/RxPreparedQueryResultBinderProvider.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/prepared/binderprovider/RxPreparedQueryResultBinderProvider.kt
index 07dbd7e..24ab2bb 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/prepared/binderprovider/RxPreparedQueryResultBinderProvider.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/prepared/binderprovider/RxPreparedQueryResultBinderProvider.kt
@@ -57,11 +57,11 @@
 
     companion object {
         fun getAll(context: Context) = listOf(
-            RxPreparedQueryResultBinderProvider(context, RxType.RX2_SINGLE),
-            RxPreparedQueryResultBinderProvider(context, RxType.RX2_MAYBE),
+            RxSingleOrMaybePreparedQueryResultBinderProvider(context, RxType.RX2_SINGLE),
+            RxSingleOrMaybePreparedQueryResultBinderProvider(context, RxType.RX2_MAYBE),
             RxCompletablePreparedQueryResultBinderProvider(context, RxType.RX2_COMPLETABLE),
-            RxPreparedQueryResultBinderProvider(context, RxType.RX3_SINGLE),
-            RxPreparedQueryResultBinderProvider(context, RxType.RX3_MAYBE),
+            RxSingleOrMaybePreparedQueryResultBinderProvider(context, RxType.RX3_SINGLE),
+            RxSingleOrMaybePreparedQueryResultBinderProvider(context, RxType.RX3_MAYBE),
             RxCompletablePreparedQueryResultBinderProvider(context, RxType.RX3_COMPLETABLE)
         )
     }
@@ -89,4 +89,16 @@
      */
     override fun extractTypeArg(declared: XType): XType =
         context.COMMON_TYPES.VOID.makeNullable()
+}
+
+private class RxSingleOrMaybePreparedQueryResultBinderProvider(
+    context: Context,
+    rxType: RxType
+) : RxPreparedQueryResultBinderProvider(context, rxType) {
+
+    /**
+     * Since Maybe can have null values, the Callable returned must allow for null values.
+     */
+    override fun extractTypeArg(declared: XType): XType =
+        declared.typeArguments.first().makeNullable()
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/RxCallableQueryResultBinder.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/RxCallableQueryResultBinder.kt
index 77662f5..3ef035b 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/RxCallableQueryResultBinder.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/RxCallableQueryResultBinder.kt
@@ -106,8 +106,11 @@
         beginControlFlow("try").apply {
             adapter?.convert(outVar, cursorVar, adapterScope)
             add(adapterScope.generate())
-            if ((language == CodeLanguage.JAVA && !rxType.canBeNull) ||
-                returnType.nullability == XNullability.NULLABLE
+            if (
+                !rxType.canBeNull &&
+                (language == CodeLanguage.JAVA ||
+                    (language == CodeLanguage.KOTLIN &&
+                        returnType.nullability == XNullability.NULLABLE))
             ) {
                 beginControlFlow("if (%L == null)", outVar).apply {
                     addStatement(
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableDeleteOrUpdateMethodBinderProvider.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableDeleteOrUpdateMethodBinderProvider.kt
index efea453..d7fa428 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableDeleteOrUpdateMethodBinderProvider.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableDeleteOrUpdateMethodBinderProvider.kt
@@ -53,11 +53,11 @@
 
     companion object {
         fun getAll(context: Context) = listOf(
-            RxCallableDeleteOrUpdateMethodBinderProvider(context, RxType.RX2_SINGLE),
-            RxCallableDeleteOrUpdateMethodBinderProvider(context, RxType.RX2_MAYBE),
+            RxSingleOrMaybeDeleteOrUpdateMethodBinderProvider(context, RxType.RX2_SINGLE),
+            RxSingleOrMaybeDeleteOrUpdateMethodBinderProvider(context, RxType.RX2_MAYBE),
             RxCompletableDeleteOrUpdateMethodBinderProvider(context, RxType.RX2_COMPLETABLE),
-            RxCallableDeleteOrUpdateMethodBinderProvider(context, RxType.RX3_SINGLE),
-            RxCallableDeleteOrUpdateMethodBinderProvider(context, RxType.RX3_MAYBE),
+            RxSingleOrMaybeDeleteOrUpdateMethodBinderProvider(context, RxType.RX3_SINGLE),
+            RxSingleOrMaybeDeleteOrUpdateMethodBinderProvider(context, RxType.RX3_MAYBE),
             RxCompletableDeleteOrUpdateMethodBinderProvider(context, RxType.RX3_COMPLETABLE)
         )
     }
@@ -88,3 +88,15 @@
         return declared.rawType.isAssignableFrom(completableType!!)
     }
 }
+
+private class RxSingleOrMaybeDeleteOrUpdateMethodBinderProvider(
+    context: Context,
+    rxType: RxType
+) : RxCallableDeleteOrUpdateMethodBinderProvider(context, rxType) {
+
+    /**
+     * Since Maybe can have null values, the Callable returned must allow for null values.
+     */
+    override fun extractTypeArg(declared: XType): XType =
+        declared.typeArguments.first().makeNullable()
+}
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableInsertMethodBinderProvider.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableInsertMethodBinderProvider.kt
index f0f65cd..2c157dc 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableInsertMethodBinderProvider.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableInsertMethodBinderProvider.kt
@@ -58,11 +58,11 @@
 
     companion object {
         fun getAll(context: Context) = listOf(
-            RxCallableInsertMethodBinderProvider(context, RxType.RX2_SINGLE),
-            RxCallableInsertMethodBinderProvider(context, RxType.RX2_MAYBE),
+            RxSingleOrMaybeInsertMethodBinderProvider(context, RxType.RX2_SINGLE),
+            RxSingleOrMaybeInsertMethodBinderProvider(context, RxType.RX2_MAYBE),
             RxCompletableInsertMethodBinderProvider(context, RxType.RX2_COMPLETABLE),
-            RxCallableInsertMethodBinderProvider(context, RxType.RX3_SINGLE),
-            RxCallableInsertMethodBinderProvider(context, RxType.RX3_MAYBE),
+            RxSingleOrMaybeInsertMethodBinderProvider(context, RxType.RX3_SINGLE),
+            RxSingleOrMaybeInsertMethodBinderProvider(context, RxType.RX3_MAYBE),
             RxCompletableInsertMethodBinderProvider(context, RxType.RX3_COMPLETABLE)
         )
     }
@@ -93,3 +93,15 @@
         return declared.rawType.isAssignableFrom(completableType!!)
     }
 }
+
+private class RxSingleOrMaybeInsertMethodBinderProvider(
+    context: Context,
+    rxType: RxType
+) : RxCallableInsertMethodBinderProvider(context, rxType) {
+
+    /**
+     * Since Maybe can have null values, the Callable returned must allow for null values.
+     */
+    override fun extractTypeArg(declared: XType): XType =
+        declared.typeArguments.first().makeNullable()
+}
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableUpsertMethodBinderProvider.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableUpsertMethodBinderProvider.kt
index b23fd82..d6704f3 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableUpsertMethodBinderProvider.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/shortcut/binderprovider/RxCallableUpsertMethodBinderProvider.kt
@@ -58,11 +58,11 @@
 
     companion object {
         fun getAll(context: Context) = listOf(
-            RxCallableUpsertMethodBinderProvider(context, RxType.RX2_SINGLE),
-            RxCallableUpsertMethodBinderProvider(context, RxType.RX2_MAYBE),
+            RxSingleMaybeUpsertMethodBinderProvider(context, RxType.RX2_SINGLE),
+            RxSingleMaybeUpsertMethodBinderProvider(context, RxType.RX2_MAYBE),
             RxCompletableUpsertMethodBinderProvider(context, RxType.RX2_COMPLETABLE),
-            RxCallableUpsertMethodBinderProvider(context, RxType.RX3_SINGLE),
-            RxCallableUpsertMethodBinderProvider(context, RxType.RX3_MAYBE),
+            RxSingleMaybeUpsertMethodBinderProvider(context, RxType.RX3_SINGLE),
+            RxSingleMaybeUpsertMethodBinderProvider(context, RxType.RX3_MAYBE),
             RxCompletableUpsertMethodBinderProvider(context, RxType.RX3_COMPLETABLE)
         )
     }
@@ -93,3 +93,15 @@
         return declared.rawType.isAssignableFrom(completableType!!)
     }
 }
+
+private class RxSingleMaybeUpsertMethodBinderProvider(
+    context: Context,
+    rxType: RxType
+) : RxCallableUpsertMethodBinderProvider(context, rxType) {
+
+    /**
+     * Since Maybe can have null values, the Callable returned must allow for null values.
+     */
+    override fun extractTypeArg(declared: XType): XType =
+        declared.typeArguments.first().makeNullable()
+}
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/writer/TypeWriter.kt b/room/room-compiler/src/main/kotlin/androidx/room/writer/TypeWriter.kt
index 2e46c6e..b18a806 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/writer/TypeWriter.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/writer/TypeWriter.kt
@@ -88,7 +88,12 @@
             kotlinTypeBuilder = {
                 addAnnotation(
                     com.squareup.kotlinpoet.AnnotationSpec.builder(Suppress::class)
-                        .addMember("names = [%S, %S]", "UNCHECKED_CAST", "DEPRECATION")
+                        .addMember(
+                            "names = [%S, %S, %S]",
+                            "UNCHECKED_CAST",
+                            "DEPRECATION",
+                            "REDUNDANT_PROJECTION"
+                        )
                         .build()
                 )
             }
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
index 51f7c99..c3d1f05 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
@@ -1358,7 +1358,8 @@
             COMMON.RX2_MAYBE, COMMON.RX2_SINGLE, COMMON.RX2_FLOWABLE, COMMON.RX2_OBSERVABLE,
             COMMON.RX3_COMPLETABLE, COMMON.RX3_MAYBE, COMMON.RX3_SINGLE, COMMON.RX3_FLOWABLE,
             COMMON.RX3_OBSERVABLE, COMMON.LISTENABLE_FUTURE, COMMON.LIVE_DATA,
-            COMMON.COMPUTABLE_LIVE_DATA, COMMON.PUBLISHER, COMMON.FLOW, COMMON.GUAVA_ROOM
+            COMMON.COMPUTABLE_LIVE_DATA, COMMON.PUBLISHER, COMMON.FLOW, COMMON.GUAVA_ROOM,
+            COMMON.RX2_ROOM, COMMON.RX2_EMPTY_RESULT_SET_EXCEPTION
         )
 
         runProcessorTest(
@@ -1824,4 +1825,32 @@
             }
         }
     }
+
+    @Test
+    fun maybe() {
+        singleQueryMethodKotlin<ReadQueryMethod>(
+            """
+                @Query("SELECT * FROM book WHERE bookId = :bookId")
+                abstract fun getBookMaybe(bookId: String): io.reactivex.Maybe<Book>
+                """
+        ) { _, invocation ->
+            invocation.assertCompilationResult {
+                hasErrorCount(0)
+            }
+        }
+    }
+
+    @Test
+    fun single() {
+        singleQueryMethodKotlin<ReadQueryMethod>(
+            """
+                @Query("SELECT * FROM book WHERE bookId = :bookId")
+                abstract fun getBookSingle(bookId: String): io.reactivex.Single<Book>
+                """
+        ) { _, invocation ->
+            invocation.assertCompilationResult {
+                hasErrorCount(0)
+            }
+        }
+    }
 }
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/writer/DaoKotlinCodeGenTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/writer/DaoKotlinCodeGenTest.kt
index f190199..15f4065 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/writer/DaoKotlinCodeGenTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/writer/DaoKotlinCodeGenTest.kt
@@ -1413,9 +1413,6 @@
                 @Query("SELECT * FROM Song JOIN Artist ON Song.artistKey = Artist.artistId")
                 fun getSongsWithArtist(): Map<Song, Artist>
 
-                @Query("SELECT * FROM Song JOIN Artist ON Song.artistKey = Artist.artistId")
-                fun getSongsWithNullableArtist(): Map<Song, Artist?>
-
                 @Query("SELECT * FROM Artist JOIN Song ON Artist.artistId = Song.artistKey")
                 fun getArtistWithSongs(): Map<Artist, List<Song>>
 
diff --git a/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/AutoMigrationWithProvidedSpec.kt b/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/AutoMigrationWithProvidedSpec.kt
index 0aa6850..647be54 100644
--- a/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/AutoMigrationWithProvidedSpec.kt
+++ b/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/AutoMigrationWithProvidedSpec.kt
@@ -8,7 +8,7 @@
 import kotlin.Unit
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 internal class MyDatabase_AutoMigration_1_2_Impl : Migration {
     private val callback: AutoMigrationSpec
 
diff --git a/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/ValidAutoMigrationWithDefault.kt b/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/ValidAutoMigrationWithDefault.kt
index 778f927..6b4d52e6 100644
--- a/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/ValidAutoMigrationWithDefault.kt
+++ b/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/ValidAutoMigrationWithDefault.kt
@@ -8,7 +8,7 @@
 import kotlin.Unit
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 internal class MyDatabase_AutoMigration_1_2_Impl : Migration {
     private val callback: AutoMigrationSpec = ValidAutoMigrationWithDefault()
 
diff --git a/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/ValidAutoMigrationWithoutDefault.kt b/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/ValidAutoMigrationWithoutDefault.kt
index e253bb2..93eab8f 100644
--- a/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/ValidAutoMigrationWithoutDefault.kt
+++ b/room/room-compiler/src/test/test-data/autoMigrationWriter/output/kotlin/ValidAutoMigrationWithoutDefault.kt
@@ -8,7 +8,7 @@
 import kotlin.Unit
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 internal class MyDatabase_AutoMigration_1_2_Impl : Migration {
     private val callback: AutoMigrationSpec = ValidAutoMigrationWithoutDefault()
 
diff --git a/room/room-compiler/src/test/test-data/common/input/Rx2Room.java b/room/room-compiler/src/test/test-data/common/input/Rx2Room.java
index d27c5f7..9e06920 100644
--- a/room/room-compiler/src/test/test-data/common/input/Rx2Room.java
+++ b/room/room-compiler/src/test/test-data/common/input/Rx2Room.java
@@ -33,7 +33,7 @@
         return null;
     }
 
-    public static <T> Single<T> createSingle(final Callable<T> callable) {
+    public static <T> Single<T> createSingle(final Callable<? extends T> callable) {
         return null;
     }
 }
diff --git a/room/room-compiler/src/test/test-data/common/input/Rx3Room.java b/room/room-compiler/src/test/test-data/common/input/Rx3Room.java
index 5536046..518609d 100644
--- a/room/room-compiler/src/test/test-data/common/input/Rx3Room.java
+++ b/room/room-compiler/src/test/test-data/common/input/Rx3Room.java
@@ -34,7 +34,7 @@
         return null;
     }
 
-    public static <T> Single<T> createSingle(final Callable<T> callable) {
+    public static <T> Single<T> createSingle(final Callable<? extends T> callable) {
         return null;
     }
 }
diff --git a/room/room-compiler/src/test/test-data/common/input/rxjava2/Maybe.java b/room/room-compiler/src/test/test-data/common/input/rxjava2/Maybe.java
index 992901c..0c8e31e 100644
--- a/room/room-compiler/src/test/test-data/common/input/rxjava2/Maybe.java
+++ b/room/room-compiler/src/test/test-data/common/input/rxjava2/Maybe.java
@@ -19,5 +19,5 @@
 import java.util.concurrent.Callable;
 
 public abstract class Maybe<T> {
-    public static <T> Maybe<T> fromCallable(Callable<T> callable) {return null;}
+    public static <T> Maybe<T> fromCallable(Callable<? extends T> callable) {return null;}
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/common/input/rxjava2/Single.java b/room/room-compiler/src/test/test-data/common/input/rxjava2/Single.java
index 56fa961..413ba40 100644
--- a/room/room-compiler/src/test/test-data/common/input/rxjava2/Single.java
+++ b/room/room-compiler/src/test/test-data/common/input/rxjava2/Single.java
@@ -19,5 +19,5 @@
 import java.util.concurrent.Callable;
 
 public abstract class Single<T> {
-    public static <T> Single<T> fromCallable(Callable<T> callable) {return null;}
+    public static <T> Single<T> fromCallable(Callable<? extends T> callable) {return null;}
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/common/input/rxjava3/Maybe.java b/room/room-compiler/src/test/test-data/common/input/rxjava3/Maybe.java
index 1753071..bac83a8 100644
--- a/room/room-compiler/src/test/test-data/common/input/rxjava3/Maybe.java
+++ b/room/room-compiler/src/test/test-data/common/input/rxjava3/Maybe.java
@@ -19,5 +19,5 @@
 import java.util.concurrent.Callable;
 
 public abstract class Maybe<T> {
-    public static <T> Maybe<T> fromCallable(Callable<T> callable) {return null;}
+    public static <T> Maybe<T> fromCallable(Callable<? extends T> callable) {return null;}
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/common/input/rxjava3/Single.java b/room/room-compiler/src/test/test-data/common/input/rxjava3/Single.java
index abc6a89..fe9783f 100644
--- a/room/room-compiler/src/test/test-data/common/input/rxjava3/Single.java
+++ b/room/room-compiler/src/test/test-data/common/input/rxjava3/Single.java
@@ -19,5 +19,5 @@
 import java.util.concurrent.Callable;
 
 public abstract class Single<T> {
-    public static <T> Single<T> fromCallable(Callable<T> callable) {return null;}
+    public static <T> Single<T> fromCallable(Callable<? extends T> callable) {return null;}
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/javac/ComplexDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/javac/ComplexDao.java
index fab796e..c492afa 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/javac/ComplexDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/javac/ComplexDao.java
@@ -3,6 +3,7 @@
 import android.database.Cursor;
 import android.os.CancellationSignal;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.lifecycle.LiveData;
 import androidx.room.RoomDatabase;
 import androidx.room.RoomSQLiteQuery;
@@ -400,6 +401,7 @@
         _statement.bindLong(_argIndex, id);
         return __db.getInvalidationTracker().createLiveData(new String[] {"user"}, false, new Callable<User>() {
             @Override
+            @Nullable
             public User call() throws Exception {
                 final Cursor _cursor = DBUtil.query(__db, _statement, false, null);
                 try {
@@ -461,6 +463,7 @@
         }
         return __db.getInvalidationTracker().createLiveData(new String[] {"user"}, false, new Callable<List<User>>() {
             @Override
+            @Nullable
             public List<User> call() throws Exception {
                 final Cursor _cursor = DBUtil.query(__db, _statement, false, null);
                 try {
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/javac/DeletionDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/javac/DeletionDao.java
index 473a475..58b7677 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/javac/DeletionDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/javac/DeletionDao.java
@@ -26,386 +26,390 @@
 @Generated("androidx.room.RoomProcessor")
 @SuppressWarnings({"unchecked", "deprecation"})
 public final class DeletionDao_Impl implements DeletionDao {
-  private final RoomDatabase __db;
+    private final RoomDatabase __db;
 
-  private final EntityDeletionOrUpdateAdapter<User> __deletionAdapterOfUser;
+    private final EntityDeletionOrUpdateAdapter<User> __deletionAdapterOfUser;
 
-  private final EntityDeletionOrUpdateAdapter<MultiPKeyEntity> __deletionAdapterOfMultiPKeyEntity;
+    private final EntityDeletionOrUpdateAdapter<MultiPKeyEntity> __deletionAdapterOfMultiPKeyEntity;
 
-  private final EntityDeletionOrUpdateAdapter<Book> __deletionAdapterOfBook;
+    private final EntityDeletionOrUpdateAdapter<Book> __deletionAdapterOfBook;
 
-  private final SharedSQLiteStatement __preparedStmtOfDeleteByUid;
+    private final SharedSQLiteStatement __preparedStmtOfDeleteByUid;
 
-  private final SharedSQLiteStatement __preparedStmtOfDeleteEverything;
+    private final SharedSQLiteStatement __preparedStmtOfDeleteEverything;
 
-  public DeletionDao_Impl(@NonNull final RoomDatabase __db) {
-    this.__db = __db;
-    this.__deletionAdapterOfUser = new EntityDeletionOrUpdateAdapter<User>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "DELETE FROM `User` WHERE `uid` = ?";
-      }
+    public DeletionDao_Impl(@NonNull final RoomDatabase __db) {
+        this.__db = __db;
+        this.__deletionAdapterOfUser = new EntityDeletionOrUpdateAdapter<User>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "DELETE FROM `User` WHERE `uid` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement, final User entity) {
-        statement.bindLong(1, entity.uid);
-      }
-    };
-    this.__deletionAdapterOfMultiPKeyEntity = new EntityDeletionOrUpdateAdapter<MultiPKeyEntity>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "DELETE FROM `MultiPKeyEntity` WHERE `name` = ? AND `lastName` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement, final User entity) {
+                statement.bindLong(1, entity.uid);
+            }
+        };
+        this.__deletionAdapterOfMultiPKeyEntity = new EntityDeletionOrUpdateAdapter<MultiPKeyEntity>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "DELETE FROM `MultiPKeyEntity` WHERE `name` = ? AND `lastName` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement,
-              final MultiPKeyEntity entity) {
-        if (entity.name == null) {
-          statement.bindNull(1);
-        } else {
-          statement.bindString(1, entity.name);
-        }
-        if (entity.lastName == null) {
-          statement.bindNull(2);
-        } else {
-          statement.bindString(2, entity.lastName);
-        }
-      }
-    };
-    this.__deletionAdapterOfBook = new EntityDeletionOrUpdateAdapter<Book>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "DELETE FROM `Book` WHERE `bookId` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement,
+                    final MultiPKeyEntity entity) {
+                if (entity.name == null) {
+                    statement.bindNull(1);
+                } else {
+                    statement.bindString(1, entity.name);
+                }
+                if (entity.lastName == null) {
+                    statement.bindNull(2);
+                } else {
+                    statement.bindString(2, entity.lastName);
+                }
+            }
+        };
+        this.__deletionAdapterOfBook = new EntityDeletionOrUpdateAdapter<Book>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "DELETE FROM `Book` WHERE `bookId` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement, final Book entity) {
-        statement.bindLong(1, entity.bookId);
-      }
-    };
-    this.__preparedStmtOfDeleteByUid = new SharedSQLiteStatement(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        final String _query = "DELETE FROM user where uid = ?";
-        return _query;
-      }
-    };
-    this.__preparedStmtOfDeleteEverything = new SharedSQLiteStatement(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        final String _query = "DELETE FROM user";
-        return _query;
-      }
-    };
-  }
-
-  @Override
-  public void deleteUser(final User user) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __deletionAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement, final Book entity) {
+                statement.bindLong(1, entity.bookId);
+            }
+        };
+        this.__preparedStmtOfDeleteByUid = new SharedSQLiteStatement(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                final String _query = "DELETE FROM user where uid = ?";
+                return _query;
+            }
+        };
+        this.__preparedStmtOfDeleteEverything = new SharedSQLiteStatement(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                final String _query = "DELETE FROM user";
+                return _query;
+            }
+        };
     }
-  }
 
-  @Override
-  public void deleteUsers(final User user1, final List<User> others) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __deletionAdapterOfUser.handle(user1);
-      __deletionAdapterOfUser.handleMultiple(others);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public void deleteArrayOfUsers(final User[] users) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __deletionAdapterOfUser.handleMultiple(users);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public Integer deleteUserAndReturnCountObject(final User user) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int deleteUserAndReturnCount(final User user) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int deleteUserAndReturnCount(final User user1, final List<User> others) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfUser.handle(user1);
-      _total += __deletionAdapterOfUser.handleMultiple(others);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int deleteUserAndReturnCount(final User[] users) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfUser.handleMultiple(users);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public Completable deleteUserCompletable(final User user) {
-    return Completable.fromCallable(new Callable<Void>() {
-      @Override
-      @Nullable
-      public Void call() throws Exception {
+    @Override
+    public void deleteUser(final User user) {
+        __db.assertNotSuspendingTransaction();
         __db.beginTransaction();
         try {
-          __deletionAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return null;
+            __deletionAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Single<Integer> deleteUserSingle(final User user) {
-    return Single.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
+    @Override
+    public void deleteUsers(final User user1, final List<User> others) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __deletionAdapterOfUser.handle(user1);
+            __deletionAdapterOfUser.handleMultiple(others);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void deleteArrayOfUsers(final User[] users) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __deletionAdapterOfUser.handleMultiple(users);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public Integer deleteUserAndReturnCountObject(final User user) {
+        __db.assertNotSuspendingTransaction();
         int _total = 0;
         __db.beginTransaction();
         try {
-          _total += __deletionAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return _total;
+            _total += __deletionAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
+            return _total;
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Maybe<Integer> deleteUserMaybe(final User user) {
-    return Maybe.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
+    @Override
+    public int deleteUserAndReturnCount(final User user) {
+        __db.assertNotSuspendingTransaction();
         int _total = 0;
         __db.beginTransaction();
         try {
-          _total += __deletionAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return _total;
+            _total += __deletionAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
+            return _total;
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
-
-  @Override
-  public int multiPKey(final MultiPKeyEntity entity) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfMultiPKeyEntity.handle(entity);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
     }
-  }
 
-  @Override
-  public void deleteUserAndBook(final User user, final Book book) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __deletionAdapterOfUser.handle(user);
-      __deletionAdapterOfBook.handle(book);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+    @Override
+    public int deleteUserAndReturnCount(final User user1, final List<User> others) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __deletionAdapterOfUser.handle(user1);
+            _total += __deletionAdapterOfUser.handleMultiple(others);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
     }
-  }
 
-  @Override
-  public int deleteByUid(final int uid) {
-    __db.assertNotSuspendingTransaction();
-    final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
-    int _argIndex = 1;
-    _stmt.bindLong(_argIndex, uid);
-    __db.beginTransaction();
-    try {
-      final int _result = _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-      return _result;
-    } finally {
-      __db.endTransaction();
-      __preparedStmtOfDeleteByUid.release(_stmt);
+    @Override
+    public int deleteUserAndReturnCount(final User[] users) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __deletionAdapterOfUser.handleMultiple(users);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
     }
-  }
 
-  @Override
-  public Completable deleteByUidCompletable(final int uid) {
-    return Completable.fromCallable(new Callable<Void>() {
-      @Override
-      @Nullable
-      public Void call() throws Exception {
+    @Override
+    public Completable deleteUserCompletable(final User user) {
+        return Completable.fromCallable(new Callable<Void>() {
+            @Override
+            @Nullable
+            public Void call() throws Exception {
+                __db.beginTransaction();
+                try {
+                    __deletionAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return null;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
+    }
+
+    @Override
+    public Single<Integer> deleteUserSingle(final User user) {
+        return Single.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                int _total = 0;
+                __db.beginTransaction();
+                try {
+                    _total += __deletionAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return _total;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
+    }
+
+    @Override
+    public Maybe<Integer> deleteUserMaybe(final User user) {
+        return Maybe.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                int _total = 0;
+                __db.beginTransaction();
+                try {
+                    _total += __deletionAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return _total;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
+    }
+
+    @Override
+    public int multiPKey(final MultiPKeyEntity entity) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __deletionAdapterOfMultiPKeyEntity.handle(entity);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void deleteUserAndBook(final User user, final Book book) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __deletionAdapterOfUser.handle(user);
+            __deletionAdapterOfBook.handle(book);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public int deleteByUid(final int uid) {
+        __db.assertNotSuspendingTransaction();
         final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
         int _argIndex = 1;
         _stmt.bindLong(_argIndex, uid);
         __db.beginTransaction();
         try {
-          _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return null;
+            final int _result = _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
+            return _result;
         } finally {
-          __db.endTransaction();
-          __preparedStmtOfDeleteByUid.release(_stmt);
+            __db.endTransaction();
+            __preparedStmtOfDeleteByUid.release(_stmt);
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Single<Integer> deleteByUidSingle(final int uid) {
-    return Single.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
-        final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
-        int _argIndex = 1;
-        _stmt.bindLong(_argIndex, uid);
+    @Override
+    public Completable deleteByUidCompletable(final int uid) {
+        return Completable.fromCallable(new Callable<Void>() {
+            @Override
+            @Nullable
+            public Void call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
+                int _argIndex = 1;
+                _stmt.bindLong(_argIndex, uid);
+                __db.beginTransaction();
+                try {
+                    _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return null;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfDeleteByUid.release(_stmt);
+                }
+            }
+        });
+    }
+
+    @Override
+    public Single<Integer> deleteByUidSingle(final int uid) {
+        return Single.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
+                int _argIndex = 1;
+                _stmt.bindLong(_argIndex, uid);
+                __db.beginTransaction();
+                try {
+                    final Integer _result = _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return _result;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfDeleteByUid.release(_stmt);
+                }
+            }
+        });
+    }
+
+    @Override
+    public Maybe<Integer> deleteByUidMaybe(final int uid) {
+        return Maybe.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
+                int _argIndex = 1;
+                _stmt.bindLong(_argIndex, uid);
+                __db.beginTransaction();
+                try {
+                    final Integer _result = _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return _result;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfDeleteByUid.release(_stmt);
+                }
+            }
+        });
+    }
+
+    @Override
+    public int deleteEverything() {
+        __db.assertNotSuspendingTransaction();
+        final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteEverything.acquire();
         __db.beginTransaction();
         try {
-          final Integer _result = _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return _result;
+            final int _result = _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
+            return _result;
         } finally {
-          __db.endTransaction();
-          __preparedStmtOfDeleteByUid.release(_stmt);
+            __db.endTransaction();
+            __preparedStmtOfDeleteEverything.release(_stmt);
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Maybe<Integer> deleteByUidMaybe(final int uid) {
-    return Maybe.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
-        final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
+    @Override
+    public int deleteByUidList(final int... uid) {
+        __db.assertNotSuspendingTransaction();
+        final StringBuilder _stringBuilder = StringUtil.newStringBuilder();
+        _stringBuilder.append("DELETE FROM user where uid IN(");
+        final int _inputSize = uid == null ? 1 : uid.length;
+        StringUtil.appendPlaceholders(_stringBuilder, _inputSize);
+        _stringBuilder.append(")");
+        final String _sql = _stringBuilder.toString();
+        final SupportSQLiteStatement _stmt = __db.compileStatement(_sql);
         int _argIndex = 1;
-        _stmt.bindLong(_argIndex, uid);
+        if (uid == null) {
+            _stmt.bindNull(_argIndex);
+        } else {
+            for (int _item : uid) {
+                _stmt.bindLong(_argIndex, _item);
+                _argIndex++;
+            }
+        }
         __db.beginTransaction();
         try {
-          final Integer _result = _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return _result;
+            final int _result = _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
+            return _result;
         } finally {
-          __db.endTransaction();
-          __preparedStmtOfDeleteByUid.release(_stmt);
+            __db.endTransaction();
         }
-      }
-    });
-  }
-
-  @Override
-  public int deleteEverything() {
-    __db.assertNotSuspendingTransaction();
-    final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteEverything.acquire();
-    __db.beginTransaction();
-    try {
-      final int _result = _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-      return _result;
-    } finally {
-      __db.endTransaction();
-      __preparedStmtOfDeleteEverything.release(_stmt);
     }
-  }
 
-  @Override
-  public int deleteByUidList(final int... uid) {
-    __db.assertNotSuspendingTransaction();
-    final StringBuilder _stringBuilder = StringUtil.newStringBuilder();
-    _stringBuilder.append("DELETE FROM user where uid IN(");
-    final int _inputSize = uid == null ? 1 : uid.length;
-    StringUtil.appendPlaceholders(_stringBuilder, _inputSize);
-    _stringBuilder.append(")");
-    final String _sql = _stringBuilder.toString();
-    final SupportSQLiteStatement _stmt = __db.compileStatement(_sql);
-    int _argIndex = 1;
-    if (uid == null) {
-      _stmt.bindNull(_argIndex);
-    } else {
-      for (int _item : uid) {
-        _stmt.bindLong(_argIndex, _item);
-        _argIndex++;
-      }
+    @NonNull
+    public static List<Class<?>> getRequiredConverters() {
+        return Collections.emptyList();
     }
-    __db.beginTransaction();
-    try {
-      final int _result = _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-      return _result;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @NonNull
-  public static List<Class<?>> getRequiredConverters() {
-    return Collections.emptyList();
-  }
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/javac/UpdateDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/javac/UpdateDao.java
index f311fdd..8873083 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/javac/UpdateDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/javac/UpdateDao.java
@@ -24,427 +24,431 @@
 @Generated("androidx.room.RoomProcessor")
 @SuppressWarnings({"unchecked", "deprecation"})
 public final class UpdateDao_Impl implements UpdateDao {
-  private final RoomDatabase __db;
+    private final RoomDatabase __db;
 
-  private final EntityDeletionOrUpdateAdapter<User> __updateAdapterOfUser;
+    private final EntityDeletionOrUpdateAdapter<User> __updateAdapterOfUser;
 
-  private final EntityDeletionOrUpdateAdapter<User> __updateAdapterOfUser_1;
+    private final EntityDeletionOrUpdateAdapter<User> __updateAdapterOfUser_1;
 
-  private final EntityDeletionOrUpdateAdapter<MultiPKeyEntity> __updateAdapterOfMultiPKeyEntity;
+    private final EntityDeletionOrUpdateAdapter<MultiPKeyEntity> __updateAdapterOfMultiPKeyEntity;
 
-  private final EntityDeletionOrUpdateAdapter<Book> __updateAdapterOfBook;
+    private final EntityDeletionOrUpdateAdapter<Book> __updateAdapterOfBook;
 
-  private final SharedSQLiteStatement __preparedStmtOfAgeUserByUid;
+    private final SharedSQLiteStatement __preparedStmtOfAgeUserByUid;
 
-  private final SharedSQLiteStatement __preparedStmtOfAgeUserAll;
+    private final SharedSQLiteStatement __preparedStmtOfAgeUserAll;
 
-  public UpdateDao_Impl(@NonNull final RoomDatabase __db) {
-    this.__db = __db;
-    this.__updateAdapterOfUser = new EntityDeletionOrUpdateAdapter<User>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "UPDATE OR ABORT `User` SET `uid` = ?,`name` = ?,`lastName` = ?,`ageColumn` = ? WHERE `uid` = ?";
-      }
+    public UpdateDao_Impl(@NonNull final RoomDatabase __db) {
+        this.__db = __db;
+        this.__updateAdapterOfUser = new EntityDeletionOrUpdateAdapter<User>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "UPDATE OR ABORT `User` SET `uid` = ?,`name` = ?,`lastName` = ?,`ageColumn` = ? WHERE `uid` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement, final User entity) {
-        statement.bindLong(1, entity.uid);
-        if (entity.name == null) {
-          statement.bindNull(2);
-        } else {
-          statement.bindString(2, entity.name);
-        }
-        if (entity.getLastName() == null) {
-          statement.bindNull(3);
-        } else {
-          statement.bindString(3, entity.getLastName());
-        }
-        statement.bindLong(4, entity.age);
-        statement.bindLong(5, entity.uid);
-      }
-    };
-    this.__updateAdapterOfUser_1 = new EntityDeletionOrUpdateAdapter<User>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "UPDATE `User` SET `uid` = ?,`name` = ?,`lastName` = ?,`ageColumn` = ? WHERE `uid` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement, final User entity) {
+                statement.bindLong(1, entity.uid);
+                if (entity.name == null) {
+                    statement.bindNull(2);
+                } else {
+                    statement.bindString(2, entity.name);
+                }
+                if (entity.getLastName() == null) {
+                    statement.bindNull(3);
+                } else {
+                    statement.bindString(3, entity.getLastName());
+                }
+                statement.bindLong(4, entity.age);
+                statement.bindLong(5, entity.uid);
+            }
+        };
+        this.__updateAdapterOfUser_1 = new EntityDeletionOrUpdateAdapter<User>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "UPDATE `User` SET `uid` = ?,`name` = ?,`lastName` = ?,`ageColumn` = ? WHERE `uid` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement, final User entity) {
-        statement.bindLong(1, entity.uid);
-        if (entity.name == null) {
-          statement.bindNull(2);
-        } else {
-          statement.bindString(2, entity.name);
-        }
-        if (entity.getLastName() == null) {
-          statement.bindNull(3);
-        } else {
-          statement.bindString(3, entity.getLastName());
-        }
-        statement.bindLong(4, entity.age);
-        statement.bindLong(5, entity.uid);
-      }
-    };
-    this.__updateAdapterOfMultiPKeyEntity = new EntityDeletionOrUpdateAdapter<MultiPKeyEntity>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "UPDATE OR ABORT `MultiPKeyEntity` SET `name` = ?,`lastName` = ? WHERE `name` = ? AND `lastName` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement, final User entity) {
+                statement.bindLong(1, entity.uid);
+                if (entity.name == null) {
+                    statement.bindNull(2);
+                } else {
+                    statement.bindString(2, entity.name);
+                }
+                if (entity.getLastName() == null) {
+                    statement.bindNull(3);
+                } else {
+                    statement.bindString(3, entity.getLastName());
+                }
+                statement.bindLong(4, entity.age);
+                statement.bindLong(5, entity.uid);
+            }
+        };
+        this.__updateAdapterOfMultiPKeyEntity = new EntityDeletionOrUpdateAdapter<MultiPKeyEntity>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "UPDATE OR ABORT `MultiPKeyEntity` SET `name` = ?,`lastName` = ? WHERE `name` = ? AND `lastName` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement,
-              final MultiPKeyEntity entity) {
-        if (entity.name == null) {
-          statement.bindNull(1);
-        } else {
-          statement.bindString(1, entity.name);
-        }
-        if (entity.lastName == null) {
-          statement.bindNull(2);
-        } else {
-          statement.bindString(2, entity.lastName);
-        }
-        if (entity.name == null) {
-          statement.bindNull(3);
-        } else {
-          statement.bindString(3, entity.name);
-        }
-        if (entity.lastName == null) {
-          statement.bindNull(4);
-        } else {
-          statement.bindString(4, entity.lastName);
-        }
-      }
-    };
-    this.__updateAdapterOfBook = new EntityDeletionOrUpdateAdapter<Book>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "UPDATE OR ABORT `Book` SET `bookId` = ?,`uid` = ? WHERE `bookId` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement,
+                    final MultiPKeyEntity entity) {
+                if (entity.name == null) {
+                    statement.bindNull(1);
+                } else {
+                    statement.bindString(1, entity.name);
+                }
+                if (entity.lastName == null) {
+                    statement.bindNull(2);
+                } else {
+                    statement.bindString(2, entity.lastName);
+                }
+                if (entity.name == null) {
+                    statement.bindNull(3);
+                } else {
+                    statement.bindString(3, entity.name);
+                }
+                if (entity.lastName == null) {
+                    statement.bindNull(4);
+                } else {
+                    statement.bindString(4, entity.lastName);
+                }
+            }
+        };
+        this.__updateAdapterOfBook = new EntityDeletionOrUpdateAdapter<Book>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "UPDATE OR ABORT `Book` SET `bookId` = ?,`uid` = ? WHERE `bookId` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement, final Book entity) {
-        statement.bindLong(1, entity.bookId);
-        statement.bindLong(2, entity.uid);
-        statement.bindLong(3, entity.bookId);
-      }
-    };
-    this.__preparedStmtOfAgeUserByUid = new SharedSQLiteStatement(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        final String _query = "UPDATE User SET ageColumn = ageColumn + 1 WHERE uid = ?";
-        return _query;
-      }
-    };
-    this.__preparedStmtOfAgeUserAll = new SharedSQLiteStatement(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        final String _query = "UPDATE User SET ageColumn = ageColumn + 1";
-        return _query;
-      }
-    };
-  }
-
-  @Override
-  public void updateUser(final User user) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement, final Book entity) {
+                statement.bindLong(1, entity.bookId);
+                statement.bindLong(2, entity.uid);
+                statement.bindLong(3, entity.bookId);
+            }
+        };
+        this.__preparedStmtOfAgeUserByUid = new SharedSQLiteStatement(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                final String _query = "UPDATE User SET ageColumn = ageColumn + 1 WHERE uid = ?";
+                return _query;
+            }
+        };
+        this.__preparedStmtOfAgeUserAll = new SharedSQLiteStatement(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                final String _query = "UPDATE User SET ageColumn = ageColumn + 1";
+                return _query;
+            }
+        };
     }
-  }
 
-  @Override
-  public void updateUsers(final User user1, final List<User> others) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser.handle(user1);
-      __updateAdapterOfUser.handleMultiple(others);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public void updateArrayOfUsers(final User[] users) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser.handleMultiple(users);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public void updateTwoUsers(final User userOne, final User userTwo) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser_1.handle(userOne);
-      __updateAdapterOfUser_1.handle(userTwo);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int updateUserAndReturnCount(final User user) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int updateUserAndReturnCount(final User user1, final List<User> others) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfUser.handle(user1);
-      _total += __updateAdapterOfUser.handleMultiple(others);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int updateUserAndReturnCount(final User[] users) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfUser.handleMultiple(users);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public Integer updateUserAndReturnCountObject(final User user) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public Completable updateUserAndReturnCountCompletable(final User user) {
-    return Completable.fromCallable(new Callable<Void>() {
-      @Override
-      @Nullable
-      public Void call() throws Exception {
+    @Override
+    public void updateUser(final User user) {
+        __db.assertNotSuspendingTransaction();
         __db.beginTransaction();
         try {
-          __updateAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return null;
+            __updateAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Single<Integer> updateUserAndReturnCountSingle(final User user) {
-    return Single.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
+    @Override
+    public void updateUsers(final User user1, final List<User> others) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __updateAdapterOfUser.handle(user1);
+            __updateAdapterOfUser.handleMultiple(others);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void updateArrayOfUsers(final User[] users) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __updateAdapterOfUser.handleMultiple(users);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void updateTwoUsers(final User userOne, final User userTwo) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __updateAdapterOfUser_1.handle(userOne);
+            __updateAdapterOfUser_1.handle(userTwo);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public int updateUserAndReturnCount(final User user) {
+        __db.assertNotSuspendingTransaction();
         int _total = 0;
         __db.beginTransaction();
         try {
-          _total += __updateAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return _total;
+            _total += __updateAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
+            return _total;
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Maybe<Integer> updateUserAndReturnCountMaybe(final User user) {
-    return Maybe.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
+    @Override
+    public int updateUserAndReturnCount(final User user1, final List<User> others) {
+        __db.assertNotSuspendingTransaction();
         int _total = 0;
         __db.beginTransaction();
         try {
-          _total += __updateAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return _total;
+            _total += __updateAdapterOfUser.handle(user1);
+            _total += __updateAdapterOfUser.handleMultiple(others);
+            __db.setTransactionSuccessful();
+            return _total;
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
-
-  @Override
-  public int multiPKey(final MultiPKeyEntity entity) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfMultiPKeyEntity.handle(entity);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
     }
-  }
 
-  @Override
-  public void updateUserAndBook(final User user, final Book book) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser.handle(user);
-      __updateAdapterOfBook.handle(book);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+    @Override
+    public int updateUserAndReturnCount(final User[] users) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __updateAdapterOfUser.handleMultiple(users);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
     }
-  }
 
-  @Override
-  public void updateAndAge(final User user) {
-    __db.beginTransaction();
-    try {
-      UpdateDao.super.updateAndAge(user);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+    @Override
+    public Integer updateUserAndReturnCountObject(final User user) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __updateAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
     }
-  }
 
-  @Override
-  public void ageUserByUid(final String uid) {
-    __db.assertNotSuspendingTransaction();
-    final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserByUid.acquire();
-    int _argIndex = 1;
-    if (uid == null) {
-      _stmt.bindNull(_argIndex);
-    } else {
-      _stmt.bindString(_argIndex, uid);
+    @Override
+    public Completable updateUserAndReturnCountCompletable(final User user) {
+        return Completable.fromCallable(new Callable<Void>() {
+            @Override
+            @Nullable
+            public Void call() throws Exception {
+                __db.beginTransaction();
+                try {
+                    __updateAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return null;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
     }
-    __db.beginTransaction();
-    try {
-      _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-      __preparedStmtOfAgeUserByUid.release(_stmt);
-    }
-  }
 
-  @Override
-  public void ageUserAll() {
-    __db.assertNotSuspendingTransaction();
-    final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
-    __db.beginTransaction();
-    try {
-      _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-      __preparedStmtOfAgeUserAll.release(_stmt);
+    @Override
+    public Single<Integer> updateUserAndReturnCountSingle(final User user) {
+        return Single.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                int _total = 0;
+                __db.beginTransaction();
+                try {
+                    _total += __updateAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return _total;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
     }
-  }
 
-  @Override
-  public Completable ageUserAllCompletable() {
-    return Completable.fromCallable(new Callable<Void>() {
-      @Override
-      @Nullable
-      public Void call() throws Exception {
+    @Override
+    public Maybe<Integer> updateUserAndReturnCountMaybe(final User user) {
+        return Maybe.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                int _total = 0;
+                __db.beginTransaction();
+                try {
+                    _total += __updateAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return _total;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
+    }
+
+    @Override
+    public int multiPKey(final MultiPKeyEntity entity) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __updateAdapterOfMultiPKeyEntity.handle(entity);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void updateUserAndBook(final User user, final Book book) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __updateAdapterOfUser.handle(user);
+            __updateAdapterOfBook.handle(book);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void updateAndAge(final User user) {
+        __db.beginTransaction();
+        try {
+            UpdateDao.super.updateAndAge(user);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void ageUserByUid(final String uid) {
+        __db.assertNotSuspendingTransaction();
+        final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserByUid.acquire();
+        int _argIndex = 1;
+        if (uid == null) {
+            _stmt.bindNull(_argIndex);
+        } else {
+            _stmt.bindString(_argIndex, uid);
+        }
+        __db.beginTransaction();
+        try {
+            _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+            __preparedStmtOfAgeUserByUid.release(_stmt);
+        }
+    }
+
+    @Override
+    public void ageUserAll() {
+        __db.assertNotSuspendingTransaction();
         final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
         __db.beginTransaction();
         try {
-          _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return null;
+            _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
         } finally {
-          __db.endTransaction();
-          __preparedStmtOfAgeUserAll.release(_stmt);
+            __db.endTransaction();
+            __preparedStmtOfAgeUserAll.release(_stmt);
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Single<Integer> ageUserAllSingle() {
-    return Single.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
-        final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
-        __db.beginTransaction();
-        try {
-          final Integer _result = _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return _result;
-        } finally {
-          __db.endTransaction();
-          __preparedStmtOfAgeUserAll.release(_stmt);
-        }
-      }
-    });
-  }
+    @Override
+    public Completable ageUserAllCompletable() {
+        return Completable.fromCallable(new Callable<Void>() {
+            @Override
+            @Nullable
+            public Void call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
+                __db.beginTransaction();
+                try {
+                    _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return null;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfAgeUserAll.release(_stmt);
+                }
+            }
+        });
+    }
 
-  @Override
-  public Maybe<Integer> ageUserAllMaybe() {
-    return Maybe.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
-        final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
-        __db.beginTransaction();
-        try {
-          final Integer _result = _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return _result;
-        } finally {
-          __db.endTransaction();
-          __preparedStmtOfAgeUserAll.release(_stmt);
-        }
-      }
-    });
-  }
+    @Override
+    public Single<Integer> ageUserAllSingle() {
+        return Single.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
+                __db.beginTransaction();
+                try {
+                    final Integer _result = _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return _result;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfAgeUserAll.release(_stmt);
+                }
+            }
+        });
+    }
 
-  @NonNull
-  public static List<Class<?>> getRequiredConverters() {
-    return Collections.emptyList();
-  }
+    @Override
+    public Maybe<Integer> ageUserAllMaybe() {
+        return Maybe.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
+                __db.beginTransaction();
+                try {
+                    final Integer _result = _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return _result;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfAgeUserAll.release(_stmt);
+                }
+            }
+        });
+    }
+
+    @NonNull
+    public static List<Class<?>> getRequiredConverters() {
+        return Collections.emptyList();
+    }
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/ComplexDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/ComplexDao.java
index ac697fa..848ac31 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/ComplexDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/ComplexDao.java
@@ -3,6 +3,7 @@
 import android.database.Cursor;
 import android.os.CancellationSignal;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.lifecycle.LiveData;
 import androidx.room.RoomDatabase;
 import androidx.room.RoomSQLiteQuery;
@@ -364,6 +365,7 @@
         _statement.bindLong(_argIndex, id);
         return __db.getInvalidationTracker().createLiveData(new String[] {"user"}, false, new Callable<User>() {
             @Override
+            @Nullable
             public User call() throws Exception {
                 final Cursor _cursor = DBUtil.query(__db, _statement, false, null);
                 try {
@@ -417,6 +419,7 @@
         }
         return __db.getInvalidationTracker().createLiveData(new String[] {"user"}, false, new Callable<List<User>>() {
             @Override
+            @Nullable
             public List<User> call() throws Exception {
                 final Cursor _cursor = DBUtil.query(__db, _statement, false, null);
                 try {
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/DeletionDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/DeletionDao.java
index fd7a178..a8478f5 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/DeletionDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/DeletionDao.java
@@ -26,380 +26,384 @@
 @Generated("androidx.room.RoomProcessor")
 @SuppressWarnings({"unchecked", "deprecation"})
 public final class DeletionDao_Impl implements DeletionDao {
-  private final RoomDatabase __db;
+    private final RoomDatabase __db;
 
-  private final EntityDeletionOrUpdateAdapter<User> __deletionAdapterOfUser;
+    private final EntityDeletionOrUpdateAdapter<User> __deletionAdapterOfUser;
 
-  private final EntityDeletionOrUpdateAdapter<MultiPKeyEntity> __deletionAdapterOfMultiPKeyEntity;
+    private final EntityDeletionOrUpdateAdapter<MultiPKeyEntity> __deletionAdapterOfMultiPKeyEntity;
 
-  private final EntityDeletionOrUpdateAdapter<Book> __deletionAdapterOfBook;
+    private final EntityDeletionOrUpdateAdapter<Book> __deletionAdapterOfBook;
 
-  private final SharedSQLiteStatement __preparedStmtOfDeleteByUid;
+    private final SharedSQLiteStatement __preparedStmtOfDeleteByUid;
 
-  private final SharedSQLiteStatement __preparedStmtOfDeleteEverything;
+    private final SharedSQLiteStatement __preparedStmtOfDeleteEverything;
 
-  public DeletionDao_Impl(@NonNull final RoomDatabase __db) {
-    this.__db = __db;
-    this.__deletionAdapterOfUser = new EntityDeletionOrUpdateAdapter<User>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "DELETE FROM `User` WHERE `uid` = ?";
-      }
+    public DeletionDao_Impl(@NonNull final RoomDatabase __db) {
+        this.__db = __db;
+        this.__deletionAdapterOfUser = new EntityDeletionOrUpdateAdapter<User>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "DELETE FROM `User` WHERE `uid` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement,
-              @NonNull final User entity) {
-        statement.bindLong(1, entity.uid);
-      }
-    };
-    this.__deletionAdapterOfMultiPKeyEntity = new EntityDeletionOrUpdateAdapter<MultiPKeyEntity>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "DELETE FROM `MultiPKeyEntity` WHERE `name` = ? AND `lastName` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement,
+                    @NonNull final User entity) {
+                statement.bindLong(1, entity.uid);
+            }
+        };
+        this.__deletionAdapterOfMultiPKeyEntity = new EntityDeletionOrUpdateAdapter<MultiPKeyEntity>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "DELETE FROM `MultiPKeyEntity` WHERE `name` = ? AND `lastName` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement,
-              @NonNull final MultiPKeyEntity entity) {
-        statement.bindString(1, entity.name);
-        statement.bindString(2, entity.lastName);
-      }
-    };
-    this.__deletionAdapterOfBook = new EntityDeletionOrUpdateAdapter<Book>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "DELETE FROM `Book` WHERE `bookId` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement,
+                    @NonNull final MultiPKeyEntity entity) {
+                statement.bindString(1, entity.name);
+                statement.bindString(2, entity.lastName);
+            }
+        };
+        this.__deletionAdapterOfBook = new EntityDeletionOrUpdateAdapter<Book>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "DELETE FROM `Book` WHERE `bookId` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement,
-              @NonNull final Book entity) {
-        statement.bindLong(1, entity.bookId);
-      }
-    };
-    this.__preparedStmtOfDeleteByUid = new SharedSQLiteStatement(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        final String _query = "DELETE FROM user where uid = ?";
-        return _query;
-      }
-    };
-    this.__preparedStmtOfDeleteEverything = new SharedSQLiteStatement(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        final String _query = "DELETE FROM user";
-        return _query;
-      }
-    };
-  }
-
-  @Override
-  public void deleteUser(final User user) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __deletionAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement,
+                    @NonNull final Book entity) {
+                statement.bindLong(1, entity.bookId);
+            }
+        };
+        this.__preparedStmtOfDeleteByUid = new SharedSQLiteStatement(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                final String _query = "DELETE FROM user where uid = ?";
+                return _query;
+            }
+        };
+        this.__preparedStmtOfDeleteEverything = new SharedSQLiteStatement(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                final String _query = "DELETE FROM user";
+                return _query;
+            }
+        };
     }
-  }
 
-  @Override
-  public void deleteUsers(final User user1, final List<User> others) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __deletionAdapterOfUser.handle(user1);
-      __deletionAdapterOfUser.handleMultiple(others);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public void deleteArrayOfUsers(final User[] users) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __deletionAdapterOfUser.handleMultiple(users);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public Integer deleteUserAndReturnCountObject(final User user) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int deleteUserAndReturnCount(final User user) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int deleteUserAndReturnCount(final User user1, final List<User> others) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfUser.handle(user1);
-      _total += __deletionAdapterOfUser.handleMultiple(others);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int deleteUserAndReturnCount(final User[] users) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfUser.handleMultiple(users);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public Completable deleteUserCompletable(final User user) {
-    return Completable.fromCallable(new Callable<Void>() {
-      @Override
-      @Nullable
-      public Void call() throws Exception {
+    @Override
+    public void deleteUser(final User user) {
+        __db.assertNotSuspendingTransaction();
         __db.beginTransaction();
         try {
-          __deletionAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return null;
+            __deletionAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Single<Integer> deleteUserSingle(final User user) {
-    return Single.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
+    @Override
+    public void deleteUsers(final User user1, final List<User> others) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __deletionAdapterOfUser.handle(user1);
+            __deletionAdapterOfUser.handleMultiple(others);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void deleteArrayOfUsers(final User[] users) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __deletionAdapterOfUser.handleMultiple(users);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public Integer deleteUserAndReturnCountObject(final User user) {
+        __db.assertNotSuspendingTransaction();
         int _total = 0;
         __db.beginTransaction();
         try {
-          _total += __deletionAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return _total;
+            _total += __deletionAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
+            return _total;
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Maybe<Integer> deleteUserMaybe(final User user) {
-    return Maybe.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
+    @Override
+    public int deleteUserAndReturnCount(final User user) {
+        __db.assertNotSuspendingTransaction();
         int _total = 0;
         __db.beginTransaction();
         try {
-          _total += __deletionAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return _total;
+            _total += __deletionAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
+            return _total;
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
-
-  @Override
-  public int multiPKey(final MultiPKeyEntity entity) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __deletionAdapterOfMultiPKeyEntity.handle(entity);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
     }
-  }
 
-  @Override
-  public void deleteUserAndBook(final User user, final Book book) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __deletionAdapterOfUser.handle(user);
-      __deletionAdapterOfBook.handle(book);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+    @Override
+    public int deleteUserAndReturnCount(final User user1, final List<User> others) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __deletionAdapterOfUser.handle(user1);
+            _total += __deletionAdapterOfUser.handleMultiple(others);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
     }
-  }
 
-  @Override
-  public int deleteByUid(final int uid) {
-    __db.assertNotSuspendingTransaction();
-    final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
-    int _argIndex = 1;
-    _stmt.bindLong(_argIndex, uid);
-    __db.beginTransaction();
-    try {
-      final int _result = _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-      return _result;
-    } finally {
-      __db.endTransaction();
-      __preparedStmtOfDeleteByUid.release(_stmt);
+    @Override
+    public int deleteUserAndReturnCount(final User[] users) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __deletionAdapterOfUser.handleMultiple(users);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
     }
-  }
 
-  @Override
-  public Completable deleteByUidCompletable(final int uid) {
-    return Completable.fromCallable(new Callable<Void>() {
-      @Override
-      @Nullable
-      public Void call() throws Exception {
+    @Override
+    public Completable deleteUserCompletable(final User user) {
+        return Completable.fromCallable(new Callable<Void>() {
+            @Override
+            @Nullable
+            public Void call() throws Exception {
+                __db.beginTransaction();
+                try {
+                    __deletionAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return null;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
+    }
+
+    @Override
+    public Single<Integer> deleteUserSingle(final User user) {
+        return Single.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                int _total = 0;
+                __db.beginTransaction();
+                try {
+                    _total += __deletionAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return _total;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
+    }
+
+    @Override
+    public Maybe<Integer> deleteUserMaybe(final User user) {
+        return Maybe.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                int _total = 0;
+                __db.beginTransaction();
+                try {
+                    _total += __deletionAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return _total;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
+    }
+
+    @Override
+    public int multiPKey(final MultiPKeyEntity entity) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __deletionAdapterOfMultiPKeyEntity.handle(entity);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void deleteUserAndBook(final User user, final Book book) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __deletionAdapterOfUser.handle(user);
+            __deletionAdapterOfBook.handle(book);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public int deleteByUid(final int uid) {
+        __db.assertNotSuspendingTransaction();
         final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
         int _argIndex = 1;
         _stmt.bindLong(_argIndex, uid);
         __db.beginTransaction();
         try {
-          _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return null;
+            final int _result = _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
+            return _result;
         } finally {
-          __db.endTransaction();
-          __preparedStmtOfDeleteByUid.release(_stmt);
+            __db.endTransaction();
+            __preparedStmtOfDeleteByUid.release(_stmt);
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Single<Integer> deleteByUidSingle(final int uid) {
-    return Single.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
-        final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
-        int _argIndex = 1;
-        _stmt.bindLong(_argIndex, uid);
+    @Override
+    public Completable deleteByUidCompletable(final int uid) {
+        return Completable.fromCallable(new Callable<Void>() {
+            @Override
+            @Nullable
+            public Void call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
+                int _argIndex = 1;
+                _stmt.bindLong(_argIndex, uid);
+                __db.beginTransaction();
+                try {
+                    _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return null;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfDeleteByUid.release(_stmt);
+                }
+            }
+        });
+    }
+
+    @Override
+    public Single<Integer> deleteByUidSingle(final int uid) {
+        return Single.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
+                int _argIndex = 1;
+                _stmt.bindLong(_argIndex, uid);
+                __db.beginTransaction();
+                try {
+                    final Integer _result = _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return _result;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfDeleteByUid.release(_stmt);
+                }
+            }
+        });
+    }
+
+    @Override
+    public Maybe<Integer> deleteByUidMaybe(final int uid) {
+        return Maybe.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
+                int _argIndex = 1;
+                _stmt.bindLong(_argIndex, uid);
+                __db.beginTransaction();
+                try {
+                    final Integer _result = _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return _result;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfDeleteByUid.release(_stmt);
+                }
+            }
+        });
+    }
+
+    @Override
+    public int deleteEverything() {
+        __db.assertNotSuspendingTransaction();
+        final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteEverything.acquire();
         __db.beginTransaction();
         try {
-          final Integer _result = _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return _result;
+            final int _result = _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
+            return _result;
         } finally {
-          __db.endTransaction();
-          __preparedStmtOfDeleteByUid.release(_stmt);
+            __db.endTransaction();
+            __preparedStmtOfDeleteEverything.release(_stmt);
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Maybe<Integer> deleteByUidMaybe(final int uid) {
-    return Maybe.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
-        final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
+    @Override
+    public int deleteByUidList(final int... uid) {
+        __db.assertNotSuspendingTransaction();
+        final StringBuilder _stringBuilder = StringUtil.newStringBuilder();
+        _stringBuilder.append("DELETE FROM user where uid IN(");
+        final int _inputSize = uid == null ? 1 : uid.length;
+        StringUtil.appendPlaceholders(_stringBuilder, _inputSize);
+        _stringBuilder.append(")");
+        final String _sql = _stringBuilder.toString();
+        final SupportSQLiteStatement _stmt = __db.compileStatement(_sql);
         int _argIndex = 1;
-        _stmt.bindLong(_argIndex, uid);
+        if (uid == null) {
+            _stmt.bindNull(_argIndex);
+        } else {
+            for (int _item : uid) {
+                _stmt.bindLong(_argIndex, _item);
+                _argIndex++;
+            }
+        }
         __db.beginTransaction();
         try {
-          final Integer _result = _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return _result;
+            final int _result = _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
+            return _result;
         } finally {
-          __db.endTransaction();
-          __preparedStmtOfDeleteByUid.release(_stmt);
+            __db.endTransaction();
         }
-      }
-    });
-  }
-
-  @Override
-  public int deleteEverything() {
-    __db.assertNotSuspendingTransaction();
-    final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteEverything.acquire();
-    __db.beginTransaction();
-    try {
-      final int _result = _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-      return _result;
-    } finally {
-      __db.endTransaction();
-      __preparedStmtOfDeleteEverything.release(_stmt);
     }
-  }
 
-  @Override
-  public int deleteByUidList(final int... uid) {
-    __db.assertNotSuspendingTransaction();
-    final StringBuilder _stringBuilder = StringUtil.newStringBuilder();
-    _stringBuilder.append("DELETE FROM user where uid IN(");
-    final int _inputSize = uid == null ? 1 : uid.length;
-    StringUtil.appendPlaceholders(_stringBuilder, _inputSize);
-    _stringBuilder.append(")");
-    final String _sql = _stringBuilder.toString();
-    final SupportSQLiteStatement _stmt = __db.compileStatement(_sql);
-    int _argIndex = 1;
-    if (uid == null) {
-      _stmt.bindNull(_argIndex);
-    } else {
-      for (int _item : uid) {
-        _stmt.bindLong(_argIndex, _item);
-        _argIndex++;
-      }
+    @NonNull
+    public static List<Class<?>> getRequiredConverters() {
+        return Collections.emptyList();
     }
-    __db.beginTransaction();
-    try {
-      final int _result = _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-      return _result;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @NonNull
-  public static List<Class<?>> getRequiredConverters() {
-    return Collections.emptyList();
-  }
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/UpdateDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/UpdateDao.java
index 3201f23..a17d135 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/UpdateDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/UpdateDao.java
@@ -24,394 +24,398 @@
 @Generated("androidx.room.RoomProcessor")
 @SuppressWarnings({"unchecked", "deprecation"})
 public final class UpdateDao_Impl implements UpdateDao {
-  private final RoomDatabase __db;
+    private final RoomDatabase __db;
 
-  private final EntityDeletionOrUpdateAdapter<User> __updateAdapterOfUser;
+    private final EntityDeletionOrUpdateAdapter<User> __updateAdapterOfUser;
 
-  private final EntityDeletionOrUpdateAdapter<User> __updateAdapterOfUser_1;
+    private final EntityDeletionOrUpdateAdapter<User> __updateAdapterOfUser_1;
 
-  private final EntityDeletionOrUpdateAdapter<MultiPKeyEntity> __updateAdapterOfMultiPKeyEntity;
+    private final EntityDeletionOrUpdateAdapter<MultiPKeyEntity> __updateAdapterOfMultiPKeyEntity;
 
-  private final EntityDeletionOrUpdateAdapter<Book> __updateAdapterOfBook;
+    private final EntityDeletionOrUpdateAdapter<Book> __updateAdapterOfBook;
 
-  private final SharedSQLiteStatement __preparedStmtOfAgeUserByUid;
+    private final SharedSQLiteStatement __preparedStmtOfAgeUserByUid;
 
-  private final SharedSQLiteStatement __preparedStmtOfAgeUserAll;
+    private final SharedSQLiteStatement __preparedStmtOfAgeUserAll;
 
-  public UpdateDao_Impl(@NonNull final RoomDatabase __db) {
-    this.__db = __db;
-    this.__updateAdapterOfUser = new EntityDeletionOrUpdateAdapter<User>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "UPDATE OR ABORT `User` SET `uid` = ?,`name` = ?,`lastName` = ?,`ageColumn` = ? WHERE `uid` = ?";
-      }
+    public UpdateDao_Impl(@NonNull final RoomDatabase __db) {
+        this.__db = __db;
+        this.__updateAdapterOfUser = new EntityDeletionOrUpdateAdapter<User>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "UPDATE OR ABORT `User` SET `uid` = ?,`name` = ?,`lastName` = ?,`ageColumn` = ? WHERE `uid` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement,
-              @NonNull final User entity) {
-        statement.bindLong(1, entity.uid);
-        statement.bindString(2, entity.name);
-        statement.bindString(3, entity.getLastName());
-        statement.bindLong(4, entity.age);
-        statement.bindLong(5, entity.uid);
-      }
-    };
-    this.__updateAdapterOfUser_1 = new EntityDeletionOrUpdateAdapter<User>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "UPDATE `User` SET `uid` = ?,`name` = ?,`lastName` = ?,`ageColumn` = ? WHERE `uid` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement,
+                    @NonNull final User entity) {
+                statement.bindLong(1, entity.uid);
+                statement.bindString(2, entity.name);
+                statement.bindString(3, entity.getLastName());
+                statement.bindLong(4, entity.age);
+                statement.bindLong(5, entity.uid);
+            }
+        };
+        this.__updateAdapterOfUser_1 = new EntityDeletionOrUpdateAdapter<User>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "UPDATE `User` SET `uid` = ?,`name` = ?,`lastName` = ?,`ageColumn` = ? WHERE `uid` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement,
-              @NonNull final User entity) {
-        statement.bindLong(1, entity.uid);
-        statement.bindString(2, entity.name);
-        statement.bindString(3, entity.getLastName());
-        statement.bindLong(4, entity.age);
-        statement.bindLong(5, entity.uid);
-      }
-    };
-    this.__updateAdapterOfMultiPKeyEntity = new EntityDeletionOrUpdateAdapter<MultiPKeyEntity>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "UPDATE OR ABORT `MultiPKeyEntity` SET `name` = ?,`lastName` = ? WHERE `name` = ? AND `lastName` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement,
+                    @NonNull final User entity) {
+                statement.bindLong(1, entity.uid);
+                statement.bindString(2, entity.name);
+                statement.bindString(3, entity.getLastName());
+                statement.bindLong(4, entity.age);
+                statement.bindLong(5, entity.uid);
+            }
+        };
+        this.__updateAdapterOfMultiPKeyEntity = new EntityDeletionOrUpdateAdapter<MultiPKeyEntity>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "UPDATE OR ABORT `MultiPKeyEntity` SET `name` = ?,`lastName` = ? WHERE `name` = ? AND `lastName` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement,
-              @NonNull final MultiPKeyEntity entity) {
-        statement.bindString(1, entity.name);
-        statement.bindString(2, entity.lastName);
-        statement.bindString(3, entity.name);
-        statement.bindString(4, entity.lastName);
-      }
-    };
-    this.__updateAdapterOfBook = new EntityDeletionOrUpdateAdapter<Book>(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        return "UPDATE OR ABORT `Book` SET `bookId` = ?,`uid` = ? WHERE `bookId` = ?";
-      }
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement,
+                    @NonNull final MultiPKeyEntity entity) {
+                statement.bindString(1, entity.name);
+                statement.bindString(2, entity.lastName);
+                statement.bindString(3, entity.name);
+                statement.bindString(4, entity.lastName);
+            }
+        };
+        this.__updateAdapterOfBook = new EntityDeletionOrUpdateAdapter<Book>(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                return "UPDATE OR ABORT `Book` SET `bookId` = ?,`uid` = ? WHERE `bookId` = ?";
+            }
 
-      @Override
-      public void bind(@NonNull final SupportSQLiteStatement statement,
-              @NonNull final Book entity) {
-        statement.bindLong(1, entity.bookId);
-        statement.bindLong(2, entity.uid);
-        statement.bindLong(3, entity.bookId);
-      }
-    };
-    this.__preparedStmtOfAgeUserByUid = new SharedSQLiteStatement(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        final String _query = "UPDATE User SET ageColumn = ageColumn + 1 WHERE uid = ?";
-        return _query;
-      }
-    };
-    this.__preparedStmtOfAgeUserAll = new SharedSQLiteStatement(__db) {
-      @Override
-      @NonNull
-      public String createQuery() {
-        final String _query = "UPDATE User SET ageColumn = ageColumn + 1";
-        return _query;
-      }
-    };
-  }
-
-  @Override
-  public void updateUser(final User user) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+            @Override
+            public void bind(@NonNull final SupportSQLiteStatement statement,
+                    @NonNull final Book entity) {
+                statement.bindLong(1, entity.bookId);
+                statement.bindLong(2, entity.uid);
+                statement.bindLong(3, entity.bookId);
+            }
+        };
+        this.__preparedStmtOfAgeUserByUid = new SharedSQLiteStatement(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                final String _query = "UPDATE User SET ageColumn = ageColumn + 1 WHERE uid = ?";
+                return _query;
+            }
+        };
+        this.__preparedStmtOfAgeUserAll = new SharedSQLiteStatement(__db) {
+            @Override
+            @NonNull
+            public String createQuery() {
+                final String _query = "UPDATE User SET ageColumn = ageColumn + 1";
+                return _query;
+            }
+        };
     }
-  }
 
-  @Override
-  public void updateUsers(final User user1, final List<User> others) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser.handle(user1);
-      __updateAdapterOfUser.handleMultiple(others);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public void updateArrayOfUsers(final User[] users) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser.handleMultiple(users);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public void updateTwoUsers(final User userOne, final User userTwo) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser_1.handle(userOne);
-      __updateAdapterOfUser_1.handle(userTwo);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int updateUserAndReturnCount(final User user) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int updateUserAndReturnCount(final User user1, final List<User> others) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfUser.handle(user1);
-      _total += __updateAdapterOfUser.handleMultiple(others);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public int updateUserAndReturnCount(final User[] users) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfUser.handleMultiple(users);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public Integer updateUserAndReturnCountObject(final User user) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfUser.handle(user);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
-    }
-  }
-
-  @Override
-  public Completable updateUserAndReturnCountCompletable(final User user) {
-    return Completable.fromCallable(new Callable<Void>() {
-      @Override
-      @Nullable
-      public Void call() throws Exception {
+    @Override
+    public void updateUser(final User user) {
+        __db.assertNotSuspendingTransaction();
         __db.beginTransaction();
         try {
-          __updateAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return null;
+            __updateAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Single<Integer> updateUserAndReturnCountSingle(final User user) {
-    return Single.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
+    @Override
+    public void updateUsers(final User user1, final List<User> others) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __updateAdapterOfUser.handle(user1);
+            __updateAdapterOfUser.handleMultiple(others);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void updateArrayOfUsers(final User[] users) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __updateAdapterOfUser.handleMultiple(users);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void updateTwoUsers(final User userOne, final User userTwo) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __updateAdapterOfUser_1.handle(userOne);
+            __updateAdapterOfUser_1.handle(userTwo);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public int updateUserAndReturnCount(final User user) {
+        __db.assertNotSuspendingTransaction();
         int _total = 0;
         __db.beginTransaction();
         try {
-          _total += __updateAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return _total;
+            _total += __updateAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
+            return _total;
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Maybe<Integer> updateUserAndReturnCountMaybe(final User user) {
-    return Maybe.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
+    @Override
+    public int updateUserAndReturnCount(final User user1, final List<User> others) {
+        __db.assertNotSuspendingTransaction();
         int _total = 0;
         __db.beginTransaction();
         try {
-          _total += __updateAdapterOfUser.handle(user);
-          __db.setTransactionSuccessful();
-          return _total;
+            _total += __updateAdapterOfUser.handle(user1);
+            _total += __updateAdapterOfUser.handleMultiple(others);
+            __db.setTransactionSuccessful();
+            return _total;
         } finally {
-          __db.endTransaction();
+            __db.endTransaction();
         }
-      }
-    });
-  }
-
-  @Override
-  public int multiPKey(final MultiPKeyEntity entity) {
-    __db.assertNotSuspendingTransaction();
-    int _total = 0;
-    __db.beginTransaction();
-    try {
-      _total += __updateAdapterOfMultiPKeyEntity.handle(entity);
-      __db.setTransactionSuccessful();
-      return _total;
-    } finally {
-      __db.endTransaction();
     }
-  }
 
-  @Override
-  public void updateUserAndBook(final User user, final Book book) {
-    __db.assertNotSuspendingTransaction();
-    __db.beginTransaction();
-    try {
-      __updateAdapterOfUser.handle(user);
-      __updateAdapterOfBook.handle(book);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+    @Override
+    public int updateUserAndReturnCount(final User[] users) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __updateAdapterOfUser.handleMultiple(users);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
     }
-  }
 
-  @Override
-  public void updateAndAge(final User user) {
-    __db.beginTransaction();
-    try {
-      UpdateDao.super.updateAndAge(user);
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
+    @Override
+    public Integer updateUserAndReturnCountObject(final User user) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __updateAdapterOfUser.handle(user);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
     }
-  }
 
-  @Override
-  public void ageUserByUid(final String uid) {
-    __db.assertNotSuspendingTransaction();
-    final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserByUid.acquire();
-    int _argIndex = 1;
-    _stmt.bindString(_argIndex, uid);
-    __db.beginTransaction();
-    try {
-      _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-      __preparedStmtOfAgeUserByUid.release(_stmt);
+    @Override
+    public Completable updateUserAndReturnCountCompletable(final User user) {
+        return Completable.fromCallable(new Callable<Void>() {
+            @Override
+            @Nullable
+            public Void call() throws Exception {
+                __db.beginTransaction();
+                try {
+                    __updateAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return null;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
     }
-  }
 
-  @Override
-  public void ageUserAll() {
-    __db.assertNotSuspendingTransaction();
-    final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
-    __db.beginTransaction();
-    try {
-      _stmt.executeUpdateDelete();
-      __db.setTransactionSuccessful();
-    } finally {
-      __db.endTransaction();
-      __preparedStmtOfAgeUserAll.release(_stmt);
+    @Override
+    public Single<Integer> updateUserAndReturnCountSingle(final User user) {
+        return Single.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                int _total = 0;
+                __db.beginTransaction();
+                try {
+                    _total += __updateAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return _total;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
     }
-  }
 
-  @Override
-  public Completable ageUserAllCompletable() {
-    return Completable.fromCallable(new Callable<Void>() {
-      @Override
-      @Nullable
-      public Void call() throws Exception {
+    @Override
+    public Maybe<Integer> updateUserAndReturnCountMaybe(final User user) {
+        return Maybe.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                int _total = 0;
+                __db.beginTransaction();
+                try {
+                    _total += __updateAdapterOfUser.handle(user);
+                    __db.setTransactionSuccessful();
+                    return _total;
+                } finally {
+                    __db.endTransaction();
+                }
+            }
+        });
+    }
+
+    @Override
+    public int multiPKey(final MultiPKeyEntity entity) {
+        __db.assertNotSuspendingTransaction();
+        int _total = 0;
+        __db.beginTransaction();
+        try {
+            _total += __updateAdapterOfMultiPKeyEntity.handle(entity);
+            __db.setTransactionSuccessful();
+            return _total;
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void updateUserAndBook(final User user, final Book book) {
+        __db.assertNotSuspendingTransaction();
+        __db.beginTransaction();
+        try {
+            __updateAdapterOfUser.handle(user);
+            __updateAdapterOfBook.handle(book);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void updateAndAge(final User user) {
+        __db.beginTransaction();
+        try {
+            UpdateDao.super.updateAndAge(user);
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+        }
+    }
+
+    @Override
+    public void ageUserByUid(final String uid) {
+        __db.assertNotSuspendingTransaction();
+        final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserByUid.acquire();
+        int _argIndex = 1;
+        _stmt.bindString(_argIndex, uid);
+        __db.beginTransaction();
+        try {
+            _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
+        } finally {
+            __db.endTransaction();
+            __preparedStmtOfAgeUserByUid.release(_stmt);
+        }
+    }
+
+    @Override
+    public void ageUserAll() {
+        __db.assertNotSuspendingTransaction();
         final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
         __db.beginTransaction();
         try {
-          _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return null;
+            _stmt.executeUpdateDelete();
+            __db.setTransactionSuccessful();
         } finally {
-          __db.endTransaction();
-          __preparedStmtOfAgeUserAll.release(_stmt);
+            __db.endTransaction();
+            __preparedStmtOfAgeUserAll.release(_stmt);
         }
-      }
-    });
-  }
+    }
 
-  @Override
-  public Single<Integer> ageUserAllSingle() {
-    return Single.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
-        final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
-        __db.beginTransaction();
-        try {
-          final Integer _result = _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return _result;
-        } finally {
-          __db.endTransaction();
-          __preparedStmtOfAgeUserAll.release(_stmt);
-        }
-      }
-    });
-  }
+    @Override
+    public Completable ageUserAllCompletable() {
+        return Completable.fromCallable(new Callable<Void>() {
+            @Override
+            @Nullable
+            public Void call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
+                __db.beginTransaction();
+                try {
+                    _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return null;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfAgeUserAll.release(_stmt);
+                }
+            }
+        });
+    }
 
-  @Override
-  public Maybe<Integer> ageUserAllMaybe() {
-    return Maybe.fromCallable(new Callable<Integer>() {
-      @Override
-      public Integer call() throws Exception {
-        final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
-        __db.beginTransaction();
-        try {
-          final Integer _result = _stmt.executeUpdateDelete();
-          __db.setTransactionSuccessful();
-          return _result;
-        } finally {
-          __db.endTransaction();
-          __preparedStmtOfAgeUserAll.release(_stmt);
-        }
-      }
-    });
-  }
+    @Override
+    public Single<Integer> ageUserAllSingle() {
+        return Single.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
+                __db.beginTransaction();
+                try {
+                    final Integer _result = _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return _result;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfAgeUserAll.release(_stmt);
+                }
+            }
+        });
+    }
 
-  @NonNull
-  public static List<Class<?>> getRequiredConverters() {
-    return Collections.emptyList();
-  }
+    @Override
+    public Maybe<Integer> ageUserAllMaybe() {
+        return Maybe.fromCallable(new Callable<Integer>() {
+            @Override
+            @Nullable
+            public Integer call() throws Exception {
+                final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
+                __db.beginTransaction();
+                try {
+                    final Integer _result = _stmt.executeUpdateDelete();
+                    __db.setTransactionSuccessful();
+                    return _result;
+                } finally {
+                    __db.endTransaction();
+                    __preparedStmtOfAgeUserAll.release(_stmt);
+                }
+            }
+        });
+    }
+
+    @NonNull
+    public static List<Class<?>> getRequiredConverters() {
+        return Collections.emptyList();
+    }
 }
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/abstractClassWithParam.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/abstractClassWithParam.kt
index 2d03d4c..d306558 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/abstractClassWithParam.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/abstractClassWithParam.kt
@@ -13,7 +13,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao(__db) {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/arrayParameterAdapter.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/arrayParameterAdapter.kt
index c4c45a9..d415b37 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/arrayParameterAdapter.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/arrayParameterAdapter.kt
@@ -18,7 +18,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/basicParameterAdapter_string.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/basicParameterAdapter_string.kt
index d4c0490..3b22d23 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/basicParameterAdapter_string.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/basicParameterAdapter_string.kt
@@ -13,7 +13,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/callableQuery_rx2.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/callableQuery_rx2.kt
index 5c2fc98..32595b7 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/callableQuery_rx2.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/callableQuery_rx2.kt
@@ -24,7 +24,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
@@ -143,13 +143,13 @@
             }
             _argIndex++
         }
-        return RxRoom.createSingle(object : Callable<MyEntity> {
-            public override fun call(): MyEntity {
+        return RxRoom.createSingle(object : Callable<MyEntity?> {
+            public override fun call(): MyEntity? {
                 val _cursor: Cursor = query(__db, _statement, false, null)
                 try {
                     val _cursorIndexOfPk: Int = getColumnIndexOrThrow(_cursor, "pk")
                     val _cursorIndexOfOther: Int = getColumnIndexOrThrow(_cursor, "other")
-                    val _result: MyEntity
+                    val _result: MyEntity?
                     if (_cursor.moveToFirst()) {
                         val _tmpPk: Int
                         _tmpPk = _cursor.getInt(_cursorIndexOfPk)
@@ -157,7 +157,10 @@
                         _tmpOther = _cursor.getString(_cursorIndexOfOther)
                         _result = MyEntity(_tmpPk,_tmpOther)
                     } else {
-                        error("Cursor was empty, but expected a single item.")
+                        _result = null
+                    }
+                    if (_result == null) {
+                        throw EmptyResultSetException("Query returned empty result set: " + _statement.sql)
                     }
                     return _result
                 } finally {
@@ -189,13 +192,13 @@
             }
             _argIndex++
         }
-        return Maybe.fromCallable(object : Callable<MyEntity> {
-            public override fun call(): MyEntity {
+        return Maybe.fromCallable(object : Callable<MyEntity?> {
+            public override fun call(): MyEntity? {
                 val _cursor: Cursor = query(__db, _statement, false, null)
                 try {
                     val _cursorIndexOfPk: Int = getColumnIndexOrThrow(_cursor, "pk")
                     val _cursorIndexOfOther: Int = getColumnIndexOrThrow(_cursor, "other")
-                    val _result: MyEntity
+                    val _result: MyEntity?
                     if (_cursor.moveToFirst()) {
                         val _tmpPk: Int
                         _tmpPk = _cursor.getInt(_cursorIndexOfPk)
@@ -203,7 +206,7 @@
                         _tmpOther = _cursor.getString(_cursorIndexOfOther)
                         _result = MyEntity(_tmpPk,_tmpOther)
                     } else {
-                        error("Cursor was empty, but expected a single item.")
+                        _result = null
                     }
                     return _result
                 } finally {
@@ -392,9 +395,6 @@
                     } else {
                         _result = null
                     }
-                    if (_result == null) {
-                        throw EmptyResultSetException("Query returned empty result set: " + _statement.sql)
-                    }
                     return _result
                 } finally {
                     _cursor.close()
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/callableQuery_rx3.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/callableQuery_rx3.kt
index 4ea25c8..07fbdeb5 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/callableQuery_rx3.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/callableQuery_rx3.kt
@@ -24,7 +24,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
@@ -143,13 +143,13 @@
             }
             _argIndex++
         }
-        return RxRoom.createSingle(object : Callable<MyEntity> {
-            public override fun call(): MyEntity {
+        return RxRoom.createSingle(object : Callable<MyEntity?> {
+            public override fun call(): MyEntity? {
                 val _cursor: Cursor = query(__db, _statement, false, null)
                 try {
                     val _cursorIndexOfPk: Int = getColumnIndexOrThrow(_cursor, "pk")
                     val _cursorIndexOfOther: Int = getColumnIndexOrThrow(_cursor, "other")
-                    val _result: MyEntity
+                    val _result: MyEntity?
                     if (_cursor.moveToFirst()) {
                         val _tmpPk: Int
                         _tmpPk = _cursor.getInt(_cursorIndexOfPk)
@@ -157,7 +157,10 @@
                         _tmpOther = _cursor.getString(_cursorIndexOfOther)
                         _result = MyEntity(_tmpPk,_tmpOther)
                     } else {
-                        error("Cursor was empty, but expected a single item.")
+                        _result = null
+                    }
+                    if (_result == null) {
+                        throw EmptyResultSetException("Query returned empty result set: " + _statement.sql)
                     }
                     return _result
                 } finally {
@@ -189,13 +192,13 @@
             }
             _argIndex++
         }
-        return Maybe.fromCallable(object : Callable<MyEntity> {
-            public override fun call(): MyEntity {
+        return Maybe.fromCallable(object : Callable<MyEntity?> {
+            public override fun call(): MyEntity? {
                 val _cursor: Cursor = query(__db, _statement, false, null)
                 try {
                     val _cursorIndexOfPk: Int = getColumnIndexOrThrow(_cursor, "pk")
                     val _cursorIndexOfOther: Int = getColumnIndexOrThrow(_cursor, "other")
-                    val _result: MyEntity
+                    val _result: MyEntity?
                     if (_cursor.moveToFirst()) {
                         val _tmpPk: Int
                         _tmpPk = _cursor.getInt(_cursorIndexOfPk)
@@ -203,7 +206,7 @@
                         _tmpOther = _cursor.getString(_cursorIndexOfOther)
                         _result = MyEntity(_tmpPk,_tmpOther)
                     } else {
-                        error("Cursor was empty, but expected a single item.")
+                        _result = null
                     }
                     return _result
                 } finally {
@@ -392,9 +395,6 @@
                     } else {
                         _result = null
                     }
-                    if (_result == null) {
-                        throw EmptyResultSetException("Query returned empty result set: " + _statement.sql)
-                    }
                     return _result
                 } finally {
                     _cursor.close()
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/collectionParameterAdapter_string.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/collectionParameterAdapter_string.kt
index 0e060b0..1d1a468 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/collectionParameterAdapter_string.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/collectionParameterAdapter_string.kt
@@ -17,7 +17,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/coroutineResultBinder.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/coroutineResultBinder.kt
index 2667374..b959c1c 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/coroutineResultBinder.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/coroutineResultBinder.kt
@@ -17,7 +17,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/coroutines.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/coroutines.kt
index f775cf2..d99e339 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/coroutines.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/coroutines.kt
@@ -25,7 +25,7 @@
 import kotlinx.coroutines.flow.Flow
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/database_internalVisibility.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/database_internalVisibility.kt
index ab55721..585f176 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/database_internalVisibility.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/database_internalVisibility.kt
@@ -25,7 +25,7 @@
 import kotlin.collections.Set
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 internal class MyDatabase_Impl : MyDatabase() {
     private val _myDao: Lazy<MyDao> = lazy {
         MyDao_Impl(this)
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/database_simple.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/database_simple.kt
index f3fc118..6209c74 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/database_simple.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/database_simple.kt
@@ -25,7 +25,7 @@
 import kotlin.collections.Set
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDatabase_Impl : MyDatabase() {
     private val _myDao: Lazy<MyDao> = lazy {
         MyDao_Impl(this)
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/database_withFtsAndView.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/database_withFtsAndView.kt
index a321cbe..8ab3bb8 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/database_withFtsAndView.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/database_withFtsAndView.kt
@@ -28,7 +28,7 @@
 import kotlin.collections.Set
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDatabase_Impl : MyDatabase() {
     private val _myDao: Lazy<MyDao> = lazy {
         MyDao_Impl(this)
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt
index f760be1..c2562be 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_defaultImplBridge.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_defaultImplBridge.kt
index 520f28d..f2b5842 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_defaultImplBridge.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_defaultImplBridge.kt
@@ -14,7 +14,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/deleteOrUpdateMethodAdapter.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/deleteOrUpdateMethodAdapter.kt
index ebc321a..1166ce2 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/deleteOrUpdateMethodAdapter.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/deleteOrUpdateMethodAdapter.kt
@@ -11,7 +11,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/entityRowAdapter.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/entityRowAdapter.kt
index 6d67be8..e42eb9f 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/entityRowAdapter.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/entityRowAdapter.kt
@@ -18,7 +18,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/guavaCallable.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/guavaCallable.kt
index 58008c5..7a118e5 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/guavaCallable.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/guavaCallable.kt
@@ -27,7 +27,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/insertOrUpsertMethodAdapter.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/insertOrUpsertMethodAdapter.kt
index 5b4ec18..9f9874c 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/insertOrUpsertMethodAdapter.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/insertOrUpsertMethodAdapter.kt
@@ -14,7 +14,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/liveDataCallable.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/liveDataCallable.kt
index 7cf60b0..aad53d7 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/liveDataCallable.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/liveDataCallable.kt
@@ -19,7 +19,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
@@ -47,13 +47,13 @@
             _argIndex++
         }
         return __db.invalidationTracker.createLiveData(arrayOf("MyEntity"), false, object :
-            Callable<MyEntity> {
-            public override fun call(): MyEntity {
+            Callable<MyEntity?> {
+            public override fun call(): MyEntity? {
                 val _cursor: Cursor = query(__db, _statement, false, null)
                 try {
                     val _cursorIndexOfPk: Int = getColumnIndexOrThrow(_cursor, "pk")
                     val _cursorIndexOfOther: Int = getColumnIndexOrThrow(_cursor, "other")
-                    val _result: MyEntity
+                    val _result: MyEntity?
                     if (_cursor.moveToFirst()) {
                         val _tmpPk: Int
                         _tmpPk = _cursor.getInt(_cursorIndexOfPk)
@@ -61,7 +61,7 @@
                         _tmpOther = _cursor.getString(_cursorIndexOfOther)
                         _result = MyEntity(_tmpPk,_tmpOther)
                     } else {
-                        error("Cursor was empty, but expected a single item.")
+                        _result = null
                     }
                     return _result
                 } finally {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/multiTypedPagingSourceResultBinder.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/multiTypedPagingSourceResultBinder.kt
index 6b51521..921b262 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/multiTypedPagingSourceResultBinder.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/multiTypedPagingSourceResultBinder.kt
@@ -19,7 +19,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao() {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/paging_dataSource.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/paging_dataSource.kt
index 25c7425..3e2fbc8 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/paging_dataSource.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/paging_dataSource.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao() {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_boolean.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_boolean.kt
index 1a20e69..ab6a26f 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_boolean.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_boolean.kt
@@ -17,7 +17,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_byteArray.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_byteArray.kt
index 92125d1..53dfdd2 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_byteArray.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_byteArray.kt
@@ -17,7 +17,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter.kt
index 7918554..709f270 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_composite.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_composite.kt
index c858bad..71d915e 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_composite.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_composite.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_internalVisibility.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_internalVisibility.kt
index dede5008..9376fc3 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_internalVisibility.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_internalVisibility.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao() {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_nullAware.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_nullAware.kt
index ea32abb..a52bf88 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_nullAware.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_nullAware.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_provided.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_provided.kt
index 367594f..a464f74 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_provided.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_provided.kt
@@ -17,7 +17,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_upcast.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_upcast.kt
index 4fa2454..56fb164 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_upcast.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_customTypeConverter_upcast.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_embedded.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_embedded.kt
index 1ff29ed..7986fc1 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_embedded.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_embedded.kt
@@ -17,7 +17,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_enum.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_enum.kt
index 8d9e62a..480173c 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_enum.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_enum.kt
@@ -17,7 +17,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_internalVisibility.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_internalVisibility.kt
index 9cedbb7..a81a93e 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_internalVisibility.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_internalVisibility.kt
@@ -17,7 +17,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives.kt
index 44bccbb..28ed7ee 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives.kt
@@ -22,7 +22,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives_nullable.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives_nullable.kt
index 1704532f..19411e3 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives_nullable.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_primitives_nullable.kt
@@ -22,7 +22,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_string.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_string.kt
index d376c52..534cef8 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_string.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_string.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_uuid.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_uuid.kt
index a1fa31b..884c2a9 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_uuid.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_uuid.kt
@@ -19,7 +19,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty.kt
index 5eaf820..ea44a4f 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty_java.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty_java.kt
index 70a1366..6a0ead8 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty_java.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/pojoRowAdapter_variableProperty_java.kt
@@ -14,7 +14,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx2.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx2.kt
index f49b65e..eeee3c0 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx2.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx2.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
@@ -34,8 +34,8 @@
     }
 
     public override fun insertPublisherSingle(id: String, name: String): Single<Long> =
-        Single.fromCallable(object : Callable<Long> {
-            public override fun call(): Long {
+        Single.fromCallable(object : Callable<Long?> {
+            public override fun call(): Long? {
                 val _stmt: SupportSQLiteStatement = __preparedStmtOfInsertPublisherSingle.acquire()
                 var _argIndex: Int = 1
                 _stmt.bindString(_argIndex, id)
@@ -43,7 +43,7 @@
                 _stmt.bindString(_argIndex, name)
                 __db.beginTransaction()
                 try {
-                    val _result: Long = _stmt.executeInsert()
+                    val _result: Long? = _stmt.executeInsert()
                     __db.setTransactionSuccessful()
                     return _result
                 } finally {
@@ -54,8 +54,8 @@
         })
 
     public override fun insertPublisherMaybe(id: String, name: String): Maybe<Long> =
-        Maybe.fromCallable(object : Callable<Long> {
-            public override fun call(): Long {
+        Maybe.fromCallable(object : Callable<Long?> {
+            public override fun call(): Long? {
                 val _stmt: SupportSQLiteStatement = __preparedStmtOfInsertPublisherSingle.acquire()
                 var _argIndex: Int = 1
                 _stmt.bindString(_argIndex, id)
@@ -63,7 +63,7 @@
                 _stmt.bindString(_argIndex, name)
                 __db.beginTransaction()
                 try {
-                    val _result: Long = _stmt.executeInsert()
+                    val _result: Long? = _stmt.executeInsert()
                     __db.setTransactionSuccessful()
                     return _result
                 } finally {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx3.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx3.kt
index e9edbf5..f6d72eb 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx3.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx3.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
@@ -34,8 +34,8 @@
     }
 
     public override fun insertPublisherSingle(id: String, name: String): Single<Long> =
-        Single.fromCallable(object : Callable<Long> {
-            public override fun call(): Long {
+        Single.fromCallable(object : Callable<Long?> {
+            public override fun call(): Long? {
                 val _stmt: SupportSQLiteStatement = __preparedStmtOfInsertPublisherSingle.acquire()
                 var _argIndex: Int = 1
                 _stmt.bindString(_argIndex, id)
@@ -43,7 +43,7 @@
                 _stmt.bindString(_argIndex, name)
                 __db.beginTransaction()
                 try {
-                    val _result: Long = _stmt.executeInsert()
+                    val _result: Long? = _stmt.executeInsert()
                     __db.setTransactionSuccessful()
                     return _result
                 } finally {
@@ -54,8 +54,8 @@
         })
 
     public override fun insertPublisherMaybe(id: String, name: String): Maybe<Long> =
-        Maybe.fromCallable(object : Callable<Long> {
-            public override fun call(): Long {
+        Maybe.fromCallable(object : Callable<Long?> {
+            public override fun call(): Long? {
                 val _stmt: SupportSQLiteStatement = __preparedStmtOfInsertPublisherSingle.acquire()
                 var _argIndex: Int = 1
                 _stmt.bindString(_argIndex, id)
@@ -63,7 +63,7 @@
                 _stmt.bindString(_argIndex, name)
                 __db.beginTransaction()
                 try {
-                    val _result: Long = _stmt.executeInsert()
+                    val _result: Long? = _stmt.executeInsert()
                     __db.setTransactionSuccessful()
                     return _result
                 } finally {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedQueryAdapter.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedQueryAdapter.kt
index adb37c5..65888262 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedQueryAdapter.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedQueryAdapter.kt
@@ -12,7 +12,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_array.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_array.kt
index bcafeea..21e0d00 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_array.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_array.kt
@@ -19,7 +19,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaImmutableMap.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaImmutableMap.kt
index 2e4041b..43a58d3 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaImmutableMap.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaImmutableMap.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaImmutableMultimap.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaImmutableMultimap.kt
index 7da4276..bac60ed 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaImmutableMultimap.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaImmutableMultimap.kt
@@ -15,7 +15,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaOptional.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaOptional.kt
index 32538d8..c35b3b2 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaOptional.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_guavaOptional.kt
@@ -14,7 +14,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_immutable_list.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_immutable_list.kt
index c0118e4..c438764 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_immutable_list.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_immutable_list.kt
@@ -14,7 +14,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_list.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_list.kt
index b1f3933..7279bfe 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_list.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_list.kt
@@ -15,7 +15,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_map.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_map.kt
index 4f0d509..f42651e 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_map.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_map.kt
@@ -18,7 +18,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
@@ -62,42 +62,6 @@
         }
     }
 
-    public override fun getSongsWithNullableArtist(): Map<Song, Artist?> {
-        val _sql: String = "SELECT * FROM Song JOIN Artist ON Song.artistKey = Artist.artistId"
-        val _statement: RoomSQLiteQuery = acquire(_sql, 0)
-        __db.assertNotSuspendingTransaction()
-        val _cursor: Cursor = query(__db, _statement, false, null)
-        try {
-            val _cursorIndexOfSongId: Int = getColumnIndexOrThrow(_cursor, "songId")
-            val _cursorIndexOfArtistKey: Int = getColumnIndexOrThrow(_cursor, "artistKey")
-            val _cursorIndexOfArtistId: Int = getColumnIndexOrThrow(_cursor, "artistId")
-            val _result: MutableMap<Song, Artist?> = LinkedHashMap<Song, Artist?>()
-            while (_cursor.moveToNext()) {
-                val _key: Song
-                val _tmpSongId: String
-                _tmpSongId = _cursor.getString(_cursorIndexOfSongId)
-                val _tmpArtistKey: String
-                _tmpArtistKey = _cursor.getString(_cursorIndexOfArtistKey)
-                _key = Song(_tmpSongId,_tmpArtistKey)
-                if (_cursor.isNull(_cursorIndexOfArtistId)) {
-                    _result.put(_key, null)
-                    continue
-                }
-                val _value: Artist?
-                val _tmpArtistId: String
-                _tmpArtistId = _cursor.getString(_cursorIndexOfArtistId)
-                _value = Artist(_tmpArtistId)
-                if (!_result.containsKey(_key)) {
-                    _result.put(_key, _value)
-                }
-            }
-            return _result
-        } finally {
-            _cursor.close()
-            _statement.release()
-        }
-    }
-
     public override fun getArtistWithSongs(): Map<Artist, List<Song>> {
         val _sql: String = "SELECT * FROM Artist JOIN Song ON Artist.artistId = Song.artistKey"
         val _statement: RoomSQLiteQuery = acquire(_sql, 0)
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_map_ambiguousIndexAdapter.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_map_ambiguousIndexAdapter.kt
index 7548f6f..1c0720a 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_map_ambiguousIndexAdapter.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_map_ambiguousIndexAdapter.kt
@@ -22,7 +22,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_optional.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_optional.kt
index a9f9b28..c339cb8 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_optional.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/queryResultAdapter_optional.kt
@@ -14,7 +14,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/rawQuery.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/rawQuery.kt
index 036c89b..63a7af9 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/rawQuery.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/rawQuery.kt
@@ -12,7 +12,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations.kt
index df4a093..e2a614c 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations.kt
@@ -23,7 +23,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_arrayMap.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_arrayMap.kt
index e92df63..e4c901e 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_arrayMap.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_arrayMap.kt
@@ -23,7 +23,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_byteBufferKey.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_byteBufferKey.kt
index 5381501..576dfdc 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_byteBufferKey.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_byteBufferKey.kt
@@ -24,7 +24,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_longSparseArray.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_longSparseArray.kt
index 36cd22f..3100619 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_longSparseArray.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_longSparseArray.kt
@@ -22,7 +22,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_nullable.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_nullable.kt
index 7869fa2..5ab786c 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_nullable.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/relations_nullable.kt
@@ -23,7 +23,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_rx2.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_rx2.kt
index 8a6c6ed..57294c6 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_rx2.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_rx2.kt
@@ -18,7 +18,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
@@ -81,11 +81,11 @@
     }
 
     public override fun insertSingle(vararg entities: MyEntity): Single<List<Long>> =
-        Single.fromCallable(object : Callable<List<Long>> {
-            public override fun call(): List<Long> {
+        Single.fromCallable(object : Callable<List<Long>?> {
+            public override fun call(): List<Long>? {
                 __db.beginTransaction()
                 try {
-                    val _result: List<Long> = __insertionAdapterOfMyEntity.insertAndReturnIdsList(entities)
+                    val _result: List<Long>? = __insertionAdapterOfMyEntity.insertAndReturnIdsList(entities)
                     __db.setTransactionSuccessful()
                     return _result
                 } finally {
@@ -109,8 +109,8 @@
         })
 
     public override fun deleteSingle(entity: MyEntity): Single<Int> = Single.fromCallable(object :
-        Callable<Int> {
-        public override fun call(): Int {
+        Callable<Int?> {
+        public override fun call(): Int? {
             var _total: Int = 0
             __db.beginTransaction()
             try {
@@ -138,8 +138,8 @@
         })
 
     public override fun updateSingle(entity: MyEntity): Single<Int> = Single.fromCallable(object :
-        Callable<Int> {
-        public override fun call(): Int {
+        Callable<Int?> {
+        public override fun call(): Int? {
             var _total: Int = 0
             __db.beginTransaction()
             try {
@@ -167,11 +167,11 @@
         })
 
     public override fun upsertSingle(vararg entities: MyEntity): Single<List<Long>> =
-        Single.fromCallable(object : Callable<List<Long>> {
-            public override fun call(): List<Long> {
+        Single.fromCallable(object : Callable<List<Long>?> {
+            public override fun call(): List<Long>? {
                 __db.beginTransaction()
                 try {
-                    val _result: List<Long> = __upsertionAdapterOfMyEntity.upsertAndReturnIdsList(entities)
+                    val _result: List<Long>? = __upsertionAdapterOfMyEntity.upsertAndReturnIdsList(entities)
                     __db.setTransactionSuccessful()
                     return _result
                 } finally {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_rx3.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_rx3.kt
index 3223fa4..614e7de 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_rx3.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_rx3.kt
@@ -18,7 +18,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
@@ -81,11 +81,11 @@
     }
 
     public override fun insertSingle(vararg entities: MyEntity): Single<List<Long>> =
-        Single.fromCallable(object : Callable<List<Long>> {
-            public override fun call(): List<Long> {
+        Single.fromCallable(object : Callable<List<Long>?> {
+            public override fun call(): List<Long>? {
                 __db.beginTransaction()
                 try {
-                    val _result: List<Long> = __insertionAdapterOfMyEntity.insertAndReturnIdsList(entities)
+                    val _result: List<Long>? = __insertionAdapterOfMyEntity.insertAndReturnIdsList(entities)
                     __db.setTransactionSuccessful()
                     return _result
                 } finally {
@@ -109,8 +109,8 @@
         })
 
     public override fun deleteSingle(entity: MyEntity): Single<Int> = Single.fromCallable(object :
-        Callable<Int> {
-        public override fun call(): Int {
+        Callable<Int?> {
+        public override fun call(): Int? {
             var _total: Int = 0
             __db.beginTransaction()
             try {
@@ -138,8 +138,8 @@
         })
 
     public override fun updateSingle(entity: MyEntity): Single<Int> = Single.fromCallable(object :
-        Callable<Int> {
-        public override fun call(): Int {
+        Callable<Int?> {
+        public override fun call(): Int? {
             var _total: Int = 0
             __db.beginTransaction()
             try {
@@ -167,11 +167,11 @@
         })
 
     public override fun upsertSingle(vararg entities: MyEntity): Single<List<Long>> =
-        Single.fromCallable(object : Callable<List<Long>> {
-            public override fun call(): List<Long> {
+        Single.fromCallable(object : Callable<List<Long>?> {
+            public override fun call(): List<Long>? {
                 __db.beginTransaction()
                 try {
-                    val _result: List<Long> = __upsertionAdapterOfMyEntity.upsertAndReturnIdsList(entities)
+                    val _result: List<Long>? = __upsertionAdapterOfMyEntity.upsertAndReturnIdsList(entities)
                     __db.setTransactionSuccessful()
                     return _result
                 } finally {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_suspend.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_suspend.kt
index de09864..01c90ca 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_suspend.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/shortcutMethods_suspend.kt
@@ -16,7 +16,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/transactionMethodAdapter_abstractClass.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/transactionMethodAdapter_abstractClass.kt
index d59e245..361a336 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/transactionMethodAdapter_abstractClass.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/transactionMethodAdapter_abstractClass.kt
@@ -9,7 +9,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao() {
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/transactionMethodAdapter_interface.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/transactionMethodAdapter_interface.kt
index 790666a..0fec3af 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/transactionMethodAdapter_interface.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/transactionMethodAdapter_interface.kt
@@ -12,7 +12,7 @@
 import kotlin.jvm.JvmStatic
 
 @Generated(value = ["androidx.room.RoomProcessor"])
-@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION"])
+@Suppress(names = ["UNCHECKED_CAST", "DEPRECATION", "REDUNDANT_PROJECTION"])
 public class MyDao_Impl(
     __db: RoomDatabase,
 ) : MyDao {
diff --git a/room/room-runtime/src/main/java/androidx/room/InvalidationLiveDataContainer.kt b/room/room-runtime/src/main/java/androidx/room/InvalidationLiveDataContainer.kt
index 73e7ee6..de7ae79 100644
--- a/room/room-runtime/src/main/java/androidx/room/InvalidationLiveDataContainer.kt
+++ b/room/room-runtime/src/main/java/androidx/room/InvalidationLiveDataContainer.kt
@@ -34,7 +34,7 @@
     fun <T> create(
         tableNames: Array<out String>,
         inTransaction: Boolean,
-        computeFunction: Callable<T>
+        computeFunction: Callable<T?>
     ): LiveData<T> {
         return RoomTrackingLiveData(
             database,
diff --git a/room/room-runtime/src/main/java/androidx/room/InvalidationTracker.kt b/room/room-runtime/src/main/java/androidx/room/InvalidationTracker.kt
index 2088242..fedc82d 100644
--- a/room/room-runtime/src/main/java/androidx/room/InvalidationTracker.kt
+++ b/room/room-runtime/src/main/java/androidx/room/InvalidationTracker.kt
@@ -549,7 +549,7 @@
     @Deprecated("Use [createLiveData(String[], boolean, Callable)]")
     open fun <T> createLiveData(
         tableNames: Array<out String>,
-        computeFunction: Callable<T>
+        computeFunction: Callable<T?>
     ): LiveData<T> {
         return createLiveData(tableNames, false, computeFunction)
     }
@@ -573,7 +573,7 @@
     open fun <T> createLiveData(
         tableNames: Array<out String>,
         inTransaction: Boolean,
-        computeFunction: Callable<T>
+        computeFunction: Callable<T?>
     ): LiveData<T> {
         return invalidationLiveDataContainer.create(
             validateAndResolveTableNames(tableNames), inTransaction, computeFunction
diff --git a/room/room-runtime/src/main/java/androidx/room/RoomTrackingLiveData.kt b/room/room-runtime/src/main/java/androidx/room/RoomTrackingLiveData.kt
index 8b0d7a6..d4f19ab 100644
--- a/room/room-runtime/src/main/java/androidx/room/RoomTrackingLiveData.kt
+++ b/room/room-runtime/src/main/java/androidx/room/RoomTrackingLiveData.kt
@@ -43,7 +43,7 @@
     val database: RoomDatabase,
     private val container: InvalidationLiveDataContainer,
     val inTransaction: Boolean,
-    val computeFunction: Callable<T>,
+    val computeFunction: Callable<T?>,
     tableNames: Array<out String>
 ) : LiveData<T>() {
     val observer: InvalidationTracker.Observer = object : InvalidationTracker.Observer(tableNames) {
diff --git a/room/room-runtime/src/test/java/androidx/room/InvalidationLiveDataContainerTest.kt b/room/room-runtime/src/test/java/androidx/room/InvalidationLiveDataContainerTest.kt
index 550821f..62d6ecd 100644
--- a/room/room-runtime/src/test/java/androidx/room/InvalidationLiveDataContainerTest.kt
+++ b/room/room-runtime/src/test/java/androidx/room/InvalidationLiveDataContainerTest.kt
@@ -100,7 +100,7 @@
         return container.create(
             arrayOf("a", "b"),
             false,
-            createComputeFunction<Any>()
+            createComputeFunction()
         )
     }
 
diff --git a/room/room-rxjava2/api/restricted_current.txt b/room/room-rxjava2/api/restricted_current.txt
index 5505f93..090c028 100644
--- a/room/room-rxjava2/api/restricted_current.txt
+++ b/room/room-rxjava2/api/restricted_current.txt
@@ -13,7 +13,7 @@
     method public static io.reactivex.Observable<java.lang.Object!>! createObservable(androidx.room.RoomDatabase!, java.lang.String!...);
     method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Observable<T!>! createObservable(androidx.room.RoomDatabase!, String![]!, java.util.concurrent.Callable<T!>!);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Observable<T!>! createObservable(androidx.room.RoomDatabase!, boolean, String![]!, java.util.concurrent.Callable<T!>!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Single<T!>! createSingle(java.util.concurrent.Callable<T!>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Single<T!>! createSingle(java.util.concurrent.Callable<? extends T>!);
     field public static final Object! NOTHING;
   }
 
diff --git a/room/room-rxjava2/src/main/java/androidx/room/RxRoom.java b/room/room-rxjava2/src/main/java/androidx/room/RxRoom.java
index a0c6293..4e11cb7 100644
--- a/room/room-rxjava2/src/main/java/androidx/room/RxRoom.java
+++ b/room/room-rxjava2/src/main/java/androidx/room/RxRoom.java
@@ -224,7 +224,7 @@
      * @hide
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-    public static <T> Single<T> createSingle(final Callable<T> callable) {
+    public static <T> Single<T> createSingle(final Callable<? extends T> callable) {
         return Single.create(new SingleOnSubscribe<T>() {
             @Override
             public void subscribe(SingleEmitter<T> emitter) throws Exception {
diff --git a/room/room-rxjava3/api/restricted_current.txt b/room/room-rxjava3/api/restricted_current.txt
index 0680710..8e9be92 100644
--- a/room/room-rxjava3/api/restricted_current.txt
+++ b/room/room-rxjava3/api/restricted_current.txt
@@ -10,7 +10,7 @@
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.rxjava3.core.Flowable<T!> createFlowable(androidx.room.RoomDatabase, boolean, String![], java.util.concurrent.Callable<T!>);
     method public static io.reactivex.rxjava3.core.Observable<java.lang.Object!> createObservable(androidx.room.RoomDatabase, java.lang.String!...);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.rxjava3.core.Observable<T!> createObservable(androidx.room.RoomDatabase, boolean, String![], java.util.concurrent.Callable<T!>);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.rxjava3.core.Single<T!> createSingle(java.util.concurrent.Callable<T!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.rxjava3.core.Single<T!> createSingle(java.util.concurrent.Callable<? extends T>);
     field public static final Object NOTHING;
   }
 
diff --git a/room/room-rxjava3/src/main/java/androidx/room/rxjava3/RxRoom.java b/room/room-rxjava3/src/main/java/androidx/room/rxjava3/RxRoom.java
index 230dd83..3cb5c8a 100644
--- a/room/room-rxjava3/src/main/java/androidx/room/rxjava3/RxRoom.java
+++ b/room/room-rxjava3/src/main/java/androidx/room/rxjava3/RxRoom.java
@@ -170,7 +170,7 @@
      */
     @NonNull
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-    public static <T> Single<T> createSingle(@NonNull final Callable<T> callable) {
+    public static <T> Single<T> createSingle(@NonNull final Callable<? extends T> callable) {
         return Single.create(emitter -> {
             try {
                 emitter.onSuccess(callable.call());