mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[npw] Use the new JDK combo for generators
#IDEA-343968 Fixed GitOrigin-RevId: eaf4cd1b94775054277d9b5d3e06519e2f73dfb5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5c785be0e7
commit
14772a4268
@@ -6,7 +6,6 @@ import com.intellij.icons.AllIcons
|
||||
import com.intellij.ide.JavaUiBundle
|
||||
import com.intellij.ide.projectWizard.ProjectWizardJdkIntent.*
|
||||
import com.intellij.ide.util.PropertiesComponent
|
||||
import com.intellij.ide.wizard.NewProjectWizardBaseData
|
||||
import com.intellij.ide.wizard.NewProjectWizardBaseData.Companion.baseData
|
||||
import com.intellij.ide.wizard.NewProjectWizardBaseStep
|
||||
import com.intellij.ide.wizard.NewProjectWizardStep
|
||||
@@ -81,15 +80,36 @@ sealed class ProjectWizardJdkIntent {
|
||||
fun NewProjectWizardStep.projectWizardJdkComboBox(
|
||||
row: Row,
|
||||
sdkProperty: GraphProperty<Sdk?>,
|
||||
sdkDownloadTaskProperty: GraphProperty<SdkDownloadTask?>
|
||||
sdkDownloadTaskProperty: GraphProperty<SdkDownloadTask?>,
|
||||
): Cell<ProjectWizardJdkComboBox> {
|
||||
return projectWizardJdkComboBox(
|
||||
row, sdkProperty, sdkDownloadTaskProperty,
|
||||
{
|
||||
requireNotNull(baseData) {
|
||||
"Expected ${NewProjectWizardBaseStep::class.java.simpleName} in the new project wizard step tree."
|
||||
}.path
|
||||
},
|
||||
{ sdk -> context.projectJdk = sdk },
|
||||
context.disposable,
|
||||
context.projectJdk,
|
||||
)
|
||||
}
|
||||
|
||||
fun projectWizardJdkComboBox(
|
||||
row: Row,
|
||||
sdkProperty: GraphProperty<Sdk?>,
|
||||
sdkDownloadTaskProperty: GraphProperty<SdkDownloadTask?>,
|
||||
projectLocation: () -> String,
|
||||
setProjectJdk: (Sdk?) -> Unit,
|
||||
disposable: Disposable,
|
||||
projectJdk: Sdk? = null,
|
||||
sdkFilter: (Sdk) -> Boolean = { true },
|
||||
): Cell<ProjectWizardJdkComboBox> {
|
||||
val baseData = requireNotNull(baseData) {
|
||||
"Expected ${NewProjectWizardBaseStep::class.java.simpleName} in the new project wizard step tree."
|
||||
}
|
||||
val sdkPropertyId = StdModuleTypes.JAVA
|
||||
val selectedJdkProperty = "jdk.selected.${sdkPropertyId.id}"
|
||||
|
||||
val combo = ProjectWizardJdkComboBox(context.projectJdk, context.disposable)
|
||||
val combo = ProjectWizardJdkComboBox(projectJdk, disposable)
|
||||
combo.filterItems { sdkFilter(it) }
|
||||
|
||||
return row.cell(combo)
|
||||
.columns(COLUMNS_LARGE)
|
||||
@@ -103,7 +123,7 @@ fun NewProjectWizardStep.projectWizardJdkComboBox(
|
||||
val intent = it.selectedItem
|
||||
|
||||
if (isWindows) {
|
||||
val wslJDKValidation = validateJdkAndProjectCompatibility(intent, baseData)
|
||||
val wslJDKValidation = validateJdkAndProjectCompatibility(intent, projectLocation)
|
||||
if (wslJDKValidation != null) return@validationOnApply wslJDKValidation
|
||||
}
|
||||
|
||||
@@ -123,7 +143,7 @@ fun NewProjectWizardStep.projectWizardJdkComboBox(
|
||||
registerJdk(selected.home, combo)
|
||||
}
|
||||
|
||||
context.projectJdk = sdkProperty.get()
|
||||
setProjectJdk.invoke(sdkProperty.get())
|
||||
|
||||
when (selected) {
|
||||
is NoJdk -> JdkComboBoxCollector.noJdkSelected()
|
||||
@@ -152,7 +172,7 @@ private fun ValidationInfoBuilder.validateInstallDir(intent: DownloadJdk): Valid
|
||||
}
|
||||
}
|
||||
|
||||
private fun ValidationInfoBuilder.validateJdkAndProjectCompatibility(intent: Any?, baseData: NewProjectWizardBaseData): ValidationInfo? {
|
||||
private fun ValidationInfoBuilder.validateJdkAndProjectCompatibility(intent: Any?, location: () -> String): ValidationInfo? {
|
||||
val path = when (intent) {
|
||||
is DownloadJdk -> intent.task.plannedHomeDir
|
||||
is ExistingJdk -> intent.jdk.homePath
|
||||
@@ -160,7 +180,7 @@ private fun ValidationInfoBuilder.validateJdkAndProjectCompatibility(intent: Any
|
||||
else -> null
|
||||
}
|
||||
|
||||
val isProjectWSL = WslPath.isWslUncPath(baseData.path)
|
||||
val isProjectWSL = WslPath.isWslUncPath(location.invoke())
|
||||
|
||||
if (path != null && WslPath.isWslUncPath(path) != isProjectWSL) {
|
||||
return when (isProjectWSL) {
|
||||
@@ -408,6 +428,16 @@ class ProjectWizardJdkComboBox(
|
||||
super.setSelectedItem(toSelect)
|
||||
}
|
||||
|
||||
fun filterItems(sdkFilter: (Sdk) -> Boolean) {
|
||||
registered.removeAll { !sdkFilter(it.jdk) }
|
||||
for (i in itemCount - 1 downTo 0) {
|
||||
val item = getItemAt(i)
|
||||
if (item is ExistingJdk && !sdkFilter(item.jdk)) {
|
||||
removeItemAt(i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val lastRegisteredJdkIndex
|
||||
get() = (0 until itemCount).firstOrNull { getItemAt(it) is AddJdkFromJdkListDownloader } ?: 0
|
||||
|
||||
|
||||
@@ -4,25 +4,31 @@ package com.intellij.ide.starters.shared
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.ide.IdeBundle
|
||||
import com.intellij.ide.JavaUiBundle
|
||||
import com.intellij.ide.projectWizard.generators.JdkDownloadService
|
||||
import com.intellij.ide.projectWizard.projectWizardJdkComboBox
|
||||
import com.intellij.ide.starters.JavaStartersBundle
|
||||
import com.intellij.ide.starters.local.StarterModuleBuilder
|
||||
import com.intellij.ide.starters.shared.ValidationFunctions.*
|
||||
import com.intellij.ide.util.installNameGenerators
|
||||
import com.intellij.ide.util.projectWizard.ModuleBuilder
|
||||
import com.intellij.ide.util.projectWizard.ModuleBuilderListener
|
||||
import com.intellij.ide.util.projectWizard.ModuleWizardStep
|
||||
import com.intellij.ide.util.projectWizard.WizardContext
|
||||
import com.intellij.ide.wizard.NewProjectWizardStep.Companion.GIT_PROPERTY_NAME
|
||||
import com.intellij.ide.wizard.NewProjectWizardStep.Companion.GROUP_ID_PROPERTY_NAME
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
|
||||
import com.intellij.openapi.module.StdModuleTypes
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.observable.properties.GraphProperty
|
||||
import com.intellij.openapi.observable.properties.PropertyGraph
|
||||
import com.intellij.openapi.observable.util.*
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
||||
import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.openapi.roots.ui.configuration.JdkComboBox
|
||||
import com.intellij.openapi.roots.ui.configuration.sdkComboBox
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.SdkDownloadTask
|
||||
import com.intellij.openapi.ui.BrowseFolderDescriptor.Companion.withPathToTextConvertor
|
||||
import com.intellij.openapi.ui.BrowseFolderDescriptor.Companion.withTextToPathConvertor
|
||||
import com.intellij.openapi.ui.TextFieldWithBrowseButton
|
||||
@@ -57,6 +63,7 @@ abstract class CommonStarterInitialStep(
|
||||
|
||||
protected val artifactIdProperty: GraphProperty<String> = propertyGraph.lazyProperty { entityName }
|
||||
protected val sdkProperty: GraphProperty<Sdk?> = propertyGraph.lazyProperty { null }
|
||||
protected val sdkDownloadTaskProperty: GraphProperty<SdkDownloadTask?> = propertyGraph.lazyProperty { null }
|
||||
|
||||
protected val languageProperty: GraphProperty<StarterLanguage> = propertyGraph.lazyProperty { starterContext.language }
|
||||
protected val projectTypeProperty: GraphProperty<StarterProjectType> = propertyGraph.lazyProperty {
|
||||
@@ -134,9 +141,28 @@ abstract class CommonStarterInitialStep(
|
||||
|
||||
protected fun Panel.addSdkUi() {
|
||||
row(JavaUiBundle.message("label.project.wizard.new.project.jdk")) {
|
||||
sdkComboBox = sdkComboBox(wizardContext, sdkProperty, StdModuleTypes.JAVA.id, moduleBuilder::isSuitableSdkType)
|
||||
.columns(COLUMNS_MEDIUM)
|
||||
.component
|
||||
projectWizardJdkComboBox(
|
||||
this, sdkProperty, sdkDownloadTaskProperty,
|
||||
{ location },
|
||||
{ sdk -> wizardContext.projectJdk = sdk },
|
||||
wizardContext.disposable,
|
||||
wizardContext.projectJdk,
|
||||
{ sdk -> moduleBuilder.isSuitableSdkType(sdk.sdkType) }
|
||||
)
|
||||
|
||||
moduleBuilder.addListener(object : ModuleBuilderListener {
|
||||
override fun moduleCreated(module: Module) {
|
||||
val downloadTask = sdkDownloadTaskProperty.get() ?: return
|
||||
val downloadService = module.project.service<JdkDownloadService>()
|
||||
val jdk = downloadService.setupInstallableSdk(downloadTask)
|
||||
if (wizardContext.isCreatingNewProject) {
|
||||
ProjectRootManager.getInstance(module.project).projectSdk = jdk
|
||||
} else {
|
||||
ModuleRootModificationUtil.setModuleSdk(module, jdk)
|
||||
}
|
||||
downloadService.downloadSdk(jdk)
|
||||
}
|
||||
})
|
||||
}.bottomGap(BottomGap.SMALL)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user