mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[build scripts] refactoring: pass platform prefix for the base IDE of JetBrains Client explicitly (IJPL-185957)
Currently, standalone frontend distributions for all IDEs have platformPrefix 'JetBrainsClient'. To distinguish different distributions of JetBrainsClient inside the dev build, the platform prefix of the base IDE was implicitly prepended to the 'platformPrefix' property. This may cause problems with code which uses 'platformPrefix' and expects the proper value, so now an explicit 'baseIdePlatformPrefixForFrontend' property is added. GitOrigin-RevId: 9f8f429bc02f25d7a0858c74ddff3c0956cce908
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d500d31ec2
commit
9273adbf57
@@ -54,6 +54,7 @@ fun buildDevImpl(): BuildDevInfo {
|
||||
buildProductInProcess(
|
||||
BuildRequest(
|
||||
platformPrefix = System.getProperty("idea.platform.prefix", "idea"),
|
||||
baseIdePlatformPrefixForFrontend = System.getProperty("dev.build.base.ide.platform.prefix.for.frontend"),
|
||||
additionalModules = getAdditionalPluginMainModules(),
|
||||
projectDir = ideaProjectRoot,
|
||||
keepHttpClient = false,
|
||||
|
||||
@@ -19,7 +19,7 @@ import org.jetbrains.intellij.build.impl.qodana.QodanaProductProperties
|
||||
import org.jetbrains.jps.model.JpsProject
|
||||
import org.jetbrains.jps.model.module.JpsModule
|
||||
import java.nio.file.Path
|
||||
import java.util.*
|
||||
import java.util.Locale
|
||||
import java.util.function.BiPredicate
|
||||
|
||||
/**
|
||||
@@ -405,6 +405,13 @@ abstract class ProductProperties {
|
||||
@Suppress("DEPRECATION")
|
||||
open fun applicationInfoOverride(project: JpsProject): ApplicationInfoOverrides? = null
|
||||
|
||||
/**
|
||||
* For a standalone frontend distribution, specifies the platform prefix of its base IDE. In other cases returns `null`.
|
||||
*/
|
||||
@get:ApiStatus.Internal
|
||||
open val baseIdePlatformPrefixForFrontend: String?
|
||||
get() = null
|
||||
|
||||
@Deprecated("Do not use it. Needed only for JetBrains Client per-ide customisation + it's temporary")
|
||||
data class ApplicationInfoOverrides(
|
||||
val fullProductName: String,
|
||||
|
||||
@@ -103,7 +103,7 @@ suspend fun buildProductInProcess(request: BuildRequest): Path {
|
||||
request = request,
|
||||
createProductProperties = { compilationContext ->
|
||||
val configuration = createConfiguration(homePath = request.projectDir, productionClassOutput = request.productionClassOutput)
|
||||
val productConfiguration = getProductConfiguration(configuration, request.platformPrefix)
|
||||
val productConfiguration = getProductConfiguration(configuration, request.platformPrefix, request.baseIdePlatformPrefixForFrontend)
|
||||
createProductProperties(productConfiguration = productConfiguration, compilationContext = compilationContext, request = request)
|
||||
},
|
||||
)
|
||||
@@ -135,9 +135,10 @@ internal fun getProductPropertiesPath(homePath: Path): Path {
|
||||
?: homePath.resolve(PRODUCTS_PROPERTIES_PATH)
|
||||
}
|
||||
|
||||
private fun getProductConfiguration(configuration: Configuration, platformPrefix: String): ProductConfiguration {
|
||||
return configuration.products[platformPrefix]
|
||||
?: throw ConfigurationException("No production configuration for platform prefix `${platformPrefix}`; please add to `${PRODUCTS_PROPERTIES_PATH}` if needed")
|
||||
private fun getProductConfiguration(configuration: Configuration, platformPrefix: String, baseIdePlatformPrefixForFrontend: String?): ProductConfiguration {
|
||||
val key = if (baseIdePlatformPrefixForFrontend != null) "$baseIdePlatformPrefixForFrontend$platformPrefix" else platformPrefix
|
||||
return configuration.products[key]
|
||||
?: throw ConfigurationException("No production configuration for `$key`; please add to `${PRODUCTS_PROPERTIES_PATH}` if needed")
|
||||
}
|
||||
|
||||
internal class ConfigurationException(message: String) : RuntimeException(message)
|
||||
|
||||
@@ -92,6 +92,8 @@ data class BuildRequest(
|
||||
@JvmField val platformPrefix: String,
|
||||
@JvmField val additionalModules: List<String>,
|
||||
@JvmField val projectDir: Path,
|
||||
/** For a standalone frontend distribution where `platformPrefix` is "JetBrainsClient", specifies the platform prefix of its base IDE. */
|
||||
@JvmField val baseIdePlatformPrefixForFrontend: String? = null,
|
||||
@JvmField val devRootDir: Path = System.getProperty("idea.dev.root.dir")?.let { Path.of(it).normalize().toAbsolutePath() } ?: projectDir.resolve("out/dev-run"),
|
||||
@JvmField val jarCacheDir: Path = devRootDir.resolve("jar-cache"),
|
||||
@JvmField val productionClassOutput: Path = System.getenv("CLASSES_DIR")?.let { Path.of(it).normalize().toAbsolutePath() } ?: projectDir.resolve("out/classes/production"),
|
||||
@@ -116,11 +118,16 @@ data class BuildRequest(
|
||||
@JvmField val os: OsFamily = OsFamily.currentOs
|
||||
) {
|
||||
override fun toString(): String =
|
||||
"BuildRequest(platformPrefix='$platformPrefix', " +
|
||||
"additionalModules=$additionalModules, " +
|
||||
"productionClassOutput=$productionClassOutput, " +
|
||||
"keepHttpClient=$keepHttpClient, " +
|
||||
"generateRuntimeModuleRepository=$generateRuntimeModuleRepository"
|
||||
buildString {
|
||||
append("BuildRequest(platformPrefix='$platformPrefix', ")
|
||||
if (baseIdePlatformPrefixForFrontend != null) {
|
||||
append("baseIdePlatformPrefixForFrontend='$baseIdePlatformPrefixForFrontend', ")
|
||||
}
|
||||
append("additionalModules=$additionalModules, ")
|
||||
append("productionClassOutput=$productionClassOutput, ")
|
||||
append("keepHttpClient=$keepHttpClient, ")
|
||||
append("generateRuntimeModuleRepository=$generateRuntimeModuleRepository")
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
@@ -138,7 +145,11 @@ internal suspend fun buildProduct(request: BuildRequest, createProductProperties
|
||||
}
|
||||
|
||||
val classifier = computeAdditionalModulesFingerprint(request.additionalModules)
|
||||
val productDirNameWithoutClassifier = if (request.platformPrefix == "Idea") "idea-community" else request.platformPrefix
|
||||
val productDirNameWithoutClassifier = when (request.platformPrefix) {
|
||||
"Idea" -> "idea-community"
|
||||
"JetBrainsClient" -> "${request.baseIdePlatformPrefixForFrontend ?: ""}${request.platformPrefix}"
|
||||
else -> request.platformPrefix
|
||||
}
|
||||
val productDirName = (productDirNameWithoutClassifier + (if (System.getProperty("intellij.build.minimal").toBoolean()) "-ij-void" else "") + classifier).takeLast(255)
|
||||
|
||||
val buildDir = withContext(Dispatchers.IO.limitedParallelism(4)) {
|
||||
|
||||
+1
@@ -30,6 +30,7 @@ internal suspend fun createDevModeProductRunner(context: BuildContext, additiona
|
||||
isUnpackedDist = false,
|
||||
writeCoreClasspath = false,
|
||||
platformPrefix = context.productProperties.platformPrefix ?: "idea",
|
||||
baseIdePlatformPrefixForFrontend = context.productProperties.baseIdePlatformPrefixForFrontend,
|
||||
additionalModules = additionalPluginModules,
|
||||
projectDir = homeDir,
|
||||
devRootDir = context.paths.tempDir.resolve("dev-run"),
|
||||
|
||||
Reference in New Issue
Block a user