From ea483c01fe2ed29ee11f61e000643e39febfa66c Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Wed, 7 Sep 2022 17:19:36 +0200 Subject: [PATCH] [Gradle][MPP] Replace InternalKotlinSourceSet.addCompilation by exposing mutable .compilations This requires to make MutableObservableSet public as well, since public implementations will inherit. The MutableObservableSet therefore move its implementation to an internal MutableObservableSetImpl ^KT-52726 Verification Pending --- .../plugin/mpp/AbstractCompilationDetails.kt | 12 ++++++------ .../plugin/sources/AbstractKotlinSourceSet.kt | 15 +++++---------- .../plugin/sources/InternalKotlinSourceSet.kt | 4 ++-- .../kotlin/gradle/utils/ObservableSet.kt | 4 +++- .../jetbrains/kotlin/gradle/ObservableSetTest.kt | 6 +++--- 5 files changed, 19 insertions(+), 22 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractCompilationDetails.kt index 201fbf7bdb5..9382e203007 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractCompilationDetails.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractCompilationDetails.kt @@ -8,19 +8,19 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.internal -import org.jetbrains.kotlin.gradle.utils.MutableObservableSet +import org.jetbrains.kotlin.gradle.utils.MutableObservableSetImpl import org.jetbrains.kotlin.gradle.utils.ObservableSet abstract class AbstractCompilationDetails : CompilationDetails { - private val directlyIncludedKotlinSourceSetsImpl: MutableObservableSet by lazy { - MutableObservableSet(defaultSourceSet) + private val directlyIncludedKotlinSourceSetsImpl: MutableObservableSetImpl by lazy { + MutableObservableSetImpl(defaultSourceSet) } final override val directlyIncludedKotlinSourceSets: ObservableSet get() = directlyIncludedKotlinSourceSetsImpl - private val allKotlinSourceSetsImpl: MutableObservableSet by lazy { - MutableObservableSet().also { set -> + private val allKotlinSourceSetsImpl: MutableObservableSetImpl by lazy { + MutableObservableSetImpl().also { set -> defaultSourceSet.internal.withDependsOnClosure.forAll(set::add) } } @@ -40,7 +40,7 @@ abstract class AbstractCompilationDetails : Compilation directlyIncludedKotlinSourceSetsImpl.add(sourceSet) sourceSet.internal.withDependsOnClosure.forAll { inDependsOnClosure -> allKotlinSourceSetsImpl.add(inDependsOnClosure) - inDependsOnClosure.internal.addCompilation(compilation) + inDependsOnClosure.internal.compilations.add(compilation) } whenSourceSetAdded(sourceSet) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/AbstractKotlinSourceSet.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/AbstractKotlinSourceSet.kt index fd45cfbf210..7d10c0c8c62 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/AbstractKotlinSourceSet.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/AbstractKotlinSourceSet.kt @@ -10,13 +10,13 @@ package org.jetbrains.kotlin.gradle.plugin.sources import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.utils.MutableObservableSet +import org.jetbrains.kotlin.gradle.utils.MutableObservableSetImpl import org.jetbrains.kotlin.gradle.utils.ObservableSet abstract class AbstractKotlinSourceSet : InternalKotlinSourceSet { - private val dependsOnImpl = MutableObservableSet() - private val dependsOnClosureImpl = MutableObservableSet() - private val withDependsOnClosureImpl = MutableObservableSet(this) - private val compilationsImpl = MutableObservableSet>() + private val dependsOnImpl = MutableObservableSetImpl() + private val dependsOnClosureImpl = MutableObservableSetImpl() + private val withDependsOnClosureImpl = MutableObservableSetImpl(this) final override val dependsOn: ObservableSet get() = dependsOnImpl @@ -27,8 +27,7 @@ abstract class AbstractKotlinSourceSet : InternalKotlinSourceSet { final override val withDependsOnClosure: ObservableSet get() = withDependsOnClosureImpl - override val compilations: ObservableSet> - get() = compilationsImpl + override val compilations: MutableObservableSet> = MutableObservableSetImpl() final override fun dependsOn(other: KotlinSourceSet) { if (other == this) return @@ -51,9 +50,5 @@ abstract class AbstractKotlinSourceSet : InternalKotlinSourceSet { } protected open fun afterDependsOnAdded(other: KotlinSourceSet) = Unit - - final override fun addCompilation(compilation: KotlinCompilation<*>) { - compilationsImpl.add(compilation) - } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/InternalKotlinSourceSet.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/InternalKotlinSourceSet.kt index 698dbe1c973..8537d052de8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/InternalKotlinSourceSet.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/InternalKotlinSourceSet.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.sources import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import org.jetbrains.kotlin.gradle.utils.MutableObservableSet import org.jetbrains.kotlin.gradle.utils.ObservableSet internal val KotlinSourceSet.internal: InternalKotlinSourceSet @@ -18,6 +19,5 @@ internal interface InternalKotlinSourceSet : KotlinSourceSet { override val dependsOn: ObservableSet val dependsOnClosure: ObservableSet val withDependsOnClosure: ObservableSet - val compilations: ObservableSet> - fun addCompilation(compilation: KotlinCompilation<*>) + val compilations: MutableObservableSet> } 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 64c0ddfdd24..2f8876fede0 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 @@ -10,7 +10,9 @@ interface ObservableSet : Set { fun forAll(action: (T) -> Unit) } -internal class MutableObservableSet(vararg elements: T) : ObservableSet, MutableSet { +interface MutableObservableSet : ObservableSet, MutableSet + +internal class MutableObservableSetImpl(vararg elements: T) : MutableObservableSet { private val underlying = mutableSetOf(*elements) private val whenObjectAddedActions = mutableListOf<(T) -> Unit>() private val forAllActions = mutableListOf<(T) -> Unit>() diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ObservableSetTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ObservableSetTest.kt index 3e69d182a48..aa68921c450 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ObservableSetTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ObservableSetTest.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.gradle -import org.jetbrains.kotlin.gradle.utils.MutableObservableSet +import org.jetbrains.kotlin.gradle.utils.MutableObservableSetImpl import org.junit.Test import kotlin.test.assertEquals @@ -22,7 +22,7 @@ class ObservableSetTest { @Test fun `test - forAll`() { - val set = MutableObservableSet(1) + val set = MutableObservableSetImpl(1) val testListener1 = TestListener() val testListener2 = TestListener() @@ -41,7 +41,7 @@ class ObservableSetTest { @Test fun `test - whenObjectAdded`() { - val set = MutableObservableSet(1) + val set = MutableObservableSetImpl(1) val testListener1 = TestListener() val testListener2 = TestListener()