diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea.txt index 006e0eb1aab..900f80f5612 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea.txt @@ -1,9 +1,13 @@ public abstract class org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer : java/io/Serializable { public static final field Companion Lorg/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer$Companion; public abstract fun contains (Lorg/jetbrains/kotlin/gradle/kpm/KotlinExternalModelKey;)Z + public fun equals (Ljava/lang/Object;)Z public abstract fun get (Lorg/jetbrains/kotlin/gradle/kpm/KotlinExternalModelKey;)Ljava/lang/Object; public abstract fun getIds ()Ljava/util/Set; public final fun getOrThrow (Lorg/jetbrains/kotlin/gradle/kpm/KotlinExternalModelKey;)Ljava/lang/Object; + public fun hashCode ()I + public final fun isEmpty ()Z + public final fun isNotEmpty ()Z public fun toString ()Ljava/lang/String; } diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer.kt index ec84e0b44b5..f2456b38854 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainer.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.gradle.kpm import org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi -import org.jetbrains.kotlin.gradle.kpm.idea.Interner import java.io.Serializable sealed class KotlinExternalModelContainer : Serializable { @@ -25,14 +24,11 @@ sealed class KotlinExternalModelContainer : Serializable { return super.equals(other) } - // TODO CHECK WITH EMPTY INTANCE override fun hashCode(): Int { if (this.isEmpty()) return 0 return super.hashCode() } - internal abstract fun copy(): KotlinExternalModelContainer - @InternalKotlinGradlePluginApi companion object { fun mutable(): KotlinMutableExternalModelContainer = KotlinMutableExternalModelContainerImpl() @@ -42,7 +38,6 @@ sealed class KotlinExternalModelContainer : Serializable { override val ids: Set> = emptySet() override fun contains(key: KotlinExternalModelKey): Boolean = false override fun get(key: KotlinExternalModelKey): T? = null - override fun copy(): KotlinExternalModelContainer = this } override fun toString(): String { diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainerImpl.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainerImpl.kt index a71278155c6..524b2a4fe6d 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainerImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/KotlinExternalModelContainerImpl.kt @@ -32,18 +32,6 @@ internal class KotlinMutableExternalModelContainerImpl private constructor( return values[key]?.let { it as T } } - override fun copy(): KotlinMutableExternalModelContainerImpl { - val copiedValues = values.mapValuesTo(mutableMapOf()) { (key, value) -> - val serializer = key.serializer - if (key.serializer != null) { - @Suppress("UNCHECKED_CAST") - serializer as KotlinExternalModelSerializer - serializer.deserialize(serializer.serialize(value)) - } else value - } - return KotlinMutableExternalModelContainerImpl(copiedValues) - } - @Synchronized private fun writeReplace(): Any { return SerializedKotlinExternalModelContainerCarrier(serialize(values)) @@ -79,21 +67,6 @@ private class SerializedKotlinExternalModelContainer( return deserializedValue } - override fun copy(): KotlinExternalModelContainer { - val copiedValues = deserializedValues.mapValuesTo(mutableMapOf()) { (key, value) -> - /* Serializer has to be present, otherwise where would the value be coming from ¯\_(ツ)_/¯ */ - @Suppress("unchecked_cast") - val serializer = key.serializer as KotlinExternalModelSerializer - serializer.serialize(value) - }.mapKeys { (key, _) -> key.id } - - /** - * [serializedValues] is all private. [ByteArray] will never be mutated and can't be referenced from anywhere - * [KotlinExternalModelKey] is immutable. We therefore only need to copy already deserialized values here. - */ - return SerializedKotlinExternalModelContainer(serializedValues.plus(copiedValues).toMutableMap()) - } - @Synchronized private fun writeReplace(): Any { return SerializedKotlinExternalModelContainerCarrier(serializedValues + serialize(deserializedValues)) diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinCompilationOutput.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinCompilationOutput.kt index a0d3daecd21..51ba1c5b8b2 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinCompilationOutput.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinCompilationOutput.kt @@ -13,13 +13,6 @@ interface IdeaKotlinCompilationOutput : Serializable { val resourcesDir: File? } -fun IdeaKotlinCompilationOutput.deepCopy(interner: Interner = Interner.default()): IdeaKotlinCompilationOutput { - return IdeaKotlinCompilationOutputImpl( - classesDirs = interner.internSet(classesDirs), - resourcesDir = interner.intern(resourcesDir) - ) -} - @InternalKotlinGradlePluginApi data class IdeaKotlinCompilationOutputImpl( override val classesDirs: Set, diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment.kt index ccd68bbf602..89efeb2897b 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment.kt @@ -19,18 +19,6 @@ interface IdeaKotlinFragment : Serializable { val external: KotlinExternalModelContainer } -fun IdeaKotlinFragment.deepCopy(interner: Interner = Interner.default()): IdeaKotlinFragment { - return IdeaKotlinFragmentImpl( - name = interner.intern(name), - languageSettings = interner.intern(languageSettings?.deepCopy(interner)), - dependencies = interner.internList(dependencies.map { it.deepCopy(interner) }), - directRefinesDependencies = interner.internList(directRefinesDependencies.map { it.deepCopy(interner) }), - sourceDirectories = interner.internList(sourceDirectories.map { it.deepCopy(interner) }), - resourceDirectories = interner.internList(resourceDirectories.map { it.deepCopy(interner) }), - external = external.copy() - ) -} - @InternalKotlinGradlePluginApi data class IdeaKotlinFragmentImpl( override val name: String, diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency.kt index 0164256ebdf..18fc69085a6 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency.kt @@ -8,8 +8,3 @@ package org.jetbrains.kotlin.gradle.kpm.idea import java.io.Serializable interface IdeaKotlinFragmentDependency : Serializable - -fun IdeaKotlinFragmentDependency.deepCopy(interner: Interner = Interner.default()): IdeaKotlinFragmentDependency { - // TODO - return interner.intern(this) -} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings.kt index 62d423bc7bc..c5b78f090cf 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings.kt @@ -19,19 +19,6 @@ interface IdeaKotlinLanguageSettings : Serializable { val freeCompilerArgs: List } -fun IdeaKotlinLanguageSettings.deepCopy(interner: Interner = Interner.default()): IdeaKotlinLanguageSettings { - return IdeaKotlinLanguageSettingsImpl( - languageVersion = interner.intern(languageVersion), - apiVersion = interner.intern(apiVersion), - isProgressiveMode = isProgressiveMode, - enabledLanguageFeatures = interner.internSet(enabledLanguageFeatures), - optInAnnotationsInUse = interner.internSet(optInAnnotationsInUse), - compilerPluginArguments = interner.internList(compilerPluginArguments), - compilerPluginClasspath = interner.internList(compilerPluginClasspath), - freeCompilerArgs = interner.internList(freeCompilerArgs) - ) -} - @InternalKotlinGradlePluginApi data class IdeaKotlinLanguageSettingsImpl( override val languageVersion: String?, diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule.kt index 339d0bf5afd..d6f2c231cfc 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule.kt @@ -12,13 +12,6 @@ interface IdeaKotlinModule : Serializable { val fragments: List } -fun IdeaKotlinModule.deepCopy(interner: Interner): IdeaKotlinModule { - return IdeaKotlinModuleImpl( - moduleIdentifier = interner.intern(moduleIdentifier.deepCopy(interner)), - fragments = interner.internList(fragments.map { it.deepCopy(interner) }) - ) -} - @InternalKotlinGradlePluginApi data class IdeaKotlinModuleImpl( override val moduleIdentifier: IdeaKotlinModuleIdentifier, diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier.kt index ce931b29495..30e01bec2a5 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier.kt @@ -21,30 +21,6 @@ interface IdeaKotlinMavenModuleIdentifier : IdeaKotlinModuleIdentifier { val name: String } -fun IdeaKotlinModuleIdentifier.deepCopy(interner: Interner = Interner.default()): IdeaKotlinModuleIdentifier { - return when (this) { - is IdeaKotlinLocalModuleIdentifier -> this.deepCopy(interner) - is IdeaKotlinMavenModuleIdentifier -> this.deepCopy(interner) - else -> throw IllegalArgumentException("Unexpected ${IdeaKotlinMavenModuleIdentifier::class.java.simpleName}: $this") - } -} - -fun IdeaKotlinLocalModuleIdentifier.deepCopy(interner: Interner = Interner.default()): IdeaKotlinLocalModuleIdentifier { - return IdeaKotlinLocalModuleIdentifierImpl( - moduleClassifier = interner.intern(moduleClassifier), - buildId = interner.intern(buildId), - projectId = interner.intern(projectId) - ) -} - -fun IdeaKotlinMavenModuleIdentifier.deepCopy(interner: Interner = Interner.default()): IdeaKotlinMavenModuleIdentifier { - return IdeaKotlinMavenModuleIdentifierImpl( - moduleClassifier = interner.intern(moduleClassifier), - group = interner.intern(group), - name = interner.intern(name) - ) -} - @InternalKotlinGradlePluginApi data class IdeaKotlinLocalModuleIdentifierImpl( override val moduleClassifier: String?, diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModel.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModel.kt index 35843cb7f07..4362269b345 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModel.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModel.kt @@ -16,16 +16,6 @@ interface IdeaKotlinProjectModel : Serializable { val modules: List } -fun IdeaKotlinProjectModel.deepCopy(interner: Interner = Interner.default()): IdeaKotlinProjectModel { - return IdeaKotlinProjectModelImpl( - gradlePluginVersion = interner.intern(gradlePluginVersion), - coreLibrariesVersion = interner.intern(coreLibrariesVersion), - explicitApiModeCliOption = interner.intern(explicitApiModeCliOption), - kotlinNativeHome = interner.intern(kotlinNativeHome), - modules = interner.internList(modules.map { it.deepCopy(interner) }) - ) -} - @InternalKotlinGradlePluginApi data class IdeaKotlinProjectModelImpl( override val gradlePluginVersion: String, diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectory.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectory.kt index 0b232092522..f4179793f94 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectory.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectory.kt @@ -12,12 +12,6 @@ interface IdeaKotlinResourceDirectory : Serializable { val file: File } -fun IdeaKotlinResourceDirectory.deepCopy(interner: Interner): IdeaKotlinResourceDirectory { - return IdeaKotlinResourceDirectoryImpl( - file = interner.intern(file) - ) -} - @InternalKotlinGradlePluginApi data class IdeaKotlinResourceDirectoryImpl( override val file: File diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory.kt index 63db8caf755..d174488fa6b 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory.kt @@ -12,12 +12,6 @@ interface IdeaKotlinSourceDirectory : Serializable { val file: File } -fun IdeaKotlinSourceDirectory.deepCopy(interner: Interner): IdeaKotlinSourceDirectory { - return IdeaKotlinSourceDirectoryImpl( - file = interner.intern(file) - ) -} - @InternalKotlinGradlePluginApi data class IdeaKotlinSourceDirectoryImpl( override val file: File, diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/Interner.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/Interner.kt deleted file mode 100644 index 9fb2447db17..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/Interner.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.kpm.idea - -interface Interner { - fun intern(value: T): T - - companion object { - fun default(): Interner = DefaultInterner() - fun none(): Interner = NoneInterner - } -} - -internal fun Interner.internSet(set: Set): Set { - return if (set.isEmpty()) return emptySet() - else intern(set.map { intern(it) }.toSet()) -} - -internal fun Interner.internList(list: List): List { - return if (list.isEmpty()) emptyList() - else intern(list.map { intern(it) }) -} - -private class DefaultInterner : Interner { - private val values = mutableMapOf() - override fun intern(value: T): T { - if (value == null) return value - - @Suppress("unchecked_cast") - return values.getOrPut(value) { value } as T - } -} - -object NoneInterner : Interner { - override fun intern(value: T): T = value -} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/DeepCopyTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/DeepCopyTest.kt deleted file mode 100644 index 17722169a00..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/DeepCopyTest.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.kpm.idea - -import buildIdeaKotlinProjectModel -import createKpmProject -import org.gradle.api.internal.project.ProjectInternal -import org.gradle.testfixtures.ProjectBuilder -import org.jetbrains.kotlin.gradle.plugin.KotlinPm20PluginWrapper -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinLinuxX64Variant -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.jvm -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotSame - -class DeepCopyTest { - @Test - fun `test - deep copy for model build from project`() { - val (project, kotlin) = createKpmProject() - - kotlin.mainAndTest { - jvm - fragments.create("linux", KotlinLinuxX64Variant::class.java) - } - - val model = project.buildIdeaKotlinProjectModel() - val copy = model.deepCopy() - assertNotSame(model, copy) - assertEquals(model, copy) - } -}