diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.kt index 2346d920c05c..15c86e25fd03 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.kt @@ -20,8 +20,8 @@ import org.jetbrains.intellij.build.NativeBinaryDownloader import org.jetbrains.intellij.build.OsFamily import org.jetbrains.intellij.build.executeStep import org.jetbrains.intellij.build.impl.OsSpecificDistributionBuilder.Companion.suffix -import org.jetbrains.intellij.build.impl.client.ADDITIONAL_EMBEDDED_CLIENT_VM_OPTIONS import org.jetbrains.intellij.build.impl.client.createFrontendContextForLaunchers +import org.jetbrains.intellij.build.impl.client.getAdditionalEmbeddedClientVmOptions import org.jetbrains.intellij.build.impl.productInfo.PRODUCT_INFO_FILE_NAME import org.jetbrains.intellij.build.impl.productInfo.generateEmbeddedFrontendLaunchData import org.jetbrains.intellij.build.impl.productInfo.generateProductInfoJson @@ -87,7 +87,7 @@ class LinuxDistributionBuilder( createFrontendContextForLaunchers(context)?.let { clientContext -> writeLinuxVmOptions(distBinDir, clientContext) generateLauncherScript( - distBinDir, arch, ADDITIONAL_EMBEDDED_CLIENT_VM_OPTIONS, targetLibcImpl, clientContext + distBinDir, arch, getAdditionalEmbeddedClientVmOptions(OsFamily.LINUX, context), targetLibcImpl, clientContext ) } generateReadme(targetPath) diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/MacDistributionBuilder.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/MacDistributionBuilder.kt index 634aee963ebf..79e9bac7da93 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/MacDistributionBuilder.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/MacDistributionBuilder.kt @@ -58,7 +58,6 @@ import java.util.zip.Deflater import kotlin.io.path.ExperimentalPathApi import kotlin.io.path.createDirectories import kotlin.io.path.deleteRecursively -import kotlin.io.path.exists import kotlin.io.path.extension import kotlin.io.path.isRegularFile import kotlin.io.path.listDirectoryEntries @@ -286,6 +285,13 @@ class MacDistributionBuilder( if (alternativeIcon != null) { copyFile(alternativeIcon, resourcesDistDir.resolve("custom.icns")) } + if (context.isEmbeddedFrontendEnabled) { + val icnsForFrontendApp = locateIcnsForFrontendMacApp(context) + if (icnsForFrontendApp != null) { + //path to the copied file will be passed as the value of `apple.awt.application.icon` property in `getAdditionalEmbeddedClientVmOptions` + copyFile(icnsForFrontendApp, resourcesDistDir.resolve("frontend.icns")) + } + } for (fileAssociation in customizer.fileAssociations) { if (!fileAssociation.iconPath.isEmpty()) { diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/ProductImageFiles.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/ProductImageFiles.kt index b7cf9b2828da..b4100df223d5 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/ProductImageFiles.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/ProductImageFiles.kt @@ -29,7 +29,7 @@ internal fun locateIcoFileForWindowsLauncher(customizer: WindowsDistributionCust internal fun locateIcnsForMacApp(customizer: MacDistributionCustomizer, context: BuildContext): Path { if (context.productProperties.productMode == ProductMode.FRONTEND) { - val frontendIcnsPath = locateFrontendImageFile(filePath = MAC_ICNS_FRONTEND_PATH, eapFilePath = MAC_ICNS_FRONTEND_EAP_PATH, context = context) + val frontendIcnsPath = locateIcnsForFrontendMacApp(context) if (frontendIcnsPath != null) { return frontendIcnsPath } @@ -43,6 +43,10 @@ internal fun locateIcnsForMacApp(customizer: MacDistributionCustomizer, context: return customizer.icnsPath ?: context.productProperties.imagesDirectoryPath?.resolve(MAC_ICNS_PATH) ?: error("Path to icns file is not specified") } +internal fun locateIcnsForFrontendMacApp(context: BuildContext): Path? { + return locateFrontendImageFile(filePath = MAC_ICNS_FRONTEND_PATH, eapFilePath = MAC_ICNS_FRONTEND_EAP_PATH, context = context) +} + internal fun locateDmgImageForMacApp(customizer: MacDistributionCustomizer, context: BuildContext): Path { if (context.applicationInfo.isEAP) { val eapDmgImagePath = customizer.dmgImagePathForEAP ?: context.productProperties.imagesDirectoryPath?.resolve(MAC_DMG_BACKGROUND_EAP_PATH)?.takeIf { it.exists() } diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/client/EmbeddedJetBrainsClientLaunchers.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/client/EmbeddedJetBrainsClientLaunchers.kt index bdcc676acae9..169b430dd63e 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/client/EmbeddedJetBrainsClientLaunchers.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/client/EmbeddedJetBrainsClientLaunchers.kt @@ -2,6 +2,8 @@ package org.jetbrains.intellij.build.impl.client import org.jetbrains.intellij.build.BuildContext +import org.jetbrains.intellij.build.OsFamily +import org.jetbrains.intellij.build.impl.locateIcnsForFrontendMacApp /** * Creates a copy of [originalContext] with [org.jetbrains.intellij.build.ProductProperties] changed to a frontend variant (JetBrains Client) properties. @@ -17,6 +19,12 @@ internal suspend fun createFrontendContextForLaunchers(originalContext: BuildCon return null } -internal val ADDITIONAL_EMBEDDED_CLIENT_VM_OPTIONS: List = listOf( - "-Dintellij.platform.load.app.info.from.resources=true", -) \ No newline at end of file +internal fun getAdditionalEmbeddedClientVmOptions(os: OsFamily, ideContext: BuildContext): List { + val result = mutableListOf( + "-Dintellij.platform.load.app.info.from.resources=true", + ) + if (os == OsFamily.MACOS && locateIcnsForFrontendMacApp(ideContext) != null) { + result.add($$"-Dapple.awt.application.icon=$APP_PACKAGE/Contents/Resources/frontend.icns") + } + return result +} \ No newline at end of file diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/productInfo/ProductInfoGenerator.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/productInfo/ProductInfoGenerator.kt index 0af14cf8aaee..8126afece63c 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/productInfo/ProductInfoGenerator.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/productInfo/ProductInfoGenerator.kt @@ -16,8 +16,8 @@ import org.jetbrains.intellij.build.BuiltinModulesFileData import org.jetbrains.intellij.build.JvmArchitecture import org.jetbrains.intellij.build.OsFamily import org.jetbrains.intellij.build.impl.Git -import org.jetbrains.intellij.build.impl.client.ADDITIONAL_EMBEDDED_CLIENT_VM_OPTIONS import org.jetbrains.intellij.build.impl.client.createFrontendContextForLaunchers +import org.jetbrains.intellij.build.impl.client.getAdditionalEmbeddedClientVmOptions import org.jetbrains.jps.model.java.JpsJavaExtensionService import java.nio.file.Files import java.nio.file.Path @@ -135,7 +135,7 @@ internal suspend fun generateEmbeddedFrontendLaunchData( commands = listOf("thinClient", "thinClient-headless", "installFrontendPlugins"), vmOptionsFilePath = vmOptionsFilePath(clientContext), bootClassPathJarNames = clientContext.bootClassPathJarNames, - additionalJvmArguments = clientContext.getAdditionalJvmArguments(os, arch) + ADDITIONAL_EMBEDDED_CLIENT_VM_OPTIONS, + additionalJvmArguments = clientContext.getAdditionalJvmArguments(os, arch) + getAdditionalEmbeddedClientVmOptions(os, ideContext), mainClass = clientContext.ideMainClassName, envVarBaseName = "JETBRAINS_CLIENT", dataDirectoryName = clientContext.systemSelector,