diff --git a/idea/idea-new-project-wizard/resources/messages/KotlinNewProjectWizardUIBundle.properties b/idea/idea-new-project-wizard/resources/messages/KotlinNewProjectWizardUIBundle.properties index ffb4dea9a89..2ff2d710f16 100644 --- a/idea/idea-new-project-wizard/resources/messages/KotlinNewProjectWizardUIBundle.properties +++ b/idea/idea-new-project-wizard/resources/messages/KotlinNewProjectWizardUIBundle.properties @@ -33,4 +33,6 @@ module.settings.template.none=None version.provider.downloading.kotlin.version=Downloading Kotlin version module.settings.dependencies.empty=No module dependencies added. -module.settings.dependencies.empty.suggest.add=Add module dependency \ No newline at end of file +module.settings.dependencies.empty.suggest.add=Add module dependency + +project.opener.initialisation=Initialization ... \ No newline at end of file diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeWizard.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeWizard.kt index e1ed34a0d8a..fce65a86deb 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeWizard.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeWizard.kt @@ -50,7 +50,7 @@ class IdeWizard( var artifactId by setting(StructurePlugin::artifactId.reference) var buildSystemType by setting(BuildSystemPlugin::type.reference) - val projectTemplate by setting(ProjectTemplatesPlugin::template.reference) + var projectTemplate by setting(ProjectTemplatesPlugin::template.reference) private fun > setting(reference: SettingReference) = object : ReadWriteProperty { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt index 6690ac89a80..809b30bc496 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt @@ -2,6 +2,8 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard import com.intellij.ide.RecentProjectsManager import com.intellij.ide.actions.NewProjectAction +import com.intellij.ide.impl.NewProjectUtil +import com.intellij.ide.projectWizard.NewProjectWizard import com.intellij.ide.util.projectWizard.* import com.intellij.ide.wizard.AbstractWizard import com.intellij.openapi.Disposable @@ -22,21 +24,24 @@ import org.jetbrains.kotlin.idea.projectWizard.ProjectCreationStats import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats import org.jetbrains.kotlin.idea.projectWizard.WizardStatsService import org.jetbrains.kotlin.idea.util.application.runWriteAction -import org.jetbrains.kotlin.tools.projectWizard.core.* +import org.jetbrains.kotlin.tools.projectWizard.core.buildList +import org.jetbrains.kotlin.tools.projectWizard.core.div import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference +import org.jetbrains.kotlin.tools.projectWizard.core.isSuccess +import org.jetbrains.kotlin.tools.projectWizard.core.onFailure import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.Plugins import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType +import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate import org.jetbrains.kotlin.tools.projectWizard.wizard.service.IdeaJpsWizardService import org.jetbrains.kotlin.tools.projectWizard.wizard.service.IdeaServices import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.asHtml import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep.FirstWizardStepComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.runWithProgressBar import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.SecondStepWizardComponent -import org.jetbrains.kotlin.utils.addToStdlib.safeAs import java.io.File import javax.swing.JButton import javax.swing.JComponent @@ -143,8 +148,15 @@ class NewProjectWizardModuleBuilder : EmptyModuleBuilder() { } } + internal fun selectProjectTemplate(template: ProjectTemplate) { + wizard.buildSystemType = BuildSystemType.GradleKotlinDsl + wizard.projectTemplate = template + } + + private val firstStep = ModuleNewWizardFirstStep(wizard) + override fun getCustomOptionsStep(context: WizardContext?, parentDisposable: Disposable?) = - ModuleNewWizardFirstStep(wizard) + firstStep } abstract class WizardStep(protected val wizard: IdeWizard, private val phase: GenerationPhase) : ModuleWizardStep() { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewWizardOpener.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewWizardOpener.kt new file mode 100644 index 00000000000..78e36f84839 --- /dev/null +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewWizardOpener.kt @@ -0,0 +1,52 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.tools.projectWizard.wizard + +import com.intellij.ide.impl.NewProjectUtil +import com.intellij.ide.projectWizard.NewProjectWizard +import com.intellij.ide.projectWizard.ProjectTypeStep +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.progress.ProgressIndicator +import com.intellij.openapi.progress.ProgressManager +import com.intellij.openapi.progress.Task +import com.intellij.openapi.progress.impl.BackgroundableProcessIndicator +import com.intellij.openapi.project.ProjectManager +import com.intellij.openapi.roots.ui.configuration.ModulesProvider +import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate +import org.jetbrains.kotlin.utils.addToStdlib.safeAs + +object NewWizardOpener { + fun open(template: ProjectTemplate?) { + val task = object : Task.Backgroundable( + null, + KotlinNewProjectWizardUIBundle.message("project.opener.initialisation") + ) { + val wizard = NewProjectWizard(null, ModulesProvider.EMPTY_MODULES_PROVIDER, null) + + override fun run(indicator: ProgressIndicator) { + // warm-up components, stolen from com.intellij.ide.impl.NewProjectUtil.createNewProject + ProjectManager.getInstance().defaultProject + } + + override fun onFinished() = ApplicationManager.getApplication().invokeLater { + val step = wizard.currentStepObject as ProjectTypeStep + step.setSelectedTemplate(KotlinNewProjectWizardUIBundle.message("generator.title"), null) + if (template != null) { + wizard.projectBuilder + .safeAs() + ?.selectProjectTemplate(template) + } + if (wizard.showAndGet()) { + NewProjectUtil.createFromWizard(wizard, null) + } + } + } + ProgressManager.getInstance().runProcessWithProgressAsynchronously( + task, + BackgroundableProcessIndicator(task) + ) + } +} \ No newline at end of file diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/OpenNewProjectWizardProtocolCommand.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/OpenNewProjectWizardProtocolCommand.kt new file mode 100644 index 00000000000..2bf6b42a145 --- /dev/null +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/OpenNewProjectWizardProtocolCommand.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.tools.projectWizard.wizard + +import com.intellij.openapi.application.JBProtocolCommand +import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate + +class OpenNewProjectWizardProtocolCommand : JBProtocolCommand(COMMAND_NAME) { + override fun perform(target: String?, parameters: Map) { + when (target) { + NEW_PROJECT_TARGET -> showCreateNewProjectWizard(parameters) + } + } + + private fun showCreateNewProjectWizard(parameters: Map) { + val template = parameters[NEW_PROJECT_TARGET_TEMPLATE_PARAMETER] + ?.let(ProjectTemplate.Companion::byId) + + NewWizardOpener.open(template) + } + + companion object { + private const val COMMAND_NAME = "kotlin-wizard" + private const val NEW_PROJECT_TARGET = "create-project" + private const val NEW_PROJECT_TARGET_TEMPLATE_PARAMETER = "template" + } +} \ No newline at end of file diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt index ecdc245fe5b..fdd6c50790b 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt @@ -55,7 +55,10 @@ class ProjectTemplateSettingComponent( super.onValueUpdated(reference) if (reference == ProjectTemplatesPlugin::template.reference) { applySelectedTemplate() - value?.let(templateDescriptionComponent::setTemplate) + value?.let { template -> + list.setSelectedValue(template, true) + templateDescriptionComponent.setTemplate(template) + } } } diff --git a/idea/resources/META-INF/extensions/ide.xml b/idea/resources/META-INF/extensions/ide.xml index 3847a4aefc1..3c4b04f4250 100644 --- a/idea/resources/META-INF/extensions/ide.xml +++ b/idea/resources/META-INF/extensions/ide.xml @@ -150,5 +150,6 @@ +