From 19aefdb5f8929606a37725a3bc3821ca1f528e6e Mon Sep 17 00:00:00 2001 From: Eugene Petrenko Date: Sun, 19 Apr 2020 11:22:36 +0200 Subject: [PATCH] UnknownSdk - yet another (proper) fix for IDEA-232821, IDEA-238147 (WIP) - fix presentation GitOrigin-RevId: 4449c902e7c7681ad2c32fcccde9adbd9b2559cc --- .../impl/UnknownSdkEditorNotification.java | 15 +++++++++++---- .../roots/ui/configuration/SdkListPresenter.java | 7 ++++++- .../resources/messages/ProjectBundle.properties | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/UnknownSdkEditorNotification.java b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/UnknownSdkEditorNotification.java index a57b89e3ea0e..f835d457d86e 100644 --- a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/UnknownSdkEditorNotification.java +++ b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/UnknownSdkEditorNotification.java @@ -11,16 +11,16 @@ import com.intellij.openapi.fileEditor.FileEditorManagerListener; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.SdkType; +import com.intellij.openapi.roots.ui.configuration.SdkListPresenter; import com.intellij.openapi.roots.ui.configuration.UnknownSdk; import com.intellij.openapi.roots.ui.configuration.UnknownSdkDownloadableSdkFix; import com.intellij.openapi.roots.ui.configuration.UnknownSdkLocalSdkFix; import com.intellij.openapi.util.Key; -import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.EditorNotificationPanel; import com.intellij.ui.EditorNotifications; +import com.intellij.ui.HyperlinkLabel; import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -259,7 +259,13 @@ public class UnknownSdkEditorNotification { String intentionActionText = ProjectBundle.message("config.invalid.sdk.configure.missing", sdkTypeName, mySdkName); - String localText = localFix != null ? intentionActionText = ProjectBundle.message("config.unknown.sdk.local", StringUtil.trimMiddle(FileUtil.getLocationRelativeToUserHome(localFix.getExistingSdkHome()), 30)) : ""; + String localText = ""; + String localTextTooltip = ""; + if (localFix != null) { + localText = intentionActionText = ProjectBundle.message("config.unknown.sdk.local", sdkTypeName, localFix.getPresentableVersionString()); + localTextTooltip = SdkListPresenter.presentDetectedSdkPath(localFix.getExistingSdkHome(), 90, 40); + } + String downloadText = downloadFix != null ? intentionActionText = ProjectBundle.message("config.unknown.sdk.download", downloadFix.getDownloadDescription()) : ""; EditorNotificationPanel notification = newNotificationPanel(intentionActionText); @@ -268,9 +274,10 @@ public class UnknownSdkEditorNotification { notification.setText(notificationText); if (localFix != null) { - notification.createActionLabel(localText, () -> { + HyperlinkLabel actionLabel = notification.createActionLabel(localText, () -> { mySdk.applyLocalFix(project); }, true); + actionLabel.setToolTipText(localTextTooltip); } else if (downloadFix != null) { notification.createActionLabel(downloadText, () -> { diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/SdkListPresenter.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/SdkListPresenter.java index 8170cfbd7723..9de1a823d971 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/SdkListPresenter.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/SdkListPresenter.java @@ -225,11 +225,16 @@ public final class SdkListPresenter extends ColoredListCellRenderer @NotNull public static String presentDetectedSdkPath(@NotNull String home) { + return presentDetectedSdkPath(home, 50, 30); + } + + @NotNull + public static String presentDetectedSdkPath(@NotNull String home, int maxLength, int suffixLength) { //for macOS, let's try removing Bundle internals home = StringUtil.trimEnd(home, "/Contents/Home"); //NON-NLS home = StringUtil.trimEnd(home, "/Contents/MacOS"); //NON-NLS home = FileUtil.getLocationRelativeToUserHome(home); - home = StringUtil.shortenTextWithEllipsis(home, 50, 30); + home = StringUtil.shortenTextWithEllipsis(home, maxLength, suffixLength); return home; } } diff --git a/platform/platform-api/resources/messages/ProjectBundle.properties b/platform/platform-api/resources/messages/ProjectBundle.properties index 6af0cf806a8f..bfb4042d0c13 100644 --- a/platform/platform-api/resources/messages/ProjectBundle.properties +++ b/platform/platform-api/resources/messages/ProjectBundle.properties @@ -262,7 +262,7 @@ config.invalid.sdk.notification.text={0} "{1}" is broken or configured incorrect config.unknown.sdk.configure=Configure... config.invalid.sdk.configure=Configure... config.unknown.sdk.download=Download {0} -config.unknown.sdk.local=Use {0} +config.unknown.sdk.local=Use existing {0} {1} config.unknown.sdk.configure.missing=Configure missing {0} "{1}" config.invalid.sdk.configure.missing=Configure broken {0} "{1}" config.unknown.sdk.configuration=SDK configuration