IDEA-335458 Fix race condition while preparing onboarding tips

Now prepareOnboardingTips activities set a sign to install onboarding tips on the first opened editor. So it may be (and should) executed before any files will be generated and opened by project wizard.

Also wanted to rename prepareTipsInEditor to prepareOnboardingTips (because installing to the editor will be later by the fact), but cannot do it because of API break.

GitOrigin-RevId: 1fdff5f9d99cffebb2a525f82374763be86ef4fb
This commit is contained in:
Alexey Merkulov
2023-10-26 18:57:35 +02:00
committed by intellij-monorepo-bot
parent d9a711a0ab
commit a6bc09c788
8 changed files with 28 additions and 18 deletions

View File

@@ -10,6 +10,7 @@ import com.intellij.openapi.keymap.KeymapTextContext
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.SystemInfo
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
import java.util.*
@ApiStatus.Experimental
@@ -61,8 +62,12 @@ abstract class AssetsJavaNewProjectWizardStep(parent: NewProjectWizardStep) : As
addFilesToOpen(sourcePath)
}
fun prepareTipsInEditor(project: Project) {
prepareTipsInEditor(project, "SampleCode") { charSequence ->
@ScheduledForRemoval
@Deprecated("Use prepareOnboardingTips and it should be called before wizard project setup")
fun prepareTipsInEditor(project: Project) { }
fun prepareOnboardingTips(project: Project) {
prepareOnboardingTips(project, "SampleCode") { charSequence ->
charSequence.indexOf("System.out.println").takeIf { it >= 0 }
}
}

View File

@@ -18,7 +18,7 @@ abstract class AssetsOnboardingTipsProjectWizardStep(parent: NewProjectWizardSte
protected fun shouldRenderOnboardingTips(): Boolean = Registry.`is`("doc.onboarding.tips.render")
protected fun prepareTipsInEditor(project: Project, templateWithoutTips: String, breakpointSelector: (CharSequence) -> Int?) = whenProjectCreated(project) {
protected fun prepareOnboardingTips(project: Project, templateWithoutTips: String, breakpointSelector: (CharSequence) -> Int?) = whenProjectCreated(project) {
val templateManager = FileTemplateManager.getDefaultInstance()
val properties = getTemplateProperties()
val defaultProperties = templateManager.defaultProperties

View File

@@ -85,10 +85,10 @@ class IntelliJJavaNewProjectWizard : BuildSystemJavaNewProjectWizard {
}
override fun setupProject(project: Project) {
super.setupProject(project)
if (parent.generateOnboardingTips) {
prepareTipsInEditor(project)
prepareOnboardingTips(project)
}
super.setupProject(project)
}
}
}

View File

@@ -4,16 +4,21 @@ package org.jetbrains.plugins.gradle.service.project.wizard
import com.intellij.ide.projectWizard.NewProjectWizardCollector.Base.logAddSampleCodeChanged
import com.intellij.ide.projectWizard.NewProjectWizardCollector.Base.logAddSampleOnboardingTipsChangedEvent
import com.intellij.ide.projectWizard.NewProjectWizardConstants.BuildSystem.GRADLE
import com.intellij.ide.projectWizard.generators.*
import com.intellij.ide.projectWizard.generators.AssetsJavaNewProjectWizardStep
import com.intellij.ide.projectWizard.generators.AssetsJavaNewProjectWizardStep.Companion.proposeToGenerateOnboardingTipsByDefault
import com.intellij.ide.projectWizard.generators.BuildSystemJavaNewProjectWizard
import com.intellij.ide.projectWizard.generators.BuildSystemJavaNewProjectWizardData
import com.intellij.ide.projectWizard.generators.JavaNewProjectWizard
import com.intellij.ide.starters.local.StandardAssetsProvider
import com.intellij.ide.wizard.NewProjectWizardChainStep.Companion.nextStep
import com.intellij.ide.wizard.NewProjectWizardStep
import com.intellij.ide.wizard.NewProjectWizardStep.Companion.ADD_SAMPLE_CODE_PROPERTY_NAME
import com.intellij.ide.wizard.NewProjectWizardChainStep.Companion.nextStep
import com.intellij.openapi.observable.util.bindBooleanStorage
import com.intellij.openapi.project.Project
import com.intellij.ui.UIBundle
import com.intellij.ui.dsl.builder.*
import com.intellij.ui.dsl.builder.Panel
import com.intellij.ui.dsl.builder.bindSelected
import com.intellij.ui.dsl.builder.whenStateChangedFromUi
internal class GradleJavaNewProjectWizard : BuildSystemJavaNewProjectWizard {
@@ -96,10 +101,10 @@ internal class GradleJavaNewProjectWizard : BuildSystemJavaNewProjectWizard {
}
override fun setupProject(project: Project) {
super.setupProject(project)
if (parent.generateOnboardingTips) {
prepareTipsInEditor(project)
prepareOnboardingTips(project)
}
super.setupProject(project)
}
}
}

View File

@@ -59,8 +59,8 @@ abstract class AssetsKotlinNewProjectWizardStep(parent: NewProjectWizardStep) :
addFilesToOpen(sourcePath)
}
fun prepareTipsInEditor(project: Project) {
prepareTipsInEditor(project, "KotlinSampleCode") { charsSequence ->
fun prepareOnboardingTips(project: Project) {
prepareOnboardingTips(project, "KotlinSampleCode") { charsSequence ->
charsSequence.indexOf("println(\"i").takeIf { it >= 0 }
}
}

View File

@@ -288,10 +288,10 @@ internal class GradleKotlinNewProjectWizard : BuildSystemKotlinNewProjectWizard
}
override fun setupProject(project: Project) {
super.setupProject(project)
if (shouldAddOnboardingTips()) {
prepareTipsInEditor(project)
prepareOnboardingTips(project)
}
super.setupProject(project)
}
}
}

View File

@@ -91,10 +91,10 @@ internal class IntelliJKotlinNewProjectWizard : BuildSystemKotlinNewProjectWizar
}
override fun setupProject(project: Project) {
super.setupProject(project)
if (shouldAddOnboardingTips()) {
prepareTipsInEditor(project)
prepareOnboardingTips(project)
}
super.setupProject(project)
}
}
}

View File

@@ -94,10 +94,10 @@ class MavenJavaNewProjectWizard : BuildSystemJavaNewProjectWizard {
}
override fun setupProject(project: Project) {
super.setupProject(project)
if (parent.generateOnboardingTips) {
prepareTipsInEditor(project)
prepareOnboardingTips(project)
}
super.setupProject(project)
}
}
}