From 5b5d4f5d6a29930915b7ff5d7f14d5b0be8d4c38 Mon Sep 17 00:00:00 2001 From: Andrew Kozlov Date: Mon, 6 Apr 2026 20:31:04 +0200 Subject: [PATCH 1/3] ALT-10993 version propagated --- gradle-261.properties | 10 +++++----- gradle.properties | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gradle-261.properties b/gradle-261.properties index b8bc32bc1..72ce70cf5 100644 --- a/gradle-261.properties +++ b/gradle-261.properties @@ -4,8 +4,8 @@ customUntilBuild=261.* # Existent IDE versions can be found in the following repos: # https://www.jetbrains.com/intellij-repository/releases/ # https://www.jetbrains.com/intellij-repository/snapshots/ -#261.22158.234 -ideaVersion=IU-261.22158-EAP-CANDIDATE-SNAPSHOT -clionVersion=CL-261.22158-EAP-CANDIDATE-SNAPSHOT -pycharmVersion=PC-261.22158-EAP-CANDIDATE-SNAPSHOT -riderVersion=RD-2026.1-RC1-SNAPSHOT +#261.22158.* +ideaVersion=IU-2026.1 +clionVersion=CL-2026.1 +pycharmVersion=PC-2026.1 +riderVersion=RD-2026.1 diff --git a/gradle.properties b/gradle.properties index b78e3ccc5..efac4229d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ # supported values: 252, 253, 261 environmentName=261 -pluginVersion=2026.9 +pluginVersion=2026.10 # type of IDE (IDEA, CLion, etc.) used to build/test running # for more details see `Different IDEs` section in `PlatformVersions.md` From 77b7db7bd856498642daec8be517d699c949239a Mon Sep 17 00:00:00 2001 From: Andrew Kozlov Date: Tue, 7 Apr 2026 01:27:38 +0200 Subject: [PATCH 2/3] ALT-11006 property cleanup --- .../hs-jvm-core/resources/messages/EduJVMBundle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/intellij-plugin/hs-jvm-core/resources/messages/EduJVMBundle.properties b/intellij-plugin/hs-jvm-core/resources/messages/EduJVMBundle.properties index edf17df03..da2d7ed55 100644 --- a/intellij-plugin/hs-jvm-core/resources/messages/EduJVMBundle.properties +++ b/intellij-plugin/hs-jvm-core/resources/messages/EduJVMBundle.properties @@ -1,8 +1,8 @@ # Errors error.no.jdk=JDK is not selected. In the settings section, choose or download some JDK error.no.jdk.need.at.least=JDK is not selected. In the settings section, choose or download some JDK with a version at least {0} -error.no.jdk.available=No JDK found on your system. Please configure JDK in IDE settings -error.jdk.loading.failed=Failed to load JDK list. Please check your IDE settings or configure JDK manually +error.no.jdk.available=No JDK found on your system. Please configure JDK in IDE settings +error.jdk.loading.failed=Failed to load JDK list. Please check your IDE settings or configure JDK manually error.no.main=Unable to execute task `{0}`, main method is missing # Ex.: Gradle project isn't imported. Reload Gradle project. For more information, see the Troubleshooting guide error.gradle.not.imported=Gradle project isn''t imported. Reload Gradle project. For more information, see the Troubleshooting guide From 651bd9d3a9487da39e6ff469fb84e50db5076c6e Mon Sep 17 00:00:00 2001 From: Andrew Kozlov Date: Tue, 7 Apr 2026 01:44:07 +0200 Subject: [PATCH 3/3] ALT-11006 JDK combobox should be enabled all the time --- .../academy/jvm/JdkLanguageSettings.kt | 81 ++++++++++--------- 1 file changed, 44 insertions(+), 37 deletions(-) diff --git a/intellij-plugin/hs-jvm-core/src/org/hyperskill/academy/jvm/JdkLanguageSettings.kt b/intellij-plugin/hs-jvm-core/src/org/hyperskill/academy/jvm/JdkLanguageSettings.kt index efcdaad00..37c0fb043 100644 --- a/intellij-plugin/hs-jvm-core/src/org/hyperskill/academy/jvm/JdkLanguageSettings.kt +++ b/intellij-plugin/hs-jvm-core/src/org/hyperskill/academy/jvm/JdkLanguageSettings.kt @@ -32,6 +32,7 @@ private val LOG = logger() open class JdkLanguageSettings : LanguageSettings() { + @Volatile protected var jdk: Sdk? = null protected val sdkModel: ProjectSdksModel = createSdkModel() @@ -145,52 +146,58 @@ open class JdkLanguageSettings : LanguageSettings() { jdkComboBox.isEnabled = false runInBackground(course.project, EduJVMBundle.message("progress.setting.suitable.jdk"), false) { - // Reset SDK model off-EDT to avoid IllegalStateException from synchronous progress on EDT try { - val project = course.project - if (project != null) { - sdksModel.reset(project) + // Reset SDK model off-EDT to avoid IllegalStateException from synchronous progress on EDT + try { + val project = course.project + if (project != null) { + sdksModel.reset(project) + } + } + catch (e: Throwable) { + loadingState = JdkLoadingState.FAILED + // best-effort; if reset fails we'll try with whatever the model currently has + loadingError = e.message } - } - catch (e: Throwable) { - loadingState = JdkLoadingState.FAILED - // best-effort; if reset fails we'll try with whatever the model currently has - loadingError = e.message - } - - // Add bundled JDK if needed (must be done off-EDT as addSdk requires write action) - try { - addBundledJdkIfNeeded(sdksModel) - } - catch (_: Throwable) { - // best-effort; ignore failures - } - // If sdkModel is empty, try to get JDKs directly from ProjectJdkTable - val suitableJdk = findSuitableJdk(minJvmSdkVersion(course), sdksModel) - ?: findSuitableJdkFromTable(minJvmSdkVersion(course)) + // Add bundled JDK if needed (must be done off-EDT as addSdk requires write action) + try { + addBundledJdkIfNeeded(sdksModel) + } + catch (_: Throwable) { + // best-effort; ignore failures + } - // Check if we found any JDK at all (either suitable or any) - val anyJdkAvailable = sdksModel.sdks.any { it.sdkType == JavaSdk.getInstance() } - || ProjectJdkTable.getInstance().getSdksOfType(JavaSdk.getInstance()).isNotEmpty() + // If sdkModel is empty, try to get JDKs directly from ProjectJdkTable + jdk = findSuitableJdk(minJvmSdkVersion(course), sdksModel) + ?: findSuitableJdkFromTable(minJvmSdkVersion(course)) - loadingState = if (anyJdkAvailable) JdkLoadingState.LOADED - else JdkLoadingState.FAILED + // Check if we found any JDK at all (either suitable or any) + if (sdksModel.sdks.all { it.sdkType != JavaSdk.getInstance() } + && ProjectJdkTable.getInstance().getSdksOfType(JavaSdk.getInstance()).isEmpty()) { + throw RuntimeException(EduJVMBundle.message("error.no.jdk.available")) + } - loadingError = if (anyJdkAvailable) null - else EduJVMBundle.message("error.no.jdk.available") + loadingState = JdkLoadingState.LOADED + loadingError = null - runInBackground(course.project, EduJVMBundle.message("progress.warming.suitable.jdk"), false) { - // Pre-warm SDK validation and VFS lookups off the EDT to avoid slow operations during UI rendering - prewarmSdkValidation(suitableJdk) + runInBackground(course.project, EduJVMBundle.message("progress.warming.suitable.jdk"), false) { + // Pre-warm SDK validation and VFS lookups off the EDT to avoid slow operations during UI rendering + prewarmSdkValidation(jdk) + } } + catch (e: Throwable) { + LOG.warn("Failed to preselect JDK", e) + loadingState = JdkLoadingState.FAILED + loadingError = e.message + } + finally { + invokeLater(ModalityState.any()) { + jdkComboBox.isEnabled = true + jdkComboBox.selectedJdk = jdk - invokeLater(ModalityState.any()) { - jdkComboBox.isEnabled = true - jdkComboBox.selectedJdk = suitableJdk - jdk = suitableJdk - - notifyListeners() + notifyListeners() + } } } }