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)