@@ -4202,45 +4202,40 @@ internal fun SlotWriter.deactivateCurrentGroup(rememberManager: RememberManager)
4202
4202
4203
4203
// To ensure this order, we call `enters` as a pre-order traversal
4204
4204
// of the group tree, and then call `leaves` in the inverse order.
4205
- val start = currentGroup
4206
- val end = currentGroupEnd
4207
- for (group in start until end) {
4208
- val node = node(group)
4209
- if (node is ComposeNodeLifecycleCallback ) {
4210
- val endRelativeOrder = slotsSize - slotsStartIndex(group)
4211
- rememberManager.deactivating(node, endRelativeOrder, - 1 , - 1 )
4212
- }
4213
-
4214
- forEachData(group) { slotIndex, data ->
4215
- when (data) {
4216
- is RememberObserverHolder -> {
4217
- val wrapped = data.wrapped
4218
- if (wrapped is ReusableRememberObserver ) {
4219
- // do nothing, the value should be preserved on reuse
4220
- } else {
4221
- removeData(group, slotIndex, data)
4222
- val endRelativeOrder = slotsSize - slotIndex
4223
- withAfterAnchorInfo(data.after) { priority, endRelativeAfter ->
4224
- rememberManager.forgetting(
4225
- wrapped,
4226
- endRelativeOrder,
4227
- priority,
4228
- endRelativeAfter
4229
- )
4230
- }
4205
+ forAllData(currentGroup) { slotIndex, data ->
4206
+ when (data) {
4207
+ is ComposeNodeLifecycleCallback -> {
4208
+ val endRelativeOrder = slotsSize - slotIndex
4209
+ rememberManager.deactivating(data, endRelativeOrder, - 1 , - 1 )
4210
+ }
4211
+ is RememberObserverHolder -> {
4212
+ val wrapped = data.wrapped
4213
+ if (wrapped is ReusableRememberObserver ) {
4214
+ // do nothing, the value should be preserved on reuse
4215
+ } else {
4216
+ removeData(slotIndex, data)
4217
+ val endRelativeOrder = slotsSize - slotIndex
4218
+ withAfterAnchorInfo(data.after) { priority, endRelativeAfter ->
4219
+ rememberManager.forgetting(
4220
+ wrapped,
4221
+ endRelativeOrder,
4222
+ priority,
4223
+ endRelativeAfter
4224
+ )
4231
4225
}
4232
4226
}
4233
- is RecomposeScopeImpl -> {
4234
- removeData(group, slotIndex, data)
4235
- data.release( )
4236
- }
4227
+ }
4228
+ is RecomposeScopeImpl -> {
4229
+ removeData(slotIndex, data)
4230
+ data.release()
4237
4231
}
4238
4232
}
4239
4233
}
4240
4234
}
4241
4235
4242
- private fun SlotWriter.removeData (group : Int , index : Int , data : Any? ) {
4243
- runtimeCheck(data == = set(group, index, Composer .Empty )) { " Slot table is out of sync" }
4236
+ private fun SlotWriter.removeData (index : Int , data : Any? ) {
4237
+ val result = clear(index)
4238
+ runtimeCheck(data == = result) { " Slot table is out of sync (expected $data , got $result )" }
4244
4239
}
4245
4240
4246
4241
@JvmInline
0 commit comments