From c002af6365e3fb0530cedb4b44a6e0feb878829e Mon Sep 17 00:00:00 2001 From: "Aleksei.Cherepanov" Date: Fri, 24 Nov 2023 21:22:11 +0100 Subject: [PATCH] Make plugin classpath serialization path agnostic This is needed for correct usage of portable caches ^KT-63799 Fixed --- .../src/org/jetbrains/kotlin/build/BuildMetaInfo.kt | 5 ++--- .../org/jetbrains/kotlin/build/CommonBuildMetaInfo.kt | 3 +-- .../src/org/jetbrains/kotlin/build/JsBuildMetaInfo.kt | 3 +-- .../src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt | 3 +-- .../org/jetbrains/kotlin/build/PluginClasspathsUtils.kt | 9 ++++----- .../kotlin/jps/build/RelocatableJpsCachesTest.kt | 3 ++- .../kotlin/jps/targets/KotlinCommonModuleBuildTarget.kt | 3 +-- .../kotlin/jps/targets/KotlinJsModuleBuildTarget.kt | 3 +-- .../kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt | 3 +-- 9 files changed, 14 insertions(+), 21 deletions(-) diff --git a/build-common/src/org/jetbrains/kotlin/build/BuildMetaInfo.kt b/build-common/src/org/jetbrains/kotlin/build/BuildMetaInfo.kt index 9069c76ab3e..1272d6f6d20 100644 --- a/build-common/src/org/jetbrains/kotlin/build/BuildMetaInfo.kt +++ b/build-common/src/org/jetbrains/kotlin/build/BuildMetaInfo.kt @@ -7,9 +7,8 @@ package org.jetbrains.kotlin.build import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.config.* -import org.jetbrains.kotlin.incremental.storage.RelativeFileToPathConverter -abstract class BuildMetaInfo(val converter: RelativeFileToPathConverter?) { +abstract class BuildMetaInfo { enum class CustomKeys { LANGUAGE_VERSION_STRING, IS_EAP, METADATA_VERSION_STRING, PLUGIN_CLASSPATHS, API_VERSION_STRING } @@ -78,7 +77,7 @@ abstract class BuildMetaInfo(val converter: RelativeFileToPathConverter?) { val apiVersionString = args.apiVersion ?: languageVersionSting resultMap[CustomKeys.API_VERSION_STRING.name] = apiVersionString - val pluginClasspath = PluginClasspath(args.pluginClasspaths, converter).serialize() + val pluginClasspath = PluginClasspath(args.pluginClasspaths).serialize() resultMap[CustomKeys.PLUGIN_CLASSPATHS.name] = pluginClasspath return resultMap diff --git a/build-common/src/org/jetbrains/kotlin/build/CommonBuildMetaInfo.kt b/build-common/src/org/jetbrains/kotlin/build/CommonBuildMetaInfo.kt index dbed81d3c1c..34e2e99c751 100644 --- a/build-common/src/org/jetbrains/kotlin/build/CommonBuildMetaInfo.kt +++ b/build-common/src/org/jetbrains/kotlin/build/CommonBuildMetaInfo.kt @@ -6,11 +6,10 @@ package org.jetbrains.kotlin.build import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.incremental.storage.RelativeFileToPathConverter import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion -class CommonBuildMetaInfo(converter: RelativeFileToPathConverter?) : BuildMetaInfo(converter) { +class CommonBuildMetaInfo : BuildMetaInfo() { override fun checkIfPlatformSpecificCompilerArgumentWasChanged(key: String, currentValue: String, previousValue: String): Boolean? { when (key) { CustomKeys.METADATA_VERSION_STRING.name -> { diff --git a/build-common/src/org/jetbrains/kotlin/build/JsBuildMetaInfo.kt b/build-common/src/org/jetbrains/kotlin/build/JsBuildMetaInfo.kt index 6f979ad2f3a..54bb9c9587a 100644 --- a/build-common/src/org/jetbrains/kotlin/build/JsBuildMetaInfo.kt +++ b/build-common/src/org/jetbrains/kotlin/build/JsBuildMetaInfo.kt @@ -6,11 +6,10 @@ package org.jetbrains.kotlin.build import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.incremental.storage.RelativeFileToPathConverter import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.utils.JsMetadataVersion -class JsBuildMetaInfo(converter: RelativeFileToPathConverter?) : BuildMetaInfo(converter) { +class JsBuildMetaInfo : BuildMetaInfo() { override fun checkIfPlatformSpecificCompilerArgumentWasChanged(key: String, currentValue: String, previousValue: String): Boolean? { when (key) { CustomKeys.METADATA_VERSION_STRING.name -> { diff --git a/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt b/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt index b8a62651ae8..34f49496106 100644 --- a/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt +++ b/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt @@ -17,11 +17,10 @@ package org.jetbrains.kotlin.build import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.incremental.storage.RelativeFileToPathConverter import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion -class JvmBuildMetaInfo(converter: RelativeFileToPathConverter?) : BuildMetaInfo(converter) { +class JvmBuildMetaInfo : BuildMetaInfo() { override fun checkIfPlatformSpecificCompilerArgumentWasChanged(key: String, currentValue: String, previousValue: String): Boolean? { when (key) { CustomKeys.METADATA_VERSION_STRING.name -> { diff --git a/build-common/src/org/jetbrains/kotlin/build/PluginClasspathsUtils.kt b/build-common/src/org/jetbrains/kotlin/build/PluginClasspathsUtils.kt index b05d879cf19..a64423341d2 100644 --- a/build-common/src/org/jetbrains/kotlin/build/PluginClasspathsUtils.kt +++ b/build-common/src/org/jetbrains/kotlin/build/PluginClasspathsUtils.kt @@ -5,24 +5,23 @@ package org.jetbrains.kotlin.build -import org.jetbrains.kotlin.incremental.storage.RelativeFileToPathConverter import java.io.File import java.security.DigestInputStream import java.security.MessageDigest -internal class PluginClasspath(private val classpath: Array?, val converter: RelativeFileToPathConverter?) { +internal class PluginClasspath(private val classpath: Array?) { companion object { fun deserializeWithHashes(str: String): List> = str.split(":") .filter(String::isNotBlank) - .map { Pair(File(it.substringBeforeLast("-")).name, it.substringAfterLast("-")) } + .map { Pair(it.substringBeforeLast("-"), it.substringAfterLast("-")) } } fun serialize() = classpath?.mapNotNull { it -> val jar = File(it).takeIf { it.exists() } ?: return@mapNotNull null - val jarPath = converter?.toPath(jar) ?: jar.absolutePath + val jarName = jar.name val jarHash = jar.sha256() - "$jarPath-$jarHash" + "$jarName-$jarHash" }?.joinToString(":") ?: "" private fun File.sha256(): String { diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/RelocatableJpsCachesTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/RelocatableJpsCachesTest.kt index 08784a06e89..40e5f29e323 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/RelocatableJpsCachesTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/RelocatableJpsCachesTest.kt @@ -119,7 +119,8 @@ abstract class RelocatableCacheTestCase( val facet = KotlinFacetSettings() facet.useProjectSettings = false facet.compilerArguments = K2JVMCompilerArguments().apply { - pluginClasspaths = arrayOf(module1Lib.absolutePath) + // Add both libraries inside and outside project + pluginClasspaths = arrayOf(module1Lib.absolutePath, libraryJar.absolutePath) } it.container.setChild( diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinCommonModuleBuildTarget.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinCommonModuleBuildTarget.kt index 0a9230ce885..8ba33d5801b 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinCommonModuleBuildTarget.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinCommonModuleBuildTarget.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments import org.jetbrains.kotlin.compilerRunner.JpsCompilerEnvironment import org.jetbrains.kotlin.compilerRunner.JpsKotlinCompilerRunner -import org.jetbrains.kotlin.incremental.storage.RelativeFileToPathConverter import org.jetbrains.kotlin.jps.build.KotlinCompileContext import org.jetbrains.kotlin.jps.build.KotlinDirtySourceFilesHolder import org.jetbrains.kotlin.jps.build.ModuleBuildTarget @@ -40,7 +39,7 @@ class KotlinCommonModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModu get() = COMMON_BUILD_META_INFO_FILE_NAME override val buildMetaInfo: CommonBuildMetaInfo - get() = CommonBuildMetaInfo(kotlinContext.fileToPathConverter as? RelativeFileToPathConverter) + get() = CommonBuildMetaInfo() override val globalLookupCacheId: String get() = "metadata-compiler" diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJsModuleBuildTarget.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJsModuleBuildTarget.kt index c134453379b..8a12b8db4dc 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJsModuleBuildTarget.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJsModuleBuildTarget.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider import org.jetbrains.kotlin.incremental.js.IncrementalDataProviderFromCache import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumerImpl -import org.jetbrains.kotlin.incremental.storage.RelativeFileToPathConverter import org.jetbrains.kotlin.jps.build.KotlinCompileContext import org.jetbrains.kotlin.jps.build.KotlinDirtySourceFilesHolder import org.jetbrains.kotlin.jps.build.ModuleBuildTarget @@ -57,7 +56,7 @@ class KotlinJsModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleBu get() = JS_BUILD_META_INFO_FILE_NAME override val buildMetaInfo: JsBuildMetaInfo - get() = JsBuildMetaInfo(kotlinContext.fileToPathConverter as? RelativeFileToPathConverter) + get() = JsBuildMetaInfo() val isFirstBuild: Boolean get() { diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt index d6386f51ab8..138bd3a9fbb 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.config.Services import org.jetbrains.kotlin.incremental.* import org.jetbrains.kotlin.incremental.components.* -import org.jetbrains.kotlin.incremental.storage.RelativeFileToPathConverter import org.jetbrains.kotlin.jps.build.KotlinBuilder import org.jetbrains.kotlin.jps.build.KotlinCompileContext import org.jetbrains.kotlin.jps.build.KotlinDirtySourceFilesHolder @@ -66,7 +65,7 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB get() = JVM_BUILD_META_INFO_FILE_NAME override val buildMetaInfo: JvmBuildMetaInfo - get() = JvmBuildMetaInfo(kotlinContext.fileToPathConverter as? RelativeFileToPathConverter) + get() = JvmBuildMetaInfo() override val targetId: TargetId get() {