fix ANR at RuntimeStoreImpl initialization

commit_hash:223019df6e9b843f2c803e6e8a7c7f5d4a034d13
This commit is contained in:
gulevsky
2026-04-03 11:13:07 +03:00
parent 9d9e45d47d
commit 19d05e3391
3 changed files with 7 additions and 9 deletions
@@ -5,7 +5,6 @@ import com.yandex.div.core.annotations.Mockable
import com.yandex.div.core.dagger.DivScope
import com.yandex.div.core.expression.local.ExpressionsRuntimeProvider
import com.yandex.div.core.expression.local.RuntimeStore
import com.yandex.div.core.expression.local.RuntimeStoreFiller
import com.yandex.div.core.expression.local.RuntimeStoreImpl
import com.yandex.div.core.expression.variables.declare
import com.yandex.div.core.view2.Div2View
@@ -45,8 +44,7 @@ internal class RuntimeStoreProvider @Inject constructor(
return store
}
val filler = RuntimeStoreFiller(runtimeProvider, errorCollector)
return RuntimeStoreImpl(data, filler, runtimeProvider, errorCollector).also { store ->
return RuntimeStoreImpl(data, runtimeProvider, errorCollector).also { store ->
runtimeStores[tag.id] = store
div2View?.let { store.attachView(it) }
}
@@ -21,7 +21,6 @@ private const val WARNING_LOCAL_USING_LOCAL_VARIABLES =
internal class RuntimeStoreImpl(
data: DivData,
filler: RuntimeStoreFiller,
private val runtimeProvider: ExpressionsRuntimeProvider,
private val errorCollector: ErrorCollector,
) : RuntimeStore {
@@ -37,7 +36,9 @@ internal class RuntimeStoreImpl(
override val viewProvider = Provider { viewRef?.get() }
override val rootRuntime = filler.fillStore(this, data)
override val rootRuntime = runtimeProvider.createRootRuntime(data, errorCollector, this).also {
putRuntime(it, "", null)
}
fun attachView(view: Div2View) {
viewRef = WeakReference(view)
@@ -24,13 +24,12 @@ class RuntimeStoreImplTest {
on { variableController } doReturn mock()
}
private val childRuntime = ExpressionsRuntime(resolver)
private val filler = mock< RuntimeStoreFiller> {
on { fillStore(any(), any()) } doReturn rootRuntime
}
private val runtimeProvider = mock<ExpressionsRuntimeProvider> {
on { createRootRuntime(any(), any(), any()) } doReturn rootRuntime
on { createChildRuntime(any(), any(), any(), any()) } doReturn childRuntime
}
private val underTest = RuntimeStoreImpl(mock(), filler, runtimeProvider, mock()).apply {
private val underTest = RuntimeStoreImpl(mock(), runtimeProvider, mock()).apply {
putRuntime(rootRuntime, "", null)
}