diff --git a/build/src/org/jetbrains/intellij/build/IdeaCommunityProperties.kt b/build/src/org/jetbrains/intellij/build/IdeaCommunityProperties.kt index 6b8bc0ae8c4b..08819f24f64f 100644 --- a/build/src/org/jetbrains/intellij/build/IdeaCommunityProperties.kt +++ b/build/src/org/jetbrains/intellij/build/IdeaCommunityProperties.kt @@ -134,7 +134,7 @@ open class IdeaCommunityProperties(private val communityHomeDir: Path) : JetBrai protected open suspend fun bundleExternalPlugins(context: BuildContext, targetDirectory: Path) {} - override fun createWindowsCustomizer(projectHome: String): WindowsDistributionCustomizer = CommunityWindowsDistributionCustomizer() + override fun createWindowsCustomizer(projectHome: Path): WindowsDistributionCustomizer = CommunityWindowsDistributionCustomizer() override fun createLinuxCustomizer(projectHome: String): LinuxDistributionCustomizer = CommunityLinuxDistributionCustomizer() @@ -145,9 +145,11 @@ open class IdeaCommunityProperties(private val communityHomeDir: Path) : JetBrai icoPath = "${communityHomeDir}/build/conf/ideaCE/win/images/idea_CE.ico" icoPathForEAP = "${communityHomeDir}/build/conf/ideaCE/win/images/idea_CE_EAP.ico" installerImagesPath = "${communityHomeDir}/build/conf/ideaCE/win/images" - fileAssociations = listOf("java", "gradle", "groovy", "kt", "kts", "pom") } + override val fileAssociations: List + get() = listOf("java", "gradle", "groovy", "kt", "kts", "pom") + override fun getFullNameIncludingEdition(appInfo: ApplicationInfoProperties): String = "IntelliJ IDEA Community Edition" override fun getFullNameIncludingEditionAndVendor(appInfo: ApplicationInfoProperties): String = "IntelliJ IDEA Community Edition" diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/BuildOptions.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/BuildOptions.kt index e8e55c13e262..cf3330d9ac11 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/BuildOptions.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/BuildOptions.kt @@ -63,7 +63,9 @@ data class BuildOptions( /** * Pass comma-separated names of build steps (see below) to [BUILD_STEPS_TO_SKIP_PROPERTY] system property to skip them when building locally. */ - @JvmField var buildStepsToSkip: Set = System.getProperty(BUILD_STEPS_TO_SKIP_PROPERTY, "").split(',').dropLastWhile { it.isEmpty() } + @JvmField var buildStepsToSkip: Set = System.getProperty(BUILD_STEPS_TO_SKIP_PROPERTY, "") + .split(',') + .dropLastWhile { it.isEmpty() } .filterNot { it.isBlank() } .toMutableSet() .apply { diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/MacDistributionCustomizer.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/MacDistributionCustomizer.kt index 11e9072f6589..1093f9ed3dff 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/MacDistributionCustomizer.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/MacDistributionCustomizer.kt @@ -152,12 +152,14 @@ open class MacDistributionCustomizer { "MacOS/*" ) - val rtPatterns = - if (includeRuntime) context.bundledRuntime.executableFilesPatterns(OsFamily.MACOS, context.productProperties.runtimeDistribution) - else emptySequence() + val rtPatterns = if (includeRuntime) { + context.bundledRuntime.executableFilesPatterns(OsFamily.MACOS, context.productProperties.runtimeDistribution) + } + else { + emptySequence() + } val utilPatters = RepairUtilityBuilder.executableFilesPatterns(context) - return basePatterns + rtPatterns + utilPatters + extraExecutables + context.getExtraExecutablePattern(OsFamily.MACOS) } @@ -173,6 +175,7 @@ open class MacDistributionCustomizer { * > For example, the network subsystem might apply constraints for one of your apps to the other app. */ @ApiStatus.Internal - open fun getDistributionUUID(context: BuildContext, currentUuid: UUID?): UUID = - UUID.nameUUIDFromBytes("${context.fullBuildNumber}-${context.options.buildDateInSeconds}".toByteArray()) + open fun getDistributionUUID(context: BuildContext, currentUuid: UUID?): UUID { + return UUID.nameUUIDFromBytes("${context.fullBuildNumber}-${context.options.buildDateInSeconds}".toByteArray()) + } } diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/ProductProperties.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/ProductProperties.kt index 891be3933a7b..71646228c49e 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/ProductProperties.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/ProductProperties.kt @@ -282,7 +282,7 @@ abstract class ProductProperties { * @return an instance of the class containing properties specific for Windows distribution, * or `null` if the product doesn't have Windows distribution. */ - abstract fun createWindowsCustomizer(projectHome: String): WindowsDistributionCustomizer? + abstract fun createWindowsCustomizer(projectHome: Path): WindowsDistributionCustomizer? /** * @return an instance of the class containing properties specific for Linux distribution, diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/WindowsDistributionCustomizer.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/WindowsDistributionCustomizer.kt index 7de2cffab8a8..394bccc246ea 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/WindowsDistributionCustomizer.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/WindowsDistributionCustomizer.kt @@ -1,12 +1,10 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.intellij.build -import kotlinx.collections.immutable.PersistentList -import kotlinx.collections.immutable.persistentListOf import org.jetbrains.intellij.build.impl.support.RepairUtilityBuilder import java.nio.file.Path -open class WindowsDistributionCustomizer { +abstract class WindowsDistributionCustomizer { /** * Path to 256x256 *.ico file for Windows distribution. */ @@ -38,7 +36,8 @@ open class WindowsDistributionCustomizer { /** * If `true`, Windows Installer will associate *.ipr files with the IDE in Registry. */ - var associateIpr: Boolean = true + open val associateIpr: Boolean + get() = true /** * Path to a directory containing images for installer: `logo.bmp`, `headerlogo.bmp`, `install.ico`, `uninstall.ico`. @@ -53,12 +52,14 @@ open class WindowsDistributionCustomizer { /** * List of file extensions (without a leading dot) which the installer will suggest to associate with the product. */ - var fileAssociations: List = emptyList() + open val fileAssociations: List + get() = emptyList() /** * Paths to files which will be used to overwrite the standard *.nsi files. */ - var customNsiConfigurationFiles: PersistentList = persistentListOf() + open val customNsiConfigurationFiles: List + get() = emptyList() /** * Name of the root directory in Windows .zip archive @@ -69,8 +70,9 @@ open class WindowsDistributionCustomizer { /** * Name of the Windows installation directory and Desktop shortcut. */ - open fun getNameForInstallDirAndDesktopShortcut(appInfo: ApplicationInfoProperties, buildNumber: String): String = - "${getFullNameIncludingEdition(appInfo)} ${if (appInfo.isEAP) buildNumber else appInfo.fullVersion}" + open fun getNameForInstallDirAndDesktopShortcut(appInfo: ApplicationInfoProperties, buildNumber: String): String { + return "${getFullNameIncludingEdition(appInfo)} ${if (appInfo.isEAP) buildNumber else appInfo.fullVersion}" + } /** * Override this method to copy additional files to the Windows distribution of the product. @@ -92,8 +94,9 @@ open class WindowsDistributionCustomizer { /** * The returned name will be used to create links on Desktop. */ - open fun getFullNameIncludingEditionAndVendor(appInfo: ApplicationInfoProperties): String = - appInfo.shortCompanyName + ' ' + getFullNameIncludingEdition(appInfo) + open fun getFullNameIncludingEditionAndVendor(appInfo: ApplicationInfoProperties): String { + return appInfo.shortCompanyName + ' ' + getFullNameIncludingEdition(appInfo) + } open fun getUninstallFeedbackPageUrl(appInfo: ApplicationInfoProperties): String? = null diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/dev/IdeBuilder.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/dev/IdeBuilder.kt index c6b60e9bfdd2..39b811fbb378 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/dev/IdeBuilder.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/dev/IdeBuilder.kt @@ -479,7 +479,7 @@ private suspend fun createBuildContext( BuildContextImpl( compilationContext = compilationContext, productProperties = productProperties.await(), - windowsDistributionCustomizer = WindowsDistributionCustomizer(), + windowsDistributionCustomizer = object : WindowsDistributionCustomizer() {}, linuxDistributionCustomizer = LinuxDistributionCustomizer(), macDistributionCustomizer = MacDistributionCustomizer(), proprietaryBuildTools = if (request.scrambleTool == null) { diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/BuildContextImpl.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/BuildContextImpl.kt index 41870a34f85c..6159c8e3c0aa 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/BuildContextImpl.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/BuildContextImpl.kt @@ -210,7 +210,7 @@ class BuildContextImpl internal constructor( return BuildContextImpl( compilationContext = compilationContext.asArchivedIfNeeded, productProperties = productProperties, - windowsDistributionCustomizer = productProperties.createWindowsCustomizer(projectHomeAsString), + windowsDistributionCustomizer = productProperties.createWindowsCustomizer(projectHome), linuxDistributionCustomizer = productProperties.createLinuxCustomizer(projectHomeAsString), macDistributionCustomizer = productProperties.createMacCustomizer(projectHomeAsString), proprietaryBuildTools = proprietaryBuildTools, @@ -331,23 +331,25 @@ class BuildContextImpl internal constructor( options.targetArch = sourceOptions.targetArch options.targetOs = sourceOptions.targetOs - val newAppInfo = ApplicationInfoPropertiesImpl(project, productProperties, options) + val newAppInfo = ApplicationInfoPropertiesImpl(project = project, productProperties = productProperties, buildOptions = options) val buildOut = options.outRootDir ?: createBuildOutputRootEvaluator(paths.projectHome, productProperties, options)(project) @Suppress("DEPRECATION") val artifactDir = if (prepareForBuild) paths.artifactDir.resolve(productProperties.productCode ?: newAppInfo.productCode) else null val compilationContextCopy = compilationContext.createCopy( - messages, options, computeBuildPaths(options = options, buildOut = buildOut, projectHome = paths.projectHome, artifactDir = artifactDir) + messages = messages, + options = options, + paths = computeBuildPaths(options = options, buildOut = buildOut, projectHome = paths.projectHome, artifactDir = artifactDir) ) val copy = BuildContextImpl( compilationContext = compilationContextCopy, productProperties = productProperties, - windowsDistributionCustomizer = productProperties.createWindowsCustomizer(projectHomeForCustomizersAsString), + windowsDistributionCustomizer = productProperties.createWindowsCustomizer(projectHomeForCustomizers), linuxDistributionCustomizer = productProperties.createLinuxCustomizer(projectHomeForCustomizersAsString), macDistributionCustomizer = productProperties.createMacCustomizer(projectHomeForCustomizersAsString), proprietaryBuildTools = proprietaryBuildTools, applicationInfo = newAppInfo, - jarCacheManager = jarCacheManager + jarCacheManager = jarCacheManager, ) if (prepareForBuild) { copy.compilationContext.prepareForBuild() diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/WinExeInstallerBuilder.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/WinExeInstallerBuilder.kt index b41fdfdfd8ed..c44e61dbce7b 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/WinExeInstallerBuilder.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/WinExeInstallerBuilder.kt @@ -75,8 +75,7 @@ internal suspend fun buildNsisInstaller( generator.generateUninstallerFile(nsiConfDir.resolve("un_idea_win.nsh")) prepareConfigurationFiles(nsiConfDir, uninstallerFileName, customizer, context, arch) - for (it in customizer.customNsiConfigurationFiles) { - val file = Path.of(it) + for (file in customizer.customNsiConfigurationFiles) { val copy = nsiConfDir.resolve(file.fileName) Files.copy(file, copy, StandardCopyOption.REPLACE_EXISTING) copy.setLastModifiedTime(FileTime.from(context.options.buildDateInSeconds, TimeUnit.SECONDS)) diff --git a/python/build/src/org/jetbrains/intellij/build/pycharm/PyCharmCommunityProperties.kt b/python/build/src/org/jetbrains/intellij/build/pycharm/PyCharmCommunityProperties.kt index 26d343939a82..193a5ac29b6e 100644 --- a/python/build/src/org/jetbrains/intellij/build/pycharm/PyCharmCommunityProperties.kt +++ b/python/build/src/org/jetbrains/intellij/build/pycharm/PyCharmCommunityProperties.kt @@ -88,14 +88,16 @@ open class PyCharmCommunityProperties(protected val communityHome: Path) : PyCha override fun getBaseArtifactName(appInfo: ApplicationInfoProperties, buildNumber: String): String = "pycharmPC-$buildNumber" - override fun createWindowsCustomizer(projectHome: String): WindowsDistributionCustomizer = object : WindowsDistributionCustomizer() { + override fun createWindowsCustomizer(projectHome: Path): WindowsDistributionCustomizer = object : WindowsDistributionCustomizer() { init { icoPath = "${communityHome}/python/build/resources/PyCharmCore.ico" icoPathForEAP = "${communityHome}/python/build/resources/PyCharmCore_EAP.ico" installerImagesPath = "${communityHome}/python/build/resources" - fileAssociations = listOf("py") } + override val fileAssociations: List + get() = listOf("py") + override fun getFullNameIncludingEdition(appInfo: ApplicationInfoProperties) = "PyCharm Community Edition" override suspend fun copyAdditionalFiles(targetDir: Path, arch: JvmArchitecture, context: BuildContext) {