From 0f4e4ac20e8592469c1386577b15265035ab8bb3 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Fri, 25 Nov 2022 17:27:04 +0100 Subject: [PATCH] KotlinFacetSettings: Serialize and deserialize additionalVisibleModuleNames ^KT-55145 Verification Pending --- jps/jps-common/build.gradle.kts | 2 +- .../kotlin/config/facetSerialization.kt | 3 +- .../test/FacetSettingsSerializationTest.kt | 36 +++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 jps/jps-common/test/FacetSettingsSerializationTest.kt diff --git a/jps/jps-common/build.gradle.kts b/jps/jps-common/build.gradle.kts index 861e1831cde..7c2b02e1a29 100644 --- a/jps/jps-common/build.gradle.kts +++ b/jps/jps-common/build.gradle.kts @@ -1,4 +1,3 @@ - plugins { kotlin("jvm") id("jps-compatible") @@ -30,6 +29,7 @@ dependencies { testImplementation(project(":compiler:cli-common")) testImplementation(jpsModelSerialization()) testImplementation(commonDependency("junit:junit")) + testImplementation(kotlin("test-junit")) } sourceSets { diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt b/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt index fbd7641d426..b703348e7e4 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.platform.* import org.jetbrains.kotlin.platform.impl.FakeK2NativeCompilerArguments import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind -import org.jetbrains.kotlin.platform.isJs import org.jetbrains.kotlin.platform.jvm.JdkPlatform import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.isJvm @@ -138,6 +137,7 @@ private fun readV2AndLaterConfig( this.targetPlatform = targetPlatform readElementsList(element, "implements", "implement")?.let { implementedModuleNames = it } readElementsList(element, "dependsOnModuleNames", "dependsOn")?.let { dependsOnModuleNames = it } + readElementsList(element, "additionalVisibleModuleNames", "friend")?.let { additionalVisibleModuleNames = it.toSet() } element.getChild("externalSystemTestTasks")?.let { val testRunTasks = it.getChildren("externalSystemTestTask") .mapNotNull { (it.content.firstOrNull() as? Text)?.textTrim } @@ -312,6 +312,7 @@ private fun KotlinFacetSettings.writeConfig(element: Element) { } saveElementsList(element, implementedModuleNames, "implements", "implement") saveElementsList(element, dependsOnModuleNames, "dependsOnModuleNames", "dependsOn") + saveElementsList(element, additionalVisibleModuleNames.toList(), "additionalVisibleModuleNames", "friend") if (sourceSetNames.isNotEmpty()) { element.addContent( diff --git a/jps/jps-common/test/FacetSettingsSerializationTest.kt b/jps/jps-common/test/FacetSettingsSerializationTest.kt new file mode 100644 index 00000000000..e98a2ddb412 --- /dev/null +++ b/jps/jps-common/test/FacetSettingsSerializationTest.kt @@ -0,0 +1,36 @@ +/* + * 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.arguments + +import org.jdom.Element +import org.jetbrains.kotlin.config.KotlinFacetSettings +import org.jetbrains.kotlin.config.deserializeFacetSettings +import org.jetbrains.kotlin.config.serializeFacetSettings +import org.junit.Test +import kotlin.test.assertEquals + +class FacetSettingsSerializationTest { + + @Test + fun `test - module dependencies`() { + val source = KotlinFacetSettings().apply { + implementedModuleNames = listOf("implementedModule1", "implementedModule2") + dependsOnModuleNames = listOf("dependsOnModule1", "dependsOnModule2") + additionalVisibleModuleNames = setOf("friend1", "friend2") + } + + val deserialized = serializeAndDeserialize(source) + assertEquals(source.implementedModuleNames, deserialized.implementedModuleNames) + assertEquals(source.dependsOnModuleNames, deserialized.dependsOnModuleNames) + assertEquals(source.additionalVisibleModuleNames, deserialized.additionalVisibleModuleNames) + } + + private fun serializeAndDeserialize(settings: KotlinFacetSettings): KotlinFacetSettings { + val element = Element("settings") + settings.serializeFacetSettings(element) + return deserializeFacetSettings(element) + } +}