[new project wizard][IDEA-378105] added an explicit assertation for the JDK intent

GitOrigin-RevId: 521e8d48297264856ba11ea3d68bc7de82f5181f
This commit is contained in:
Alexander.Glukhov
2025-09-09 12:04:47 +00:00
committed by intellij-monorepo-bot
parent 1852622451
commit 0b6148a3e7
2 changed files with 23 additions and 6 deletions
@@ -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<String>,
intentProperty: GraphProperty<ProjectWizardJdkIntent>,
eelDescriptorProperty: ObservableProperty<EelDescriptor>,
intentProperty: ObservableMutableProperty<ProjectWizardJdkIntent>,
disposable: Disposable,
projectJdk: Sdk? = null,
sdkFilter: (Sdk) -> Boolean = { true },
jdkPredicate: ProjectWizardJdkPredicate? = ProjectWizardJdkPredicate.IsJdkSupported(),
): Cell<ProjectWizardJdkComboBox> {
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<String>.toEelDescriptorProperty(): ObservableProperty<EelDescriptor> {
return transform { Path.of(it).getEelDescriptor() }
}
@@ -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,