diff --git a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkDownloaderLogger.kt b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkDownloaderLogger.kt index 43a3e9d829c3..24148d7dab5e 100644 --- a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkDownloaderLogger.kt +++ b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkDownloaderLogger.kt @@ -11,9 +11,7 @@ import org.jetbrains.jps.model.java.JdkVersionDetector internal object JdkDownloaderLogger : CounterUsagesCollector() { override fun getGroup(): EventLogGroup = GROUP - private val GROUP: EventLogGroup = EventLogGroup("jdk.downloader", 5) - - private val DOWNLOAD: EventId1 = GROUP.registerEvent("download", EventFields.Boolean("success")) + private val GROUP: EventLogGroup = EventLogGroup("jdk.downloader", 6) private val DETECTED_SDK: EventId2 = GROUP.registerEvent("detected", EventFields.String("product", JdkVersionDetector.VENDORS), @@ -30,17 +28,12 @@ internal object JdkDownloaderLogger : CounterUsagesCollector() { WrongProtocol, WSLIssue, FileDoesNotExist, RuntimeException, IncorrectFileSize, ChecksumMismatch, ExtractionFailed, Cancelled, } - fun logDownload(success: Boolean) { - DOWNLOAD.log(success) - } + @Deprecated(message = "Use logDownload(JdkItem) instead") + fun logDownload(success: Boolean) {} - fun logDownload(success: Boolean, item: JdkItem) { - DOWNLOAD.log(success) - - if (success) { - val variant = item.detectVariant() - DOWNLOADED_SDK.log(variant.displayName, item.jdkMajorVersion) - } + fun logDownload(item: JdkItem) { + val variant = item.detectVariant() + DOWNLOADED_SDK.log(variant.displayName, item.jdkMajorVersion) } fun logFailed(failure: DownloadFailure) { diff --git a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkInstaller.kt b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkInstaller.kt index 9b8c49f52b6a..d09153093da6 100644 --- a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkInstaller.kt +++ b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/jdkDownloader/JdkInstaller.kt @@ -233,14 +233,17 @@ abstract class JdkInstallerBase { val targetDir = request.installDir val url = Urls.parse(item.url, false) ?: error("Cannot parse download URL: ${item.url}") + var logFailed = false if (!url.scheme.equals("https", ignoreCase = true)) { JdkDownloaderLogger.logFailed(JdkDownloaderLogger.DownloadFailure.WrongProtocol) + logFailed = true error("URL must use https:// protocol, but was: $url") } val wslDistribution = wslDistributionFromPath(targetDir) if (wslDistribution != null && item.os != "linux") { JdkDownloaderLogger.logFailed(JdkDownloaderLogger.DownloadFailure.WSLIssue) + logFailed = true error("Cannot install non-linux JDK into WSL environment to $targetDir from $item") } @@ -254,18 +257,21 @@ abstract class JdkInstallerBase { if (!downloadFile.isRegularFile()) { JdkDownloaderLogger.logFailed(JdkDownloaderLogger.DownloadFailure.FileDoesNotExist) + logFailed = true throw RuntimeException("Downloaded file does not exist: $downloadFile") } } catch (t: Throwable) { if (t is ControlFlowException) throw t JdkDownloaderLogger.logFailed(JdkDownloaderLogger.DownloadFailure.RuntimeException) + logFailed = true throw RuntimeException("Failed to download ${item.fullPresentationText} from $url. ${t.message}", t) } val sizeDiff = runCatching { Files.size(downloadFile) - item.archiveSize }.getOrNull() if (sizeDiff != 0L) { JdkDownloaderLogger.logFailed(JdkDownloaderLogger.DownloadFailure.IncorrectFileSize) + logFailed = true throw RuntimeException("The downloaded ${item.fullPresentationText} has incorrect file size,\n" + "the difference is ${sizeDiff?.absoluteValue ?: "unknown" } bytes.\n" + "Check your internet connection and try again later") @@ -298,18 +304,18 @@ abstract class JdkInstallerBase { } runCatching { writeMarkerFile(request) } - JdkDownloaderLogger.logDownload(true, item) + JdkDownloaderLogger.logDownload(item) } catch (t: Throwable) { if (t is ControlFlowException) throw t JdkDownloaderLogger.logFailed(JdkDownloaderLogger.DownloadFailure.ExtractionFailed) + logFailed = true throw RuntimeException("Failed to extract ${item.fullPresentationText}. ${t.message}", t) } } catch (t: Throwable) { - //if we were cancelled in the middle or failed, let's clean up - JdkDownloaderLogger.logDownload(false) - JdkDownloaderLogger.logFailed(JdkDownloaderLogger.DownloadFailure.Cancelled) + // Cleanup + if (!logFailed) JdkDownloaderLogger.logFailed(JdkDownloaderLogger.DownloadFailure.Cancelled) targetDir.delete() markerFile(targetDir)?.delete() throw t