From 0b6148a3e7e7477a1fec80247c1d7444aab05865 Mon Sep 17 00:00:00 2001 From: "Alexander.Glukhov" Date: Tue, 9 Sep 2025 11:16:14 +0200 Subject: [PATCH] [new project wizard][IDEA-378105] added an explicit assertation for the JDK intent GitOrigin-RevId: 521e8d48297264856ba11ea3d68bc7de82f5181f --- .../projectWizard/ProjectWizardJdkComboBox.kt | 26 +++++++++++++++---- .../shared/CommonStarterInitialStep.kt | 3 ++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectWizardJdkComboBox.kt b/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectWizardJdkComboBox.kt index 809ffd814d2a..699fc2127650 100644 --- a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectWizardJdkComboBox.kt +++ b/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectWizardJdkComboBox.kt @@ -19,6 +19,7 @@ import com.intellij.openapi.application.asContextElement import com.intellij.openapi.components.Service import com.intellij.openapi.components.service import com.intellij.openapi.observable.properties.GraphProperty +import com.intellij.openapi.observable.properties.ObservableMutableProperty import com.intellij.openapi.observable.properties.ObservableProperty import com.intellij.openapi.observable.util.bind import com.intellij.openapi.observable.util.transform @@ -88,7 +89,7 @@ fun NewProjectWizardStep.projectWizardJdkComboBox( row, requireNotNull(baseData) { "Expected ${NewProjectWizardBaseStep::class.java.simpleName} in the new project wizard step tree." - }.pathProperty, + }.pathProperty.toEelDescriptorProperty(), intentProperty, context.disposable, context.projectJdk, @@ -107,15 +108,26 @@ fun NewProjectWizardStep.projectWizardJdkComboBox( */ fun projectWizardJdkComboBox( row: Row, - locationProperty: GraphProperty, - intentProperty: GraphProperty, + eelDescriptorProperty: ObservableProperty, + intentProperty: ObservableMutableProperty, disposable: Disposable, projectJdk: Sdk? = null, sdkFilter: (Sdk) -> Boolean = { true }, jdkPredicate: ProjectWizardJdkPredicate? = ProjectWizardJdkPredicate.IsJdkSupported(), ): Cell { - val eelDescriptorProperty = locationProperty.transform { Path.of(it).getEelDescriptor() } - return row.cell(ProjectWizardJdkComboBox(projectJdk, disposable, sdkFilter)) + val comboBox = ProjectWizardJdkComboBox(projectJdk, disposable, sdkFilter) + + val intentValue = intentProperty.get() + require(intentValue == NoJdk) { + """ + The default value of intentProperty is controlled by ${ProjectWizardJdkComboBox::class.java.simpleName}. + All external default values of intentProperty will be ignored. + External default value = '$intentValue', expected value = '$NoJdk'. + """.trimIndent() + } + intentProperty.set(comboBox.item) + + return row.cell(comboBox) .columns(COLUMNS_LARGE) .apply { val commentCell = comment(component.comment, 50) @@ -633,3 +645,7 @@ internal fun ProjectWizardJdkComboBox.bindEelDescriptor(eelDescriptorProperty: O refreshJdks(eelDescriptor) } } + +internal fun ObservableProperty.toEelDescriptorProperty(): ObservableProperty { + return transform { Path.of(it).getEelDescriptor() } +} \ No newline at end of file diff --git a/java/idea-ui/src/com/intellij/ide/starters/shared/CommonStarterInitialStep.kt b/java/idea-ui/src/com/intellij/ide/starters/shared/CommonStarterInitialStep.kt index b3329c3dada5..1e7493a92bfa 100644 --- a/java/idea-ui/src/com/intellij/ide/starters/shared/CommonStarterInitialStep.kt +++ b/java/idea-ui/src/com/intellij/ide/starters/shared/CommonStarterInitialStep.kt @@ -7,6 +7,7 @@ import com.intellij.ide.JavaUiBundle import com.intellij.ide.projectWizard.ProjectWizardJdkIntent import com.intellij.ide.projectWizard.generators.JdkDownloadService import com.intellij.ide.projectWizard.projectWizardJdkComboBox +import com.intellij.ide.projectWizard.toEelDescriptorProperty import com.intellij.ide.starters.JavaStartersBundle import com.intellij.ide.starters.local.StarterModuleBuilder import com.intellij.ide.starters.shared.ValidationFunctions.* @@ -145,7 +146,7 @@ abstract class CommonStarterInitialStep( row(JavaUiBundle.message("label.project.wizard.new.project.jdk")) { projectWizardJdkComboBox( this, - locationProperty, + locationProperty.toEelDescriptorProperty(), jdkIntentProperty, wizardContext.disposable, wizardContext.projectJdk,