Update kotlin to 1.3.70

Test: ./gradlew bOS
Change-Id: Iabc24cc5deb43fcae60e2ad25ed2a38e42386ec5
diff --git a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/ExperimentalDateTimeKt.kt b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/ExperimentalDateTimeKt.kt
index dbb2289..6b85d78 100644
--- a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/ExperimentalDateTimeKt.kt
+++ b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/ExperimentalDateTimeKt.kt
@@ -16,6 +16,7 @@
 
 package sample
 
+@Suppress("DEPRECATION")
 @Experimental
 @Retention(AnnotationRetention.BINARY)
 @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
diff --git a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/ExperimentalLocationKt.kt b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/ExperimentalLocationKt.kt
index 635326e..431a4d2a 100644
--- a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/ExperimentalLocationKt.kt
+++ b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/ExperimentalLocationKt.kt
@@ -16,6 +16,7 @@
 
 package sample
 
+@Suppress("DEPRECATION")
 @Experimental
 @Retention(AnnotationRetention.BINARY)
 @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
diff --git a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/UseKtExperimentalFromJava.java b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/UseKtExperimentalFromJava.java
index e5e6423..94bf7c0 100644
--- a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/UseKtExperimentalFromJava.java
+++ b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/UseKtExperimentalFromJava.java
@@ -16,8 +16,6 @@
 
 package sample;
 
-import kotlin.UseExperimental;
-
 @SuppressWarnings({"unused", "WeakerAccess"})
 class UseKtExperimentalFromJava {
     /**
@@ -34,7 +32,8 @@
         return dateProvider.getDate();
     }
 
-    @UseExperimental(markerClass = ExperimentalDateTimeKt.class)
+    @SuppressWarnings("deprecation")
+    @kotlin.UseExperimental(markerClass = ExperimentalDateTimeKt.class)
     int getDateUseExperimental() {
         DateProviderKt dateProvider = new DateProviderKt();
         return dateProvider.getDate();
@@ -64,7 +63,8 @@
         return dateProvider.getDate() + locationProvider.getLocation();
     }
 
-    @UseExperimental(markerClass = ExperimentalDateTimeKt.class)
+    @SuppressWarnings("deprecation")
+    @kotlin.UseExperimental(markerClass = ExperimentalDateTimeKt.class)
     @ExperimentalLocationKt
     int getDateUseExperimentalLocationExperimental() {
         DateProviderKt dateProvider = new DateProviderKt();
@@ -72,7 +72,9 @@
         return dateProvider.getDate() + locationProvider.getLocation();
     }
 
-    @UseExperimental(markerClass = { ExperimentalDateTimeKt.class, ExperimentalLocationKt.class })
+    @SuppressWarnings("deprecation")
+    @kotlin.UseExperimental(markerClass = {ExperimentalDateTimeKt.class,
+            ExperimentalLocationKt.class})
     int getDateAndLocationUseExperimental() {
         DateProviderKt dateProvider = new DateProviderKt();
         LocationProviderKt locationProvider = new LocationProviderKt();
diff --git a/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/ExperimentalDetectorTest.kt b/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/ExperimentalDetectorTest.kt
index 34c9635..ba08e6a 100644
--- a/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/ExperimentalDetectorTest.kt
+++ b/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/ExperimentalDetectorTest.kt
@@ -125,39 +125,71 @@
 
         /* ktlint-disable max-line-length */
         val expected = """
-src/sample/UseKtExperimentalFromJava.java:27: Error: This declaration is experimental and its usage should be marked with
+src/sample/UseKtExperimentalFromJava.java:25: Error: This declaration is experimental and its usage should be marked with
 '@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
         DateProviderKt dateProvider = new DateProviderKt();
                                       ~~~~~~~~~~~~~~~~~~~~
-src/sample/UseKtExperimentalFromJava.java:28: Error: This declaration is experimental and its usage should be marked with
+src/sample/UseKtExperimentalFromJava.java:26: Error: This declaration is experimental and its usage should be marked with
 '@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
         return dateProvider.getDate();
                             ~~~~~~~
-src/sample/UseKtExperimentalFromJava.java:55: Error: This declaration is experimental and its usage should be marked with
+src/sample/UseKtExperimentalFromJava.java:38: Error: This declaration is experimental and its usage should be marked with
+'@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
+        DateProviderKt dateProvider = new DateProviderKt();
+                                      ~~~~~~~~~~~~~~~~~~~~
+src/sample/UseKtExperimentalFromJava.java:39: Error: This declaration is experimental and its usage should be marked with
+'@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
+        return dateProvider.getDate();
+                            ~~~~~~~
+src/sample/UseKtExperimentalFromJava.java:54: Error: This declaration is experimental and its usage should be marked with
 '@sample.ExperimentalLocationKt' or '@UseExperimental(markerClass = sample.ExperimentalLocationKt.class)' [UnsafeExperimentalUsageError]
         LocationProviderKt locationProvider = new LocationProviderKt();
                                               ~~~~~~~~~~~~~~~~~~~~~~~~
-src/sample/UseKtExperimentalFromJava.java:56: Error: This declaration is experimental and its usage should be marked with
+src/sample/UseKtExperimentalFromJava.java:55: Error: This declaration is experimental and its usage should be marked with
 '@sample.ExperimentalLocationKt' or '@UseExperimental(markerClass = sample.ExperimentalLocationKt.class)' [UnsafeExperimentalUsageError]
         return dateProvider.getDate() + locationProvider.getLocation();
                                                          ~~~~~~~~~~~
-src/sample/UseKtExperimentalFromJava.java:86: Error: This declaration is experimental and its usage should be marked with
+src/sample/UseKtExperimentalFromJava.java:70: Error: This declaration is experimental and its usage should be marked with
+'@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
+        DateProviderKt dateProvider = new DateProviderKt();
+                                      ~~~~~~~~~~~~~~~~~~~~
+src/sample/UseKtExperimentalFromJava.java:72: Error: This declaration is experimental and its usage should be marked with
+'@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
+        return dateProvider.getDate() + locationProvider.getLocation();
+                            ~~~~~~~
+src/sample/UseKtExperimentalFromJava.java:79: Error: This declaration is experimental and its usage should be marked with
+'@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
+        DateProviderKt dateProvider = new DateProviderKt();
+                                      ~~~~~~~~~~~~~~~~~~~~
+src/sample/UseKtExperimentalFromJava.java:80: Error: This declaration is experimental and its usage should be marked with
+'@sample.ExperimentalLocationKt' or '@UseExperimental(markerClass = sample.ExperimentalLocationKt.class)' [UnsafeExperimentalUsageError]
+        LocationProviderKt locationProvider = new LocationProviderKt();
+                                              ~~~~~~~~~~~~~~~~~~~~~~~~
+src/sample/UseKtExperimentalFromJava.java:81: Error: This declaration is experimental and its usage should be marked with
+'@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
+        return dateProvider.getDate() + locationProvider.getLocation();
+                            ~~~~~~~
+src/sample/UseKtExperimentalFromJava.java:81: Error: This declaration is experimental and its usage should be marked with
+'@sample.ExperimentalLocationKt' or '@UseExperimental(markerClass = sample.ExperimentalLocationKt.class)' [UnsafeExperimentalUsageError]
+        return dateProvider.getDate() + locationProvider.getLocation();
+                                                         ~~~~~~~~~~~
+src/sample/UseKtExperimentalFromJava.java:88: Error: This declaration is experimental and its usage should be marked with
 '@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
         TimeProviderKt.getTimeStatically();
                        ~~~~~~~~~~~~~~~~~
-src/sample/UseKtExperimentalFromJava.java:87: Error: This declaration is experimental and its usage should be marked with
+src/sample/UseKtExperimentalFromJava.java:89: Error: This declaration is experimental and its usage should be marked with
 '@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
         TimeProviderKt.Companion.getTimeStatically();
                                  ~~~~~~~~~~~~~~~~~
-src/sample/UseKtExperimentalFromJava.java:94: Error: This declaration is experimental and its usage should be marked with
+src/sample/UseKtExperimentalFromJava.java:96: Error: This declaration is experimental and its usage should be marked with
 '@sample.ExperimentalDateTimeKt' or '@UseExperimental(markerClass = sample.ExperimentalDateTimeKt.class)' [UnsafeExperimentalUsageError]
         new TimeProviderKt().getTime();
                              ~~~~~~~
-src/sample/UseKtExperimentalFromJava.java:95: Error: This declaration is experimental and its usage should be marked with
+src/sample/UseKtExperimentalFromJava.java:97: Error: This declaration is experimental and its usage should be marked with
 '@sample.ExperimentalDateTime' or '@UseExperimental(markerClass = sample.ExperimentalDateTime.class)' [UnsafeExperimentalUsageError]
         new TimeProviderKt().getTimeJava();
                              ~~~~~~~~~~~
-8 errors, 0 warnings
+16 errors, 0 warnings
         """.trimIndent()
         /* ktlint-enable max-line-length */
 
diff --git a/benchmark/common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt b/benchmark/common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
index 2d64160..47d40f1 100644
--- a/benchmark/common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
+++ b/benchmark/common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
@@ -17,6 +17,7 @@
 package androidx.benchmark
 
 import android.Manifest
+import androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.rule.GrantPermissionRule
@@ -180,7 +181,8 @@
         }
     }
 
-    @UseExperimental(BenchmarkState.Companion.ExperimentalExternalReport::class)
+    @Suppress("DEPRECATION")
+    @UseExperimental(ExperimentalExternalReport::class)
     @Test
     fun reportResult() {
         BenchmarkState.reportData(
diff --git a/benchmark/common/src/main/java/androidx/benchmark/BenchmarkState.kt b/benchmark/common/src/main/java/androidx/benchmark/BenchmarkState.kt
index 4cee094..0deb123 100644
--- a/benchmark/common/src/main/java/androidx/benchmark/BenchmarkState.kt
+++ b/benchmark/common/src/main/java/androidx/benchmark/BenchmarkState.kt
@@ -209,7 +209,8 @@
             ProfilingMode.ConnectedAllocation, ProfilingMode.ConnectedSampled -> {
                 Thread.sleep(CONNECTED_PROFILING_SLEEP_MS)
             }
-            else -> {}
+            else -> {
+            }
         }
 
         maxIterations = OVERRIDE_ITERATIONS ?: computeIterationsFromWarmup()
@@ -231,7 +232,8 @@
             ProfilingMode.ConnectedAllocation, ProfilingMode.ConnectedSampled -> {
                 Thread.sleep(CONNECTED_PROFILING_SLEEP_MS)
             }
-            else -> {}
+            else -> {
+            }
         }
         ThreadPriority.resetBumpedThread()
         warmupManager.logInfo()
@@ -417,6 +419,7 @@
         thermalThrottleSleepSeconds = thermalThrottleSleepSeconds,
         warmupIterations = warmupIteration
     )
+
     internal fun getReport() = checkState().run { getReport("", "") }
 
     /**
@@ -511,6 +514,7 @@
 
         private var firstBenchmark = true
 
+        @Suppress("DEPRECATION")
         @Experimental
         @Retention(AnnotationRetention.BINARY)
         @Target(AnnotationTarget.FUNCTION)
diff --git a/buildSrc/build_dependencies.gradle b/buildSrc/build_dependencies.gradle
index aeafc41..886c31c 100644
--- a/buildSrc/build_dependencies.gradle
+++ b/buildSrc/build_dependencies.gradle
@@ -24,7 +24,7 @@
     build_versions.agp = "4.0.0-alpha01"
     build_versions.lint = "27.0.0-alpha01"
 } else {
-    build_versions.kotlin = "1.3.60"
+    build_versions.kotlin = "1.3.70"
     build_versions.agp = '3.6.1'
     build_versions.lint = '26.6.1'
 }
diff --git a/inspection/inspection-testing/build.gradle b/inspection/inspection-testing/build.gradle
index f35b97a..9884163 100644
--- a/inspection/inspection-testing/build.gradle
+++ b/inspection/inspection-testing/build.gradle
@@ -14,12 +14,13 @@
  * limitations under the License.
  */
 
-import androidx.build.LibraryGroups
-import androidx.build.LibraryVersions
+
 import androidx.build.AndroidXExtension
+import androidx.build.LibraryGroups
+import androidx.build.Publish
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 import static androidx.build.dependencies.DependenciesKt.*
-import androidx.build.Publish
 
 plugins {
     id("AndroidXPlugin")
@@ -48,3 +49,10 @@
     description = "Experimental AndroidX Inspection Project"
     url = AndroidXExtension.ARCHITECTURE_URL
 }
+
+// Allow usage of Kotlin's @OptIn.
+tasks.withType(KotlinCompile).configureEach {
+    kotlinOptions {
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
+    }
+}
diff --git a/inspection/inspection-testing/src/androidTest/java/androidx/inspection/testing/EchoInspectionTest.kt b/inspection/inspection-testing/src/androidTest/java/androidx/inspection/testing/EchoInspectionTest.kt
index 460efcc..1b86a64 100644
--- a/inspection/inspection-testing/src/androidTest/java/androidx/inspection/testing/EchoInspectionTest.kt
+++ b/inspection/inspection-testing/src/androidTest/java/androidx/inspection/testing/EchoInspectionTest.kt
@@ -21,6 +21,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.cancelAndJoin
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.runBlocking
@@ -33,6 +34,7 @@
 class EchoInspectionTest {
 
     @Test
+    @OptIn(ExperimentalCoroutinesApi::class)
     fun pingPongTest() = runBlocking {
         val inspectorTester = InspectorTester(ECHO_INSPECTION_ID)
         assertThat(inspectorTester.channel.isEmpty).isTrue()
@@ -49,6 +51,7 @@
     }
 
     @Test
+    @OptIn(ExperimentalCoroutinesApi::class)
     fun testCancellation() = runBlocking {
         val inspectorTester = InspectorTester(ECHO_INSPECTION_ID)
         assertThat(inspectorTester.channel.isEmpty).isTrue()
diff --git a/lifecycle/integration-tests/kotlintestapp/build.gradle b/lifecycle/integration-tests/kotlintestapp/build.gradle
index 48d5266..4b4752a 100644
--- a/lifecycle/integration-tests/kotlintestapp/build.gradle
+++ b/lifecycle/integration-tests/kotlintestapp/build.gradle
@@ -17,6 +17,7 @@
 //./gradlew :r:in:k:clean :r:in:k:cC --no-daemon
 // -Dorg.gradle.debug=true
 // -Dkotlin.compiler.execution.strategy="in-process"
+
 import static androidx.build.dependencies.DependenciesKt.*
 
 plugins {
@@ -46,6 +47,8 @@
 
 android {
     kotlinOptions {
+        // Allow usage of Kotlin's @OptIn.
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
         jvmTarget = '1.8' // necessary to use espresso kotlin extensions
     }
     sourceSets {
diff --git a/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt b/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt
index 66cade5..a7af7fe 100644
--- a/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt
+++ b/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt
@@ -19,6 +19,7 @@
 import androidx.lifecycle.testing.TestLifecycleOwner
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.async
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
@@ -29,6 +30,7 @@
 import org.junit.Test
 import java.util.concurrent.CancellationException
 
+@OptIn(ExperimentalCoroutinesApi::class)
 abstract class LifecycleCoroutineScopeTestBase {
     @Test
     fun initialization() {
diff --git a/lifecycle/lifecycle-livedata-ktx/build.gradle b/lifecycle/lifecycle-livedata-ktx/build.gradle
index 85170c5..e169c26 100644
--- a/lifecycle/lifecycle-livedata-ktx/build.gradle
+++ b/lifecycle/lifecycle-livedata-ktx/build.gradle
@@ -14,6 +14,9 @@
  * limitations under the License.
  */
 
+
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 import static androidx.build.dependencies.DependenciesKt.*
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
@@ -33,8 +36,11 @@
     }
 }
 
-tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-    kotlinOptions.freeCompilerArgs += ["-Xuse-experimental=kotlin.Experimental"]
+// Allow usage of Kotlin's @OptIn.
+tasks.withType(KotlinCompile).configureEach {
+    kotlinOptions {
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
+    }
 }
 
 dependencies {
diff --git a/lifecycle/lifecycle-livedata-ktx/src/main/java/androidx/lifecycle/CoroutineLiveData.kt b/lifecycle/lifecycle-livedata-ktx/src/main/java/androidx/lifecycle/CoroutineLiveData.kt
index 85e4f18..3ee2762 100644
--- a/lifecycle/lifecycle-livedata-ktx/src/main/java/androidx/lifecycle/CoroutineLiveData.kt
+++ b/lifecycle/lifecycle-livedata-ktx/src/main/java/androidx/lifecycle/CoroutineLiveData.kt
@@ -344,7 +344,7 @@
  * ([LiveData.hasActiveObservers]. Defaults to [DEFAULT_TIMEOUT].
  * @param block The block to run when the [LiveData] has active observers.
  */
-@UseExperimental(ExperimentalTypeInference::class)
+@OptIn(ExperimentalTypeInference::class)
 fun <T> liveData(
     context: CoroutineContext = EmptyCoroutineContext,
     timeoutInMs: Long = DEFAULT_TIMEOUT,
@@ -450,7 +450,7 @@
  * @param block The block to run when the [LiveData] has active observers.
  */
 @RequiresApi(Build.VERSION_CODES.O)
-@UseExperimental(ExperimentalTypeInference::class)
+@OptIn(ExperimentalTypeInference::class)
 fun <T> liveData(
     context: CoroutineContext = EmptyCoroutineContext,
     timeout: Duration,
diff --git a/lifecycle/lifecycle-runtime-ktx/build.gradle b/lifecycle/lifecycle-runtime-ktx/build.gradle
index 2020f40..f16269f 100644
--- a/lifecycle/lifecycle-runtime-ktx/build.gradle
+++ b/lifecycle/lifecycle-runtime-ktx/build.gradle
@@ -14,10 +14,13 @@
  * limitations under the License.
  */
 
-import static androidx.build.dependencies.DependenciesKt.*
+
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
 import androidx.build.Publish
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+import static androidx.build.dependencies.DependenciesKt.*
 
 plugins {
     id("AndroidXPlugin")
@@ -60,3 +63,10 @@
     inceptionYear = "2019"
     description = "Kotlin extensions for 'lifecycle' artifact"
 }
+
+// Allow usage of Kotlin's @OptIn.
+tasks.withType(KotlinCompile).configureEach {
+    kotlinOptions {
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
+    }
+}
diff --git a/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/PausingDispatcherTest.kt b/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/PausingDispatcherTest.kt
index e8b67e7e..32cf031 100644
--- a/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/PausingDispatcherTest.kt
+++ b/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/PausingDispatcherTest.kt
@@ -24,6 +24,7 @@
 import kotlinx.coroutines.CoroutineExceptionHandler
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.InternalCoroutinesApi
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.asCoroutineDispatcher
@@ -70,6 +71,7 @@
     private val expectations = Expectations()
     private lateinit var mainThread: Thread
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     @Before
     fun updateMainHandlerAndDispatcher() {
         Dispatchers.setMain(mainExecutor.asCoroutineDispatcher())
@@ -79,6 +81,7 @@
         }
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     @After
     fun clearHandlerAndDispatcher() {
         waitTestingScopeChildren()
diff --git a/paging/common/build.gradle b/paging/common/build.gradle
index f968e9c..e10fc77 100644
--- a/paging/common/build.gradle
+++ b/paging/common/build.gradle
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
+
 import androidx.build.AndroidXExtension
 import androidx.build.LibraryGroups
-import androidx.build.LibraryVersions
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
@@ -55,9 +55,9 @@
     url = AndroidXExtension.ARCHITECTURE_URL
 }
 
-// Allow usage of Kotlin's @Experimental annotation, which is itself experimental.
+// Allow usage of Kotlin's @OptIn.
 tasks.withType(KotlinCompile).configureEach {
     kotlinOptions {
-        freeCompilerArgs += ["-Xuse-experimental=kotlin.Experimental"]
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
     }
 }
diff --git a/paging/common/src/main/kotlin/androidx/paging/CachedPageEventFlow.kt b/paging/common/src/main/kotlin/androidx/paging/CachedPageEventFlow.kt
index 6f904f6..0952fe8 100644
--- a/paging/common/src/main/kotlin/androidx/paging/CachedPageEventFlow.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/CachedPageEventFlow.kt
@@ -19,6 +19,7 @@
 import androidx.annotation.VisibleForTesting
 import androidx.paging.multicast.Multicaster
 import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.channels.ClosedSendChannelException
 import kotlinx.coroutines.flow.Flow
@@ -38,6 +39,7 @@
  * An intermediate flow producer that flattens previous page events and gives any new downstream
  * just those events instead of the full history.
  */
+@OptIn(ExperimentalCoroutinesApi::class)
 internal class CachedPageEventFlow<T : Any>(
     src: Flow<PageEvent<T>>,
     scope: CoroutineScope
@@ -121,6 +123,7 @@
      */
     private val historyChannel: Channel<IndexedValue<PageEvent<T>>> = Channel(Channel.UNLIMITED)
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     fun consumeHistory() = historyChannel.consumeAsFlow()
 
     /**
diff --git a/paging/common/src/main/kotlin/androidx/paging/CachedPagingData.kt b/paging/common/src/main/kotlin/androidx/paging/CachedPagingData.kt
index f134aca..5778cd3 100644
--- a/paging/common/src/main/kotlin/androidx/paging/CachedPagingData.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/CachedPagingData.kt
@@ -22,6 +22,7 @@
 import androidx.paging.ActiveFlowTracker.FlowType.PAGE_EVENT_FLOW
 import androidx.paging.multicast.Multicaster
 import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.flow.mapNotNull
@@ -29,6 +30,7 @@
 import kotlinx.coroutines.flow.onStart
 import kotlinx.coroutines.flow.scan
 
+@OptIn(ExperimentalCoroutinesApi::class)
 private class MulticastedPagingData<T : Any>(
     val scope: CoroutineScope,
     val parent: PagingData<T>,
@@ -76,6 +78,7 @@
     scope: CoroutineScope
 ) = cachedIn(scope, null)
 
+@OptIn(ExperimentalCoroutinesApi::class)
 internal fun <T : Any> Flow<PagingData<T>>.cachedIn(
     scope: CoroutineScope,
     // used in tests
diff --git a/paging/common/src/main/kotlin/androidx/paging/CancelableChannelFlow.kt b/paging/common/src/main/kotlin/androidx/paging/CancelableChannelFlow.kt
index e95c7f5..a5bc4a3 100644
--- a/paging/common/src/main/kotlin/androidx/paging/CancelableChannelFlow.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/CancelableChannelFlow.kt
@@ -16,13 +16,14 @@
 
 package androidx.paging
 
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.channels.ProducerScope
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.channelFlow
 import kotlin.experimental.ExperimentalTypeInference
 
-@UseExperimental(ExperimentalTypeInference::class)
+@OptIn(ExperimentalCoroutinesApi::class, ExperimentalTypeInference::class)
 internal fun <T> cancelableChannelFlow(
     controller: Job,
     @BuilderInference block: suspend ProducerScope<T>.() -> Unit
diff --git a/paging/common/src/main/kotlin/androidx/paging/PageFetcher.kt b/paging/common/src/main/kotlin/androidx/paging/PageFetcher.kt
index c8f1629..ac4baa0 100644
--- a/paging/common/src/main/kotlin/androidx/paging/PageFetcher.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/PageFetcher.kt
@@ -16,6 +16,8 @@
 
 package androidx.paging
 
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.FlowPreview
 import kotlinx.coroutines.channels.ConflatedBroadcastChannel
 import kotlinx.coroutines.flow.asFlow
 import kotlinx.coroutines.flow.filterNotNull
@@ -23,6 +25,7 @@
 import kotlinx.coroutines.flow.onStart
 import kotlinx.coroutines.flow.scan
 
+@OptIn(ExperimentalCoroutinesApi::class, FlowPreview::class)
 internal class PageFetcher<Key : Any, Value : Any>(
     private val pagingSourceFactory: () -> PagingSource<Key, Value>,
     private val initialKey: Key?,
diff --git a/paging/common/src/main/kotlin/androidx/paging/Pager.kt b/paging/common/src/main/kotlin/androidx/paging/Pager.kt
index 43fad8c..c7deae9 100644
--- a/paging/common/src/main/kotlin/androidx/paging/Pager.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/Pager.kt
@@ -27,6 +27,8 @@
 import androidx.paging.PagingSource.LoadParams
 import androidx.paging.PagingSource.LoadResult
 import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.FlowPreview
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.channels.BroadcastChannel
 import kotlinx.coroutines.channels.Channel
@@ -59,6 +61,7 @@
     private val config: PagingConfig
 ) {
     private val retryChannel = Channel<Unit>(CONFLATED)
+    @OptIn(ExperimentalCoroutinesApi::class)
     private val hintChannel = BroadcastChannel<ViewportHint>(CONFLATED)
     private var lastHint: ViewportHint? = null
 
@@ -68,6 +71,7 @@
     private val state = PagerState<Key, Value>(config.pageSize, config.maxSize)
 
     private val pageEventChannelFlowJob = Job()
+    @OptIn(ExperimentalCoroutinesApi::class)
     val pageEventFlow: Flow<PageEvent<Value>> = cancelableChannelFlow(pageEventChannelFlowJob) {
         check(pageEventChCollected.compareAndSet(false, true)) {
             "cannot collect twice from pager"
@@ -115,6 +119,7 @@
         }
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     fun addHint(hint: ViewportHint) {
         lastHint = hint
         hintChannel.offer(hint)
@@ -160,6 +165,7 @@
         }
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     private fun CoroutineScope.startConsumingHints() {
         launch {
             state.consumePrependGenerationIdAsFlow()
@@ -177,6 +183,7 @@
                         }
                     }
 
+                    @OptIn(FlowPreview::class)
                     val generationalHints = hintChannel.asFlow()
                         // Prevent infinite loop when competing prepend / append cancel each other
                         .drop(if (generationId == 0) 0 else 1)
@@ -207,6 +214,7 @@
                         }
                     }
 
+                    @OptIn(FlowPreview::class)
                     val generationalHints = hintChannel.asFlow()
                         // Prevent infinite loop when competing prepend / append cancel each other
                         .drop(if (generationId == 0) 0 else 1)
diff --git a/paging/common/src/main/kotlin/androidx/paging/PagerState.kt b/paging/common/src/main/kotlin/androidx/paging/PagerState.kt
index fa39b43..c15699b 100644
--- a/paging/common/src/main/kotlin/androidx/paging/PagerState.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/PagerState.kt
@@ -25,6 +25,7 @@
 import androidx.paging.PageEvent.Insert.Companion.Start
 import androidx.paging.PagingSource.LoadResult.Page
 import androidx.paging.PagingSource.LoadResult.Page.Companion.COUNT_UNDEFINED
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.consumeAsFlow
@@ -58,11 +59,13 @@
         END to Idle
     )
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     fun consumePrependGenerationIdAsFlow(): Flow<Int> {
         return prependLoadIdCh.consumeAsFlow()
             .onStart { prependLoadIdCh.offer(prependLoadId) }
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     fun consumeAppendGenerationIdAsFlow(): Flow<Int> {
         return appendLoadIdCh.consumeAsFlow()
             .onStart { appendLoadIdCh.offer(appendLoadId) }
diff --git a/paging/common/src/main/kotlin/androidx/paging/multicast/Multicaster.kt b/paging/common/src/main/kotlin/androidx/paging/multicast/Multicaster.kt
index 9196062..18d85e5 100644
--- a/paging/common/src/main/kotlin/androidx/paging/multicast/Multicaster.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/multicast/Multicaster.kt
@@ -17,6 +17,7 @@
 package androidx.paging.multicast
 
 import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.consumeAsFlow
@@ -71,6 +72,7 @@
         )
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     val flow = flow<T> {
         val channel = Channel<ChannelManager.Message.Dispatch.Value<T>>(Channel.UNLIMITED)
         val subFlow = channel.consumeAsFlow()
diff --git a/paging/common/src/main/kotlin/androidx/paging/multicast/SharedFlowProducer.kt b/paging/common/src/main/kotlin/androidx/paging/multicast/SharedFlowProducer.kt
index 81b4b99..5273aac 100644
--- a/paging/common/src/main/kotlin/androidx/paging/multicast/SharedFlowProducer.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/multicast/SharedFlowProducer.kt
@@ -18,6 +18,7 @@
 import androidx.paging.multicast.ChannelManager.Message.Dispatch.UpstreamFinished
 import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.cancelAndJoin
 import kotlinx.coroutines.channels.ClosedSendChannelException
@@ -46,6 +47,7 @@
     /**
      * Starts the collection of the upstream flow.
      */
+    @OptIn(ExperimentalCoroutinesApi::class)
     fun start() {
         scope.launch {
             try {
diff --git a/paging/common/src/main/kotlin/androidx/paging/multicast/StoreRealActor.kt b/paging/common/src/main/kotlin/androidx/paging/multicast/StoreRealActor.kt
index 30fec47e..ce499c7 100644
--- a/paging/common/src/main/kotlin/androidx/paging/multicast/StoreRealActor.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/multicast/StoreRealActor.kt
@@ -17,6 +17,7 @@
 
 import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ObsoleteCoroutinesApi
 import kotlinx.coroutines.channels.SendChannel
 import kotlinx.coroutines.channels.actor
 import java.util.concurrent.atomic.AtomicBoolean
@@ -33,6 +34,7 @@
     private val didClose = AtomicBoolean(false)
 
     init {
+        @OptIn(ObsoleteCoroutinesApi::class)
         inboundChannel = scope.actor(
             capacity = 0
         ) {
diff --git a/paging/runtime/build.gradle b/paging/runtime/build.gradle
index e655555..b3c7f685 100644
--- a/paging/runtime/build.gradle
+++ b/paging/runtime/build.gradle
@@ -17,7 +17,6 @@
 
 import androidx.build.AndroidXExtension
 import androidx.build.LibraryGroups
-import androidx.build.LibraryVersions
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
@@ -70,9 +69,9 @@
     url = AndroidXExtension.ARCHITECTURE_URL
 }
 
-// Allow usage of Kotlin's @Experimental annotation, which is itself experimental.
+// Allow usage of Kotlin's @OptIn.
 tasks.withType(KotlinCompile).configureEach {
     kotlinOptions {
-        freeCompilerArgs += ["-Xuse-experimental=kotlin.Experimental"]
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
     }
 }
diff --git a/paging/runtime/src/androidTest/java/androidx/paging/AsyncPagingDataDifferTest.kt b/paging/runtime/src/androidTest/java/androidx/paging/AsyncPagingDataDifferTest.kt
index aff568c..eee83c2 100644
--- a/paging/runtime/src/androidTest/java/androidx/paging/AsyncPagingDataDifferTest.kt
+++ b/paging/runtime/src/androidTest/java/androidx/paging/AsyncPagingDataDifferTest.kt
@@ -33,6 +33,7 @@
 import androidx.testutils.MainDispatcherRule
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.flow.collect
 import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.launch
@@ -80,6 +81,7 @@
     val loadState: LoadState
 )
 
+@OptIn(ExperimentalCoroutinesApi::class)
 @SmallTest
 @RunWith(JUnit4::class)
 class AsyncPagingDataDifferTest {
diff --git a/paging/runtime/src/androidTest/java/androidx/paging/LivePagedListBuilderTest.kt b/paging/runtime/src/androidTest/java/androidx/paging/LivePagedListBuilderTest.kt
index 90435cb..79bc856 100644
--- a/paging/runtime/src/androidTest/java/androidx/paging/LivePagedListBuilderTest.kt
+++ b/paging/runtime/src/androidTest/java/androidx/paging/LivePagedListBuilderTest.kt
@@ -29,6 +29,7 @@
 import androidx.testutils.TestDispatcher
 import androidx.testutils.TestExecutor
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.Runnable
 import kotlinx.coroutines.test.resetMain
 import kotlinx.coroutines.test.setMain
@@ -56,6 +57,7 @@
         val state: LoadState
     )
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     @Before
     fun setup() {
         Dispatchers.setMain(mainDispatcher)
@@ -75,6 +77,7 @@
         lifecycleOwner.handleLifecycleEvent(Lifecycle.Event.ON_START)
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     @After
     fun teardown() {
         lifecycleOwner.handleLifecycleEvent(Lifecycle.Event.ON_STOP)
diff --git a/paging/rxjava2/build.gradle b/paging/rxjava2/build.gradle
index 09adcf3..b751472 100644
--- a/paging/rxjava2/build.gradle
+++ b/paging/rxjava2/build.gradle
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-import androidx.build.LibraryGroups
-import androidx.build.LibraryVersions
+
 import androidx.build.AndroidXExtension
+import androidx.build.LibraryGroups
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
@@ -54,9 +54,9 @@
     url = AndroidXExtension.ARCHITECTURE_URL
 }
 
-// Allow usage of Kotlin's @Experimental annotation, which is itself experimental.
+// Allow usage of Kotlin's @OptIn.
 tasks.withType(KotlinCompile).configureEach {
     kotlinOptions {
-        freeCompilerArgs += [ "-Xuse-experimental=kotlin.Experimental" ]
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
     }
 }
diff --git a/paging/rxjava2/src/main/java/androidx/paging/CachedInConverter.kt b/paging/rxjava2/src/main/java/androidx/paging/CachedInConverter.kt
index 17c8e76..a1379ee 100644
--- a/paging/rxjava2/src/main/java/androidx/paging/CachedInConverter.kt
+++ b/paging/rxjava2/src/main/java/androidx/paging/CachedInConverter.kt
@@ -46,7 +46,7 @@
  *
  * @see cachedIn
  */
-@UseExperimental(ExperimentalCoroutinesApi::class)
+@OptIn(ExperimentalCoroutinesApi::class)
 class CachedInConverter<T : Any>(
     private val scope: CoroutineScope
 ) : FlowableConverter<PagingData<T>, Flowable<PagingData<T>>>,
@@ -73,7 +73,7 @@
  *
  * @see CachedInConverter
  */
-@UseExperimental(ExperimentalCoroutinesApi::class)
+@OptIn(ExperimentalCoroutinesApi::class)
 fun <T : Any> Observable<PagingData<T>>.cachedIn(scope: CoroutineScope): Observable<PagingData<T>> {
     return toFlowable(BackpressureStrategy.LATEST)
         .asFlow()
@@ -94,7 +94,7 @@
  *
  * @see CachedInConverter
  */
-@UseExperimental(ExperimentalCoroutinesApi::class)
+@OptIn(ExperimentalCoroutinesApi::class)
 fun <T : Any> Flowable<PagingData<T>>.cachedIn(scope: CoroutineScope): Flowable<PagingData<T>> {
     return asFlow()
         .cachedIn(scope)
diff --git a/paging/rxjava2/src/main/java/androidx/paging/PagingDataFlowable.kt b/paging/rxjava2/src/main/java/androidx/paging/PagingDataFlowable.kt
index 02d2237..e48f847 100644
--- a/paging/rxjava2/src/main/java/androidx/paging/PagingDataFlowable.kt
+++ b/paging/rxjava2/src/main/java/androidx/paging/PagingDataFlowable.kt
@@ -36,7 +36,7 @@
 @Suppress("FunctionName", "unused")
 @JvmName("flowable")
 @JvmOverloads
-@UseExperimental(ExperimentalCoroutinesApi::class)
+@OptIn(ExperimentalCoroutinesApi::class)
 fun <Key : Any, Value : Any> PagingDataFlowable(
     config: PagingConfig,
     initialKey: Key? = null,
diff --git a/paging/rxjava2/src/main/java/androidx/paging/PagingDataObservable.kt b/paging/rxjava2/src/main/java/androidx/paging/PagingDataObservable.kt
index 9d451f5..a052b8a 100644
--- a/paging/rxjava2/src/main/java/androidx/paging/PagingDataObservable.kt
+++ b/paging/rxjava2/src/main/java/androidx/paging/PagingDataObservable.kt
@@ -36,7 +36,7 @@
 @Suppress("FunctionName", "unused")
 @JvmName("observable")
 @JvmOverloads
-@UseExperimental(ExperimentalCoroutinesApi::class)
+@OptIn(ExperimentalCoroutinesApi::class)
 fun <Key : Any, Value : Any> PagingDataObservable(
     config: PagingConfig,
     initialKey: Key? = null,
diff --git a/paging/samples/build.gradle b/paging/samples/build.gradle
index 03edfe0..f600e44 100644
--- a/paging/samples/build.gradle
+++ b/paging/samples/build.gradle
@@ -14,6 +14,9 @@
  * limitations under the License.
  */
 
+
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 import static androidx.build.dependencies.DependenciesKt.*
 
 plugins {
@@ -44,3 +47,10 @@
     implementation(MULTIDEX)
     implementation(RETROFIT)
 }
+
+// Allow usage of Kotlin's @OptIn.
+tasks.withType(KotlinCompile).configureEach {
+    kotlinOptions {
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
+    }
+}
diff --git a/paging/samples/src/main/java/androidx/paging/samples/CachedInSample.kt b/paging/samples/src/main/java/androidx/paging/samples/CachedInSample.kt
index cf525f5..0958a9b 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/CachedInSample.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/CachedInSample.kt
@@ -30,6 +30,7 @@
 import androidx.paging.PagingDataFlow
 import androidx.paging.PagingSource
 import androidx.paging.cachedIn
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.launch
@@ -50,6 +51,7 @@
             .cachedIn(viewModelScope)
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     class MyActivity : AppCompatActivity() {
         val pagingAdapter = MyPagingAdapter()
 
diff --git a/paging/samples/src/main/java/androidx/paging/samples/PagingDataAdapterSample.kt b/paging/samples/src/main/java/androidx/paging/samples/PagingDataAdapterSample.kt
index 5822642..6c71c49 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/PagingDataAdapterSample.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/PagingDataAdapterSample.kt
@@ -31,6 +31,7 @@
 import androidx.recyclerview.widget.RecyclerView
 import io.reactivex.Flowable
 import io.reactivex.disposables.CompositeDisposable
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.launch
 
@@ -86,6 +87,7 @@
     class MyFlowActivity : AppCompatActivity() {
         val pagingAdapter = UserPagingAdapter()
 
+        @OptIn(ExperimentalCoroutinesApi::class)
         override fun onCreate(savedInstanceState: Bundle?) {
             super.onCreate(savedInstanceState)
             val viewModel by viewModels<UserListViewModel>()
diff --git a/room/integration-tests/kotlintestapp/build.gradle b/room/integration-tests/kotlintestapp/build.gradle
index 040417f..7a9a80f 100644
--- a/room/integration-tests/kotlintestapp/build.gradle
+++ b/room/integration-tests/kotlintestapp/build.gradle
@@ -17,6 +17,9 @@
 //./gradlew :r:in:k:clean :r:in:k:cC --no-daemon
 // -Dorg.gradle.debug=true
 // -Dkotlin.compiler.execution.strategy="in-process"
+
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 import static androidx.build.dependencies.DependenciesKt.*
 
 plugins {
@@ -37,6 +40,7 @@
             }
         }
     }
+
     sourceSets {
         androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
     }
@@ -74,3 +78,9 @@
     testImplementation(MOCKITO_CORE)
 }
 
+// Allow usage of Kotlin's @OptIn.
+tasks.withType(KotlinCompile).configureEach {
+    kotlinOptions {
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
+    }
+}
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/FlowQueryTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/FlowQueryTest.kt
index 8e75635..3ee8bf8 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/FlowQueryTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/FlowQueryTest.kt
@@ -21,6 +21,8 @@
 import androidx.test.filters.MediumTest
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.FlowPreview
 import kotlinx.coroutines.async
 import kotlinx.coroutines.cancelAndJoin
 import kotlinx.coroutines.channels.Channel
@@ -37,6 +39,7 @@
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.TimeUnit
 
+@OptIn(ExperimentalCoroutinesApi::class, FlowPreview::class)
 @MediumTest
 @RunWith(AndroidJUnit4::class)
 class FlowQueryTest : TestDatabaseTest() {
diff --git a/room/ktx/build.gradle b/room/ktx/build.gradle
index 8736d4f..46028d8 100644
--- a/room/ktx/build.gradle
+++ b/room/ktx/build.gradle
@@ -14,6 +14,9 @@
  * limitations under the License.
  */
 
+
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 import static androidx.build.dependencies.DependenciesKt.*
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
@@ -50,4 +53,11 @@
     inceptionYear = "2019"
     description = "Android Room Kotlin Extensions"
     url = AndroidXExtension.ARCHITECTURE_URL
-}
\ No newline at end of file
+}
+
+// Allow usage of Kotlin's @OptIn.
+tasks.withType(KotlinCompile).configureEach {
+    kotlinOptions {
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
+    }
+}
diff --git a/room/ktx/src/androidTest/java/androidx/room/CoroutineRoomCancellationTest.kt b/room/ktx/src/androidTest/java/androidx/room/CoroutineRoomCancellationTest.kt
index 03f9503..96c5369 100644
--- a/room/ktx/src/androidTest/java/androidx/room/CoroutineRoomCancellationTest.kt
+++ b/room/ktx/src/androidTest/java/androidx/room/CoroutineRoomCancellationTest.kt
@@ -23,6 +23,7 @@
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.cancelAndJoin
 import kotlinx.coroutines.launch
@@ -39,7 +40,9 @@
 @SdkSuppress(minSdkVersion = 16)
 class CoroutineRoomCancellationTest {
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     private val testDispatcher = TestCoroutineDispatcher()
+    @OptIn(ExperimentalCoroutinesApi::class)
     val testScope = TestCoroutineScope(testDispatcher)
 
     private val database = TestDatabase()
@@ -77,6 +80,7 @@
         assertThat(cancellationSignal.isCanceled).isTrue()
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     @Test
     fun testSuspend_cancellable_beforeQueryStarts() = runBlocking {
         database.backingFieldMap["QueryDispatcher"] = testDispatcher
diff --git a/sqlite/sqlite-inspection/build.gradle b/sqlite/sqlite-inspection/build.gradle
index 13a1efa..e284bb4 100644
--- a/sqlite/sqlite-inspection/build.gradle
+++ b/sqlite/sqlite-inspection/build.gradle
@@ -14,6 +14,9 @@
  * limitations under the License.
  */
 
+
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 import static androidx.build.dependencies.DependenciesKt.*
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
@@ -63,3 +66,10 @@
         main.resources.srcDirs += "src/main/proto"
     }
 }
+
+// Allow usage of Kotlin's @OptIn.
+tasks.withType(KotlinCompile).configureEach {
+    kotlinOptions {
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
+    }
+}
diff --git a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/SqliteInspectorTestEnvironment.kt b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/SqliteInspectorTestEnvironment.kt
index 649be0a..fc51781 100644
--- a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/SqliteInspectorTestEnvironment.kt
+++ b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/SqliteInspectorTestEnvironment.kt
@@ -24,6 +24,7 @@
 import androidx.sqlite.inspection.SqliteInspectorProtocol.Event
 import androidx.sqlite.inspection.SqliteInspectorProtocol.Response
 import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.runBlocking
 import org.junit.rules.ExternalResource
 
@@ -42,6 +43,7 @@
         inspectorTester.dispose()
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     fun assertNoQueuedEvents() {
         assertThat(inspectorTester.channel.isEmpty).isTrue()
     }
diff --git a/testutils/testutils-ktx/build.gradle b/testutils/testutils-ktx/build.gradle
index 39fbde1..c8e3372 100644
--- a/testutils/testutils-ktx/build.gradle
+++ b/testutils/testutils-ktx/build.gradle
@@ -35,9 +35,9 @@
     toolingProject = true
 }
 
-// Allow usage of Kotlin's @Experimental annotation, which is itself experimental.
+// Allow usage of Kotlin's @OptIn.
 tasks.withType(KotlinCompile).configureEach {
     kotlinOptions {
-        freeCompilerArgs += ["-Xuse-experimental=kotlin.Experimental"]
+        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
     }
 }
diff --git a/testutils/testutils-ktx/src/main/java/androidx/testutils/MainDispatcherRule.kt b/testutils/testutils-ktx/src/main/java/androidx/testutils/MainDispatcherRule.kt
index 9542905..c842f46 100644
--- a/testutils/testutils-ktx/src/main/java/androidx/testutils/MainDispatcherRule.kt
+++ b/testutils/testutils-ktx/src/main/java/androidx/testutils/MainDispatcherRule.kt
@@ -18,6 +18,7 @@
 
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.test.resetMain
 import kotlinx.coroutines.test.setMain
 import org.junit.rules.TestRule
@@ -25,6 +26,7 @@
 import org.junit.runners.model.Statement
 
 class MainDispatcherRule(private val dispatcher: CoroutineDispatcher) : TestRule {
+    @OptIn(ExperimentalCoroutinesApi::class)
     override fun apply(base: Statement?, description: Description?) = object : Statement() {
         override fun evaluate() {
             Dispatchers.setMain(dispatcher)