From f9f7fd7da66765d9b3bf5e63db02ca6c54ba2070 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Sun, 22 Dec 2024 19:21:23 +0100 Subject: [PATCH] IDEA-355465 Multiple Projects In Workspace: multimodule Gradle projects loose their JDK fix gradle jdk on import GitOrigin-RevId: e3662b135fde7e07b76ec962a1c02b49744df5a9 --- .../startup/GradleProjectSettingsUpdater.kt | 79 ++++++++++--------- 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/startup/GradleProjectSettingsUpdater.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/startup/GradleProjectSettingsUpdater.kt index 031d5e5c5dbf..8bd24c0771ee 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/startup/GradleProjectSettingsUpdater.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/startup/GradleProjectSettingsUpdater.kt @@ -26,6 +26,7 @@ import org.jetbrains.plugins.gradle.service.execution.GradleDaemonJvmHelper import org.jetbrains.plugins.gradle.service.project.GradleNotification import org.jetbrains.plugins.gradle.service.project.GradleNotificationIdsHolder import org.jetbrains.plugins.gradle.settings.GradleProjectSettings +import org.jetbrains.plugins.gradle.startup.GradleProjectSettingsUpdater.Util import org.jetbrains.plugins.gradle.util.GradleBundle import org.jetbrains.plugins.gradle.util.GradleConstants import org.jetbrains.plugins.gradle.util.getGradleJvmLookupProvider @@ -116,47 +117,53 @@ internal class GradleProjectSettingsUpdater : ExternalSystemSettingsListenerEx { if (manager !is GradleManager) return for (projectSettings in settings) { - if (projectSettings !is GradleProjectSettings) continue - if (GradleDaemonJvmHelper.isProjectUsingDaemonJvmCriteria(projectSettings)) continue - val statusFuture = Util.updateGradleJvm(project, projectSettings) - statusFuture.thenAccept { - if (it.updated && it.sdkName != null) notifyGradleJvmChangeInfo(project, projectSettings, it.sdkName, it.sdk) + if (projectSettings is GradleProjectSettings) { + fixGradleJvm(project, projectSettings) } } } +} - - private fun notifyGradleJvmChangeInfo( - project: Project, - projectSettings: GradleProjectSettings, - gradleJvm: String, - sdk: Sdk? - ) { - if (sdk == null) return - val versionString = sdk.versionString ?: return - val homePath = sdk.homePath ?: return - val externalProjectPath = projectSettings.externalProjectPath ?: return - - val presentablePath = SdkListPresenter.presentDetectedSdkPath(homePath) - val notificationTitle = GradleBundle.message("gradle.notifications.java.home.change.title") - val notificationContent = GradleBundle.message("gradle.notifications.java.home.change.content", gradleJvm, versionString, - presentablePath) - val notification = GradleNotification.gradleNotificationGroup.createNotification(notificationTitle, notificationContent, INFORMATION) - notification.setDisplayId(GradleNotificationIdsHolder.jvmConfigured) - notification.addAction(NotificationAction.createSimple(GradleBundle.message("gradle.open.gradle.settings")) { - showGradleProjectSettings(project, externalProjectPath) - }) - notification.notify(project) +fun fixGradleJvm(project: Project, projectSettings: GradleProjectSettings) { + if (GradleDaemonJvmHelper.isProjectUsingDaemonJvmCriteria(projectSettings)) return + val statusFuture = Util.updateGradleJvm(project, projectSettings) + statusFuture.thenAccept { + if (it.updated && it.sdkName != null) notifyGradleJvmChangeInfo(project, projectSettings, it.sdkName, it.sdk) } +} - private fun showGradleProjectSettings(project: Project, externalProjectPath: String) { - val manager = ExternalSystemApiUtil.getManager(GradleConstants.SYSTEM_ID) - val configurable = (manager as ExternalSystemConfigurableAware).getConfigurable(project) - if (configurable is AbstractExternalSystemConfigurable<*, *, *>) { - val settingsUtil = ShowSettingsUtil.getInstance() - settingsUtil.editConfigurable(project, configurable) { - configurable.selectProject(externalProjectPath) - } +private fun notifyGradleJvmChangeInfo( + project: Project, + projectSettings: GradleProjectSettings, + gradleJvm: String, + sdk: Sdk? +) { + if (sdk == null) return + val versionString = sdk.versionString ?: return + val homePath = sdk.homePath ?: return + val externalProjectPath = projectSettings.externalProjectPath ?: return + + val presentablePath = SdkListPresenter.presentDetectedSdkPath(homePath) + val notificationTitle = GradleBundle.message("gradle.notifications.java.home.change.title") + val notificationContent = GradleBundle.message("gradle.notifications.java.home.change.content", gradleJvm, versionString, + presentablePath) + val notification = GradleNotification.gradleNotificationGroup.createNotification(notificationTitle, notificationContent, INFORMATION) + notification.setDisplayId(GradleNotificationIdsHolder.jvmConfigured) + notification.addAction(NotificationAction.createSimple(GradleBundle.message("gradle.open.gradle.settings")) { + showGradleProjectSettings(project, externalProjectPath) + }) + notification.notify(project) +} + +private fun showGradleProjectSettings(project: Project, externalProjectPath: String) { + val manager = ExternalSystemApiUtil.getManager(GradleConstants.SYSTEM_ID) + val configurable = (manager as ExternalSystemConfigurableAware).getConfigurable(project) + if (configurable is AbstractExternalSystemConfigurable<*, *, *>) { + val settingsUtil = ShowSettingsUtil.getInstance() + settingsUtil.editConfigurable(project, configurable) { + configurable.selectProject(externalProjectPath) } } -} \ No newline at end of file +} + +