From 1e63383fe45afdaa187570a5607e0741e43a36e9 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:49:07 +0100 Subject: [PATCH] Fix weak children not notified of lock change --- .../commons/provider/AbstractProvider.kt | 2 ++ .../commons/provider/ProviderTest.kt | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/commons-provider/src/main/kotlin/xyz/xenondevs/commons/provider/AbstractProvider.kt b/commons-provider/src/main/kotlin/xyz/xenondevs/commons/provider/AbstractProvider.kt index 662fbf2..f06bb0e 100644 --- a/commons-provider/src/main/kotlin/xyz/xenondevs/commons/provider/AbstractProvider.kt +++ b/commons-provider/src/main/kotlin/xyz/xenondevs/commons/provider/AbstractProvider.kt @@ -420,6 +420,8 @@ abstract class AbstractProvider( activeChildren?.forEach { it.changeLock(lock) } inactiveChildren?.forEach { it.changeLock(lock) } + weakActiveChildren?.forEach { it.changeLock(lock) } + weakInactiveChildren?.forEach { it.changeLock(lock) } activeParents?.forEach { it.parent.changeLock(lock) } inactiveParents?.forEach { it.changeLock(lock) } } diff --git a/commons-provider/src/test/kotlin/xyz/xenondevs/commons/provider/ProviderTest.kt b/commons-provider/src/test/kotlin/xyz/xenondevs/commons/provider/ProviderTest.kt index fba4fca..ede54ad 100644 --- a/commons-provider/src/test/kotlin/xyz/xenondevs/commons/provider/ProviderTest.kt +++ b/commons-provider/src/test/kotlin/xyz/xenondevs/commons/provider/ProviderTest.kt @@ -1,6 +1,7 @@ package xyz.xenondevs.commons.provider import org.junit.jupiter.api.Test +import kotlin.test.assertContentEquals import kotlin.test.assertEquals class ProviderTest { @@ -182,6 +183,25 @@ class ProviderTest { provider.set(1) } + @OptIn(UnstableProviderApi::class) + @Test + fun testLockChangedPropagate() { + val a = provider("a") as AbstractProvider + val b = provider("b") as AbstractProvider + val c = provider("c") as AbstractProvider + + val combinedAB = combinedProvider(a, b) { a, b -> a + b } as AbstractProvider + val combinedBC = combinedProvider(b, c) { b, c -> b + c } as AbstractProvider + + assertContentEquals( + Array(5) { a.lock }, + arrayOf( + a.lock, b.lock, c.lock, + combinedAB.lock, combinedBC.lock + ) + ) + } + @Test fun testProviderObserver() { var invoked = false