(#) `Saver` objects should be passed to the saver parameter, not the vararg `inputs` parameter
!!! ERROR: `Saver` objects should be passed to the saver parameter, not the vararg `inputs` parameter
This is an error.
Id
: `RememberSaveableSaverParameter`
Summary
: `Saver` objects should be passed to the saver parameter, not the vararg `inputs` parameter
Severity
: Error
Category
: Correctness
Platform
: Any
Vendor
: Jetpack Compose
Identifier
: androidx.compose.runtime.saveable
Feedback
: https://issuetracker.google.com/issues/new?component=612128
Min
: Lint 8.0 and 8.1
Compiled
: Lint 8.7+
Artifact
: [androidx.compose.runtime:runtime-saveable-android](androidx_compose_runtime_runtime-saveable-android.md.html)
Since
: 1.5.0
Affects
: Kotlin and Java files and test sources
Editing
: This check runs on the fly in the IDE editor
Implementation
: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/compose/runtime/runtime-saveable-lint/src/main/java/androidx/compose/runtime/saveable/lint/RememberSaveableDetector.kt)
Tests
: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/compose/runtime/runtime-saveable-lint/src/test/java/androidx/compose/runtime/saveable/lint/RememberSaveableDetectorTest.kt)
Copyright Year
: 2021
The first parameter to `rememberSaveable` is a vararg parameter for
inputs that when changed will cause the state to reset. Passing a
`Saver` object to this parameter is an error, as the intention is to
pass the `Saver` object to the saver parameter. Since the saver
parameter is not the first parameter, it must be explicitly named.
!!! Tip
This lint check has an associated quickfix available in the IDE.
(##) Example
Here is an example of lint warnings produced by this check:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text
src/test/Foo.kt:15:Error: Passing Saver instance to vararg inputs
[RememberSaveableSaverParameter]
val foo = rememberSaveable(FooSaver) { Foo() }
--------
src/test/Foo.kt:16:Error: Passing Saver instance to vararg inputs
[RememberSaveableSaverParameter]
val mutableStateFoo = rememberSaveable(FooSaver) { mutableStateOf(Foo()) }
--------
src/test/Foo.kt:17:Error: Passing Saver instance to vararg inputs
[RememberSaveableSaverParameter]
val foo2 = rememberSaveable(FooSaver2()) { Foo() }
-----------
src/test/Foo.kt:18:Error: Passing Saver instance to vararg inputs
[RememberSaveableSaverParameter]
val mutableStateFoo2 = rememberSaveable(FooSaver2()) { mutableStateOf(Foo()) }
-----------
src/test/Foo.kt:19:Error: Passing Saver instance to vararg inputs
[RememberSaveableSaverParameter]
val foo3 = rememberSaveable(fooSaver3) { Foo() }
---------
src/test/Foo.kt:20:Error: Passing Saver instance to vararg inputs
[RememberSaveableSaverParameter]
val mutableStateFoo3 = rememberSaveable(fooSaver3) { mutableStateOf(Foo()) }
---------
src/test/Foo.kt:21:Error: Passing Saver instance to vararg inputs
[RememberSaveableSaverParameter]
val foo4 = rememberSaveable(fooSaver4) { Foo() }
---------
src/test/Foo.kt:22:Error: Passing Saver instance to vararg inputs
[RememberSaveableSaverParameter]
val mutableStateFoo4 = rememberSaveable(fooSaver4) { mutableStateOf(Foo()) }
---------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Here is the source file referenced above:
`src/test/Foo.kt`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers
package test
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.*
class Foo
object FooSaver : Saver