From ecaf4fbf4b2e8a74a688f86bfa1e5870794d7bc6 Mon Sep 17 00:00:00 2001 From: pkurchatov Date: Fri, 14 Feb 2025 13:27:37 +0300 Subject: [PATCH] Added type check in complex rebind commit_hash:bc6c3cfa3f3c4ffaafec97a3f61d47871fd35a58 --- .../main/java/com/yandex/div/core/view2/reuse/RebindTask.kt | 6 +++--- .../src/main/java/com/yandex/div/core/view2/reuse/Token.kt | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/reuse/RebindTask.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/reuse/RebindTask.kt index 19873a2a5..e3decbdaf 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/reuse/RebindTask.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/reuse/RebindTask.kt @@ -85,7 +85,7 @@ internal class RebindTask( lastExistingParent = null, ) - if (existingToken.divHash == newToken.divHash) { + if (existingToken.isCombinable(newToken)) { doNodeInSameMode(existingToken, newToken) } else { doNodeInExistingMode(existingToken) @@ -116,7 +116,7 @@ internal class RebindTask( val aloneExistingChild = mutableListOf() existingToken.getChildrenTokens(combinedToken).forEach { existingChild -> - val newChildWithSameHash = aloneNewChild.find { it.divHash == existingChild.divHash } + val newChildWithSameHash = aloneNewChild.find { it.isCombinable(existingChild) } if (newChildWithSameHash != null) { doNodeInSameMode(existingChild, newChildWithSameHash) @@ -155,7 +155,7 @@ internal class RebindTask( } private fun doNodeInNewMode(newToken: NewToken) { - val existingWithSameHash = aloneExisting.find { it.divHash == newToken.divHash } + val existingWithSameHash = aloneExisting.find { it.isCombinable(newToken) } if (existingWithSameHash != null) { aloneExisting.remove(existingWithSameHash) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/reuse/Token.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/reuse/Token.kt index 953084615..ff1706ea2 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/reuse/Token.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/reuse/Token.kt @@ -1,5 +1,6 @@ package com.yandex.div.core.view2.reuse +import com.yandex.div.core.util.type import com.yandex.div.internal.core.DivItemBuilderResult internal abstract class Token( @@ -8,4 +9,8 @@ internal abstract class Token( ) { val divHash: Int = item.div.propertiesHash() val div = item.div + + fun isCombinable(other: Token): Boolean { + return divHash == other.divHash && div.type == other.div.type + } }