[go: nahoru, domu]

Enable Room Kotlin codegen by default on KSP

For various room-compiler tests, Kotlin codegen was turn off since it would produce extra warning due to nullable collection return types. For other projects, abstract property DAO 'getter' was migrated to a function. Finally, for projects that turned ON Kotlin codegen explicitly, the argument code block was removed.

Bug: 330748742
Test: Existing
Change-Id: I646310d4e7dcaab46388b65597648bc76a67836e
diff --git a/paging/integration-tests/testapp/build.gradle b/paging/integration-tests/testapp/build.gradle
index 8b420e1..f198a5e 100644
--- a/paging/integration-tests/testapp/build.gradle
+++ b/paging/integration-tests/testapp/build.gradle
@@ -67,3 +67,7 @@
 tasks.withType(JavaCompile) {
     options.compilerArgs << "-parameters"
 }
+
+ksp {
+    arg('room.generateKotlin', 'false')
+}
diff --git a/room/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/RoomIncrementalAnnotationProcessingTest.kt b/room/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/RoomIncrementalAnnotationProcessingTest.kt
index 603cead..ae26317 100644
--- a/room/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/RoomIncrementalAnnotationProcessingTest.kt
+++ b/room/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/RoomIncrementalAnnotationProcessingTest.kt
@@ -161,6 +161,7 @@
             ksp {
                 arg('room.incremental', '$withIncrementalRoom')
                 arg('room.schemaLocation', '${projectRoot.resolve(GEN_RES_DIR).canonicalPath}')
+                arg('room.generateKotlin', 'false')
             }
             """.trimIndent()
         } else {
diff --git a/room/integration-tests/multiplatformtestapp/build.gradle b/room/integration-tests/multiplatformtestapp/build.gradle
index 2ec523d..a10ab82 100644
--- a/room/integration-tests/multiplatformtestapp/build.gradle
+++ b/room/integration-tests/multiplatformtestapp/build.gradle
@@ -129,5 +129,4 @@
     schemaDirectory(
             provider { layout.projectDirectory.dir("schemas-ksp").getAsFile().getAbsolutePath() }
     )
-    generateKotlin = true
 }
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/processor/Context.kt b/room/room-compiler/src/main/kotlin/androidx/room/processor/Context.kt
index 16cce2b..1e6377a 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/processor/Context.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/processor/Context.kt
@@ -31,7 +31,6 @@
 import androidx.room.verifier.DatabaseVerifier
 import androidx.room.vo.BuiltInConverterFlags
 import androidx.room.vo.Warning
-import javax.tools.Diagnostic
 
 class Context private constructor(
     val processingEnv: XProcessingEnv,
@@ -86,17 +85,16 @@
     }
 
     val codeLanguage: CodeLanguage by lazy {
-        if (BooleanProcessorOptions.GENERATE_KOTLIN.getValue(processingEnv)) {
-            if (processingEnv.backend == XProcessingEnv.Backend.KSP) {
+        if (processingEnv.backend == XProcessingEnv.Backend.KSP) {
+            if (BooleanProcessorOptions.GENERATE_KOTLIN.getValue(processingEnv)) {
                 CodeLanguage.KOTLIN
             } else {
-                processingEnv.messager.printMessage(
-                    Diagnostic.Kind.ERROR,
-                    "${BooleanProcessorOptions.GENERATE_KOTLIN.argName} can only be enabled in KSP."
-                )
                 CodeLanguage.JAVA
             }
         } else {
+            if (BooleanProcessorOptions.GENERATE_KOTLIN.getInputValue(processingEnv) == true) {
+                logger.e(ProcessorErrors.INVALID_KOTLIN_CODE_GEN_IN_JAVAC)
+            }
             CodeLanguage.JAVA
         }
     }
@@ -287,7 +285,7 @@
         INCREMENTAL("room.incremental", defaultValue = true),
         EXPAND_PROJECTION("room.expandProjection", defaultValue = false),
         USE_NULL_AWARE_CONVERTER("room.useNullAwareTypeAnalysis", defaultValue = false),
-        GENERATE_KOTLIN("room.generateKotlin", defaultValue = false),
+        GENERATE_KOTLIN("room.generateKotlin", defaultValue = true),
         EXPORT_SCHEMA_RESOURCE("room.exportSchemaResource", defaultValue = false);
 
         /**
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt b/room/room-compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
index 78e4106..2cdf066 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
@@ -1158,4 +1158,7 @@
 
     val INVALID_BLOCKING_DAO_FUNCTION_NON_ANDROID = "Only suspend functions are allowed in DAOs" +
         " declared in source sets targeting non-Android platforms."
+
+    val INVALID_KOTLIN_CODE_GEN_IN_JAVAC =
+        "${Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName} can only be enabled in KSP."
 }
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt
index eff1336..e8f12f5 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt
@@ -65,6 +65,7 @@
                 code = ENTITY_PREFIX.format(attributesReplacement, baseClassReplacement) +
                     input + ENTITY_SUFFIX
             ),
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
             classpath = classpathFiles
         ) { invocation ->
             val entity = invocation.roundEnv
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt
index 2758547..24b55f7 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt
@@ -764,6 +764,7 @@
                 ),
                 COMMON.USER
             ),
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
             classpath = classpathFiles
         ) { invocation: XTestInvocation ->
             val dao = invocation.roundEnv
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/DatabaseProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/DatabaseProcessorTest.kt
index f74dcbb..63fd4dc 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/DatabaseProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/DatabaseProcessorTest.kt
@@ -487,6 +487,7 @@
         )
         runProcessorTest(
             sources = listOf(BOOK, BOOK_DAO, DB1, DB2, db1_2),
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
             createProcessingSteps = { listOf(DatabaseProcessingStep()) }
         ) { result ->
             result.generatedSourceFileWithPath("foo/bar/Db1_Impl.java")
@@ -1465,7 +1466,10 @@
         )
         runProcessorTest(
             sources = listOf(dbSource, USER),
-            options = mapOf("room.schemaLocation" to "schemas/")
+            options = mapOf(
+                "room.schemaLocation" to "schemas/",
+                "room.generateKotlin" to "false"
+            )
         ) { invocation ->
             val dbAnnotationName = "androidx.room.Database"
             val roundElements = mapOf(
@@ -1537,7 +1541,10 @@
                 }
                 """
         )
-        runProcessorTest(sources = listOf(jvmNameInDaoGetter)) { invocation ->
+        runProcessorTest(
+            sources = listOf(jvmNameInDaoGetter),
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
+        ) { invocation ->
             val element = invocation.processingEnv.requireTypeElement("foo.bar.MyDb")
             DatabaseProcessor(
                 baseContext = invocation.context,
@@ -1614,7 +1621,8 @@
         body: (List<DatabaseView>, XTestInvocation) -> Unit
     ) {
         runProcessorTest(
-            sources = listOf(DB3, BOOK)
+            sources = listOf(DB3, BOOK),
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
         ) { invocation ->
             val database = invocation.roundEnv
                 .getElementsAnnotatedWith(
@@ -1665,6 +1673,7 @@
         )
         runProcessorTest(
             sources = listOf(BOOK, bookDao) + dbs,
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
             createProcessingSteps = { listOf(DatabaseProcessingStep()) },
         ) {
             onCompilationResult?.invoke(it)
@@ -1685,7 +1694,8 @@
                 ),
             classpath = classpath,
             options = mapOf(
-                "room.schemaLocation" to schemaFolder.root.absolutePath
+                "room.schemaLocation" to schemaFolder.root.absolutePath,
+                Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"
             )
         ) { invocation ->
             val entity = invocation.roundEnv
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/DeleteOrUpdateShortcutMethodProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/DeleteOrUpdateShortcutMethodProcessorTest.kt
index 7f7e12a..80de5d3 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/DeleteOrUpdateShortcutMethodProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/DeleteOrUpdateShortcutMethodProcessorTest.kt
@@ -795,7 +795,8 @@
             COMMON.GUAVA_ROOM
         )
         runProcessorTest(
-            sources = commonSources + additionalSources + inputSource
+            sources = commonSources + additionalSources + inputSource,
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
         ) { invocation ->
             val (owner, methods) = invocation.roundEnv
                 .getElementsAnnotatedWith(Dao::class.qualifiedName!!)
@@ -836,7 +837,8 @@
         )
 
         runProcessorTest(
-            sources = commonSources + additionalSources + inputSource
+            sources = commonSources + additionalSources + inputSource,
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
         ) { invocation ->
             val (owner, methods) = invocation.roundEnv
                 .getElementsAnnotatedWith(Dao::class.qualifiedName!!)
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/InsertOrUpsertShortcutMethodProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/InsertOrUpsertShortcutMethodProcessorTest.kt
index 45f42288..fa50917 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/InsertOrUpsertShortcutMethodProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/InsertOrUpsertShortcutMethodProcessorTest.kt
@@ -1122,7 +1122,8 @@
         )
 
         runProcessorTest(
-            sources = commonSources + additionalSources + inputSource
+            sources = commonSources + additionalSources + inputSource,
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
         ) { invocation ->
             val (owner, methods) = invocation.roundEnv
                 .getElementsAnnotatedWith(Dao::class.qualifiedName!!)
@@ -1162,7 +1163,8 @@
         )
 
         runProcessorTest(
-            sources = commonSources + additionalSources + inputSource
+            sources = commonSources + additionalSources + inputSource,
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
         ) { invocation ->
             val (owner, methods) = invocation.roundEnv
                 .getElementsAnnotatedWith(Dao::class.qualifiedName!!)
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 9c40b99..636a827 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
@@ -1309,9 +1309,11 @@
             COMMON.NOT_AN_ENTITY, COMMON.ARTIST, COMMON.SONG, COMMON.IMAGE, COMMON.IMAGE_FORMAT,
             COMMON.CONVERTER
         )
+        val allOptions =
+            mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false") + options
         runProcessorTest(
             sources = additionalSources + commonSources + inputSource,
-            options = options
+            options = allOptions
         ) { invocation ->
             val (owner, methods) = invocation.roundEnv
                 .getElementsAnnotatedWith(Dao::class.qualifiedName!!)
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/RawQueryMethodProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/RawQueryMethodProcessorTest.kt
index 805c6ea..c28313e 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/RawQueryMethodProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/RawQueryMethodProcessorTest.kt
@@ -672,7 +672,8 @@
             COMMON.IMAGE_FORMAT, COMMON.CONVERTER
         )
         runProcessorTest(
-            sources = commonSources + inputSource
+            sources = commonSources + inputSource,
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
         ) { invocation ->
             val (owner, methods) = invocation.roundEnv
                 .getElementsAnnotatedWith(Dao::class.qualifiedName!!)
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/RemoveUnusedColumnsTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/RemoveUnusedColumnsTest.kt
index 3c39305..439f503 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/RemoveUnusedColumnsTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/RemoveUnusedColumnsTest.kt
@@ -118,7 +118,8 @@
                 listOf(DatabaseProcessingStep())
             },
             options = mapOf(
-                "room.expandProjection" to enableExpandProjection.toString()
+                "room.expandProjection" to enableExpandProjection.toString(),
+                "room.generateKotlin" to "false",
             )
         ) { result ->
             validate(result)
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/solver/BuiltInConverterFlagsTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/solver/BuiltInConverterFlagsTest.kt
index c48870e..177e637 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/solver/BuiltInConverterFlagsTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/solver/BuiltInConverterFlagsTest.kt
@@ -24,6 +24,7 @@
 import androidx.room.compiler.processing.util.Source
 import androidx.room.compiler.processing.util.XTestInvocation
 import androidx.room.compiler.processing.util.runProcessorTest
+import androidx.room.processor.Context
 import androidx.room.processor.ProcessorErrors.CANNOT_FIND_COLUMN_TYPE_ADAPTER
 import androidx.room.processor.ProcessorErrors.CANNOT_FIND_CURSOR_READER
 import org.junit.Test
@@ -177,7 +178,8 @@
             dbAnnotation = dbAnnotation
         )
         runProcessorTest(
-            sources = listOf(source)
+            sources = listOf(source),
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
         ) { invocation ->
             val subject = invocation.processingEnv.requireTypeElement("MyDatabase")
             DatabaseProcessingStep().process(
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/solver/CustomTypeConverterResolutionTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/solver/CustomTypeConverterResolutionTest.kt
index f4ade0b..c188e08 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/solver/CustomTypeConverterResolutionTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/solver/CustomTypeConverterResolutionTest.kt
@@ -35,6 +35,7 @@
 import androidx.room.ext.CommonTypeNames
 import androidx.room.ext.RoomAnnotationTypeNames
 import androidx.room.ext.RoomTypeNames.ROOM_DB
+import androidx.room.processor.Context
 import androidx.room.processor.ProcessorErrors.CANNOT_BIND_QUERY_PARAMETER_INTO_STMT
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -259,6 +260,7 @@
         runProcessorTest(
             sources = sources + CUSTOM_TYPE_JFO + CUSTOM_TYPE_CONVERTER_JFO +
                 CUSTOM_TYPE_SET_CONVERTER_JFO,
+            options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
             createProcessingSteps = {
                 listOf(DatabaseProcessingStep())
             },
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/writer/DatabaseWriterTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/writer/DatabaseWriterTest.kt
index 253ff02..ed72d66 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/writer/DatabaseWriterTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/writer/DatabaseWriterTest.kt
@@ -22,6 +22,7 @@
 import androidx.room.compiler.processing.util.CompilationResultSubject
 import androidx.room.compiler.processing.util.Source
 import androidx.room.compiler.processing.util.runProcessorTest
+import androidx.room.processor.Context
 import androidx.testutils.generateAllEnumerations
 import loadTestSource
 import org.junit.Test
@@ -141,6 +142,7 @@
     ) + inputs
     runProcessorTest(
         sources = sources,
+        options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "false"),
         javacProcessors = listOf(RoomProcessor()),
         symbolProcessorProviders = listOf(RoomKspProcessor.Provider()),
         >
diff --git a/room/room-paging-guava/src/androidTest/kotlin/androidx/room/paging/guava/LimitOffsetListenableFuturePagingSourceTest.kt b/room/room-paging-guava/src/androidTest/kotlin/androidx/room/paging/guava/LimitOffsetListenableFuturePagingSourceTest.kt
index 0a621a1..af3980f 100644
--- a/room/room-paging-guava/src/androidTest/kotlin/androidx/room/paging/guava/LimitOffsetListenableFuturePagingSourceTest.kt
+++ b/room/room-paging-guava/src/androidTest/kotlin/androidx/room/paging/guava/LimitOffsetListenableFuturePagingSourceTest.kt
@@ -207,7 +207,7 @@
 
     @Test
     fun refresh_consecutively() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetListenableFuturePagingSourceImpl(db, true)
         val pagingSource2 = LimitOffsetListenableFuturePagingSourceImpl(db, true)
 
@@ -308,7 +308,7 @@
         }
     @Test
     fun refresh_onSuccess() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetListenableFuturePagingSourceImpl(db, true)
 
         val listenableFuture = pagingSource.refresh(key = 30)
@@ -336,7 +336,7 @@
 
     @Test
     fun append_onSuccess() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetListenableFuturePagingSourceImpl(db)
         pagingSource.itemCount.set(100) // bypass check for initial load
 
@@ -364,7 +364,7 @@
 
     @Test
     fun prepend_onSuccess() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetListenableFuturePagingSourceImpl(db)
         pagingSource.itemCount.set(100) // bypass check for initial load
 
@@ -632,7 +632,7 @@
 
     @Test
     fun refresh_AfterCancellation() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetListenableFuturePagingSourceImpl(db, true)
         pagingSource.itemCount.set(100) // bypass check for initial load
 
@@ -656,7 +656,7 @@
 
     @Test
     fun appendAgain_afterFutureCanceled() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetListenableFuturePagingSourceImpl(db)
         pagingSource.itemCount.set(100) // bypass check for initial load
 
@@ -680,7 +680,7 @@
 
     @Test
     fun prependAgain_afterFutureCanceled() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetListenableFuturePagingSourceImpl(db)
         pagingSource.itemCount.set(100) // bypass check for initial load
 
@@ -721,7 +721,7 @@
 
             // run this async separately from queryExecutor
             run {
-                db.dao.addItem(TestItem(101))
+                db.getDao().addItem(TestItem(101))
             }
 
             // tasks in queue [nonInitialLoad, InvalidationTracker(from additem)]
@@ -755,7 +755,7 @@
 
             // run this async separately from queryExecutor
             run {
-                db.dao.addItem(TestItem(101))
+                db.getDao().addItem(TestItem(101))
             }
 
             // tasks in queue [nonInitialLoad, InvalidationTracker(from additem)]
@@ -789,7 +789,7 @@
             }
         }
 
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val listenableFuture = pagingSource.refresh()
 
         val page = listenableFuture.await() as LoadResult.Page
@@ -812,7 +812,7 @@
             }
         }
 
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         pagingSource.itemCount.set(100)
         val listenableFuture = pagingSource.append(key = 50)
 
@@ -836,7 +836,7 @@
             }
         }
 
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         pagingSource.itemCount.set(100)
         val listenableFuture = pagingSource.prepend(key = 50)
 
@@ -875,7 +875,7 @@
             .build()
 
         runTest {
-            db.dao.addAllItems(ITEMS_LIST)
+            db.getDao().addAllItems(ITEMS_LIST)
             queryExecutor.executeAll() // InvalidationTracker from the addAllItems
           test(db, queryExecutor, transactionExecutor)
         }
@@ -1091,7 +1091,7 @@
 
 @Database(entities = [TestItem::class], version = 1, exportSchema = false)
 abstract class LimitOffsetTestDb : RoomDatabase() {
-    abstract val dao: TestItemDao
+    abstract fun getDao(): TestItemDao
 }
 
 @Entity(tableName = "TestItem")
diff --git a/room/room-paging-rxjava2/src/androidTest/kotlin/androidx/room/paging/rxjava2/LimitOffsetRxPagingSourceTest.kt b/room/room-paging-rxjava2/src/androidTest/kotlin/androidx/room/paging/rxjava2/LimitOffsetRxPagingSourceTest.kt
index fca3c49..84cf1d4 100644
--- a/room/room-paging-rxjava2/src/androidTest/kotlin/androidx/room/paging/rxjava2/LimitOffsetRxPagingSourceTest.kt
+++ b/room/room-paging-rxjava2/src/androidTest/kotlin/androidx/room/paging/rxjava2/LimitOffsetRxPagingSourceTest.kt
@@ -87,7 +87,7 @@
 
     @Test
     fun initialLoad() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.refresh()
         val result = single.await() as LoadResult.Page
@@ -98,7 +98,7 @@
 
     @Test
     fun simpleAppend() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.append(key = 15)
         val result = single.await() as LoadResult.Page
@@ -109,7 +109,7 @@
 
     @Test
     fun simplePrepend() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.prepend(key = 20)
         val result = single.await() as LoadResult.Page
@@ -120,7 +120,7 @@
 
     @Test
     fun initialLoad_invalidationTracker_isRegistered() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.refresh()
         // run loadSingle to register InvalidationTracker
@@ -131,7 +131,7 @@
 
     @Test
     fun nonInitialLoad_invalidationTracker_isRegistered() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.prepend(key = 20)
         // run loadSingle to register InvalidationTracker
@@ -142,7 +142,7 @@
 
     @Test
     fun refresh_singleImmediatelyReturn() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.refresh()
 
@@ -163,7 +163,7 @@
 
     @Test
     fun append_singleImmediatelyReturn() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.append(key = 10)
 
@@ -184,7 +184,7 @@
 
     @Test
     fun prepend_singleImmediatelyReturn() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.prepend(key = 15)
 
@@ -205,7 +205,7 @@
 
     @Test
     fun dbUpdate_invalidatesPagingSource() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.append(key = 50)
 
@@ -218,7 +218,7 @@
         assertFalse(pagingSource.invalid)
 
         // this should cause refreshVersionsSync to invalidate pagingSource
-        db.dao.addItem(TestItem(113))
+        db.getDao().addItem(TestItem(113))
         countingTaskExecutorRule.drainTasks(500, TimeUnit.MILLISECONDS)
 
         assertTrue(pagingSource.invalid)
@@ -230,7 +230,7 @@
 
     @Test
     fun append_returnsInvalid() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.append(key = 50)
 
@@ -248,7 +248,7 @@
 
     @Test
     fun prepend_returnsInvalid() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.prepend(key = 50)
 
@@ -268,7 +268,7 @@
 
     @Test
     fun refresh_consecutively() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.refresh()
         val result = single.await() as LoadResult.Page
@@ -286,7 +286,7 @@
 
     @Test
     fun append_consecutively() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         val single = pagingSource.append(key = 15)
@@ -310,7 +310,7 @@
 
     @Test
     fun prepend_consecutively() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         val single = pagingSource.prepend(key = 15)
@@ -334,7 +334,7 @@
 
     @Test
     fun refreshAgain_afterDispose() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         var isDisposed = false
@@ -359,7 +359,7 @@
 
     @Test
     fun appendAgain_afterDispose() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         var isDisposed = false
@@ -384,7 +384,7 @@
 
     @Test
     fun prependAgain_afterDispose() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         var isDisposed = false
@@ -416,7 +416,7 @@
         ).setQueryExecutor(queryExecutor)
             .build()
 
-        testDb.dao.addAllItems(ITEMS_LIST)
+        testDb.getDao().addAllItems(ITEMS_LIST)
         queryExecutor.executeAll() // add items first
 
         runTest {
@@ -454,7 +454,7 @@
             LimitOffsetTestDb::class.java
         ).build()
 
-        testDb.dao.addAllItems(ITEMS_LIST)
+        testDb.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(testDb)
 
         runBlocking {
@@ -490,7 +490,7 @@
             }
         }
 
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val single = pagingSource.refresh()
         val result = single.await() as LoadResult.Page
         assertThat(result.data).containsExactlyElementsIn(
@@ -509,7 +509,7 @@
             }
         }
 
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val single = pagingSource.append(key = 15)
         val result = single.await() as LoadResult.Page
         assertThat(result.data).containsExactlyElementsIn(
@@ -528,7 +528,7 @@
             }
         }
 
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val single = pagingSource.prepend(key = 15)
         val result = single.await() as LoadResult.Page
         assertThat(result.data).containsExactlyElementsIn(
@@ -673,7 +673,7 @@
 
 @Database(entities = [TestItem::class], version = 1, exportSchema = false)
 abstract class LimitOffsetTestDb : RoomDatabase() {
-    abstract val dao: TestItemDao
+    abstract fun getDao(): TestItemDao
 }
 
 @Entity(tableName = "TestItem")
diff --git a/room/room-paging-rxjava3/src/androidTest/kotlin/androidx/room/paging/rxjava3/LimitOffsetRxPagingSourceTest.kt b/room/room-paging-rxjava3/src/androidTest/kotlin/androidx/room/paging/rxjava3/LimitOffsetRxPagingSourceTest.kt
index 1684489..df8ac9b 100644
--- a/room/room-paging-rxjava3/src/androidTest/kotlin/androidx/room/paging/rxjava3/LimitOffsetRxPagingSourceTest.kt
+++ b/room/room-paging-rxjava3/src/androidTest/kotlin/androidx/room/paging/rxjava3/LimitOffsetRxPagingSourceTest.kt
@@ -87,7 +87,7 @@
 
     @Test
     fun initialLoad() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.refresh()
         val result = single.await() as LoadResult.Page
@@ -98,7 +98,7 @@
 
     @Test
     fun simpleAppend() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.append(key = 15)
         val result = single.await() as LoadResult.Page
@@ -109,7 +109,7 @@
 
     @Test
     fun simplePrepend() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.prepend(key = 20)
         val result = single.await() as LoadResult.Page
@@ -120,7 +120,7 @@
 
     @Test
     fun initialLoad_invalidationTracker_isRegistered() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.refresh()
         // run loadSingle to register InvalidationTracker
@@ -131,7 +131,7 @@
 
     @Test
     fun nonInitialLoad_invalidationTracker_isRegistered() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.prepend(key = 20)
         // run loadSingle to register InvalidationTracker
@@ -142,7 +142,7 @@
 
     @Test
     fun refresh_singleImmediatelyReturn() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.refresh()
 
@@ -163,7 +163,7 @@
 
     @Test
     fun append_singleImmediatelyReturn() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.append(key = 10)
 
@@ -184,7 +184,7 @@
 
     @Test
     fun prepend_singleImmediatelyReturn() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.prepend(key = 15)
 
@@ -205,7 +205,7 @@
 
     @Test
     fun dbUpdate_invalidatesPagingSource() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.append(key = 50)
 
@@ -218,7 +218,7 @@
         assertFalse(pagingSource.invalid)
 
         // this should cause refreshVersionsSync to invalidate pagingSource
-        db.dao.addItem(TestItem(113))
+        db.getDao().addItem(TestItem(113))
         countingTaskExecutorRule.drainTasks(500, TimeUnit.MILLISECONDS)
 
         assertTrue(pagingSource.invalid)
@@ -230,7 +230,7 @@
 
     @Test
     fun append_returnsInvalid() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.append(key = 50)
 
@@ -248,7 +248,7 @@
 
     @Test
     fun prepend_returnsInvalid() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.prepend(key = 50)
 
@@ -268,7 +268,7 @@
 
     @Test
     fun refresh_consecutively() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
         val single = pagingSource.refresh()
         val result = single.await() as LoadResult.Page
@@ -286,7 +286,7 @@
 
     @Test
     fun append_consecutively() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         val single = pagingSource.append(key = 15)
@@ -310,7 +310,7 @@
 
     @Test
     fun prepend_consecutively() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         val single = pagingSource.prepend(key = 15)
@@ -334,7 +334,7 @@
 
     @Test
     fun refreshAgain_afterDispose() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         var isDisposed = false
@@ -359,7 +359,7 @@
 
     @Test
     fun appendAgain_afterDispose() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         var isDisposed = false
@@ -384,7 +384,7 @@
 
     @Test
     fun prependAgain_afterDispose() = setupAndRun { db ->
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(db)
 
         var isDisposed = false
@@ -416,7 +416,7 @@
         ).setQueryExecutor(queryExecutor)
             .build()
 
-        testDb.dao.addAllItems(ITEMS_LIST)
+        testDb.getDao().addAllItems(ITEMS_LIST)
         queryExecutor.executeAll() // add items first
 
         runTest {
@@ -454,7 +454,7 @@
             LimitOffsetTestDb::class.java
         ).build()
 
-        testDb.dao.addAllItems(ITEMS_LIST)
+        testDb.getDao().addAllItems(ITEMS_LIST)
         val pagingSource = LimitOffsetRxPagingSourceImpl(testDb)
 
         runBlocking {
@@ -489,7 +489,7 @@
             }
         }
 
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val single = pagingSource.refresh()
         val result = single.await() as LoadResult.Page
         assertThat(result.data).containsExactlyElementsIn(
@@ -508,7 +508,7 @@
             }
         }
 
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val single = pagingSource.append(key = 15)
         val result = single.await() as LoadResult.Page
         assertThat(result.data).containsExactlyElementsIn(
@@ -527,7 +527,7 @@
             }
         }
 
-        db.dao.addAllItems(ITEMS_LIST)
+        db.getDao().addAllItems(ITEMS_LIST)
         val single = pagingSource.prepend(key = 15)
         val result = single.await() as LoadResult.Page
         assertThat(result.data).containsExactlyElementsIn(
@@ -672,7 +672,7 @@
 
 @Database(entities = [TestItem::class], version = 1, exportSchema = false)
 abstract class LimitOffsetTestDb : RoomDatabase() {
-    abstract val dao: TestItemDao
+    abstract fun getDao(): TestItemDao
 }
 
 @Entity(tableName = "TestItem")
diff --git a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
index 65518e8..6743669 100644
--- a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
+++ b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
@@ -68,7 +68,7 @@
             ApplicationProvider.getApplicationContext(),
             LimitOffsetTestDb::class.java,
         ).build()
-        dao = database.dao
+        dao = database.getDao()
     }
 
     @After
@@ -735,7 +735,7 @@
             it.run()
         }.setQueryExecutor(queryExecutor)
             .build()
-        dao = db.dao
+        dao = db.getDao()
     }
 
     @After
diff --git a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetTestDb.kt b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetTestDb.kt
index 8d31c44..6a9c989 100644
--- a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetTestDb.kt
+++ b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetTestDb.kt
@@ -21,5 +21,5 @@
 
 @Database(entities = [TestItem::class], version = 1, exportSchema = false)
 abstract class LimitOffsetTestDb : RoomDatabase() {
-    abstract val dao: TestItemDao
+    abstract fun getDao(): TestItemDao
 }
diff --git a/room/room-runtime/build.gradle b/room/room-runtime/build.gradle
index 8ba82d1..9d0c517 100644
--- a/room/room-runtime/build.gradle
+++ b/room/room-runtime/build.gradle
@@ -219,10 +219,6 @@
     add("kspAndroidAndroidTest", project(":room:room-compiler"))
 }
 
-ksp {
-    arg("room.generateKotlin", "true")
-}
-
 androidx {
     name = "Room-Runtime"
     type = LibraryType.PUBLISHED_LIBRARY