diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObservableSet.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObservableSet.kt index 2f8876fede0..f0daaffceb1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObservableSet.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObservableSet.kt @@ -40,10 +40,12 @@ internal class MutableObservableSetImpl(vararg elements: T) : MutableObservab } override fun add(element: T): Boolean { - return underlying.add(element).also { + val added = underlying.add(element) + if (added) { whenObjectAddedActions.toTypedArray().forEach { action -> action(element) } forAllActions.toTypedArray().forEach { action -> action(element) } } + return added } override fun isEmpty(): Boolean { diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/ObservableSetTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/ObservableSetTest.kt index ef97415a90e..9dfc4fa5d8f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/ObservableSetTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/ObservableSetTest.kt @@ -39,6 +39,26 @@ class ObservableSetTest { assertEquals(listOf(1, 2, 3, 4), testListener2.invocations) } + @Test + fun `test - adding already existing elements`() { + val set = MutableObservableSetImpl(1, 2, 3) + val forAllListener = TestListener() + val whenObjectAddedListener = TestListener() + set.forAll(forAllListener) + set.whenObjectAdded(whenObjectAddedListener) + + assertEquals(listOf(1, 2, 3), forAllListener.invocations) + assertEquals(listOf(), whenObjectAddedListener.invocations) + + /* Adding already existing elements */ + set.add(1) + set.addAll(listOf(1, 2)) + + /* No further invocations */ + assertEquals(listOf(1, 2, 3), forAllListener.invocations) + assertEquals(listOf(), whenObjectAddedListener.invocations) + } + @Test fun `test - whenObjectAdded`() { val set = MutableObservableSetImpl(1)