From a6bc09c788cd096c39a97f32aa1ab1a8d711eff2 Mon Sep 17 00:00:00 2001 From: Alexey Merkulov Date: Thu, 26 Oct 2023 18:57:35 +0200 Subject: [PATCH] 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 --- .../generators/AssetsJavaNewProjectWizardStep.kt | 9 +++++++-- .../AssetsOnboardingTipsProjectWizardStep.kt | 2 +- .../generators/IntelliJJavaNewProjectWizard.kt | 4 ++-- .../project/wizard/GradleJavaNewProjectWizard.kt | 15 ++++++++++----- .../wizard/AssetsKotlinNewProjectWizardStep.kt | 4 ++-- .../gradle/GradleKotlinNewProjectWizard.kt | 4 ++-- .../IntelliJKotlinNewProjectWizard.kt | 4 ++-- .../maven/wizards/MavenJavaNewProjectWizard.kt | 4 ++-- 8 files changed, 28 insertions(+), 18 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/projectWizard/generators/AssetsJavaNewProjectWizardStep.kt b/java/idea-ui/src/com/intellij/ide/projectWizard/generators/AssetsJavaNewProjectWizardStep.kt index 2fb454219205..b655f07537c2 100644 --- a/java/idea-ui/src/com/intellij/ide/projectWizard/generators/AssetsJavaNewProjectWizardStep.kt +++ b/java/idea-ui/src/com/intellij/ide/projectWizard/generators/AssetsJavaNewProjectWizardStep.kt @@ -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 } } } diff --git a/java/idea-ui/src/com/intellij/ide/projectWizard/generators/AssetsOnboardingTipsProjectWizardStep.kt b/java/idea-ui/src/com/intellij/ide/projectWizard/generators/AssetsOnboardingTipsProjectWizardStep.kt index 31cb39fa22c6..db66e5e0635e 100644 --- a/java/idea-ui/src/com/intellij/ide/projectWizard/generators/AssetsOnboardingTipsProjectWizardStep.kt +++ b/java/idea-ui/src/com/intellij/ide/projectWizard/generators/AssetsOnboardingTipsProjectWizardStep.kt @@ -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 diff --git a/java/idea-ui/src/com/intellij/ide/projectWizard/generators/IntelliJJavaNewProjectWizard.kt b/java/idea-ui/src/com/intellij/ide/projectWizard/generators/IntelliJJavaNewProjectWizard.kt index cf67ee71385d..57f6e5f20b56 100644 --- a/java/idea-ui/src/com/intellij/ide/projectWizard/generators/IntelliJJavaNewProjectWizard.kt +++ b/java/idea-ui/src/com/intellij/ide/projectWizard/generators/IntelliJJavaNewProjectWizard.kt @@ -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) } } } \ No newline at end of file diff --git a/plugins/gradle/java/src/service/project/wizard/GradleJavaNewProjectWizard.kt b/plugins/gradle/java/src/service/project/wizard/GradleJavaNewProjectWizard.kt index 7239bae23d95..c26d511b87f1 100644 --- a/plugins/gradle/java/src/service/project/wizard/GradleJavaNewProjectWizard.kt +++ b/plugins/gradle/java/src/service/project/wizard/GradleJavaNewProjectWizard.kt @@ -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) } } } \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/wizard/AssetsKotlinNewProjectWizardStep.kt b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/wizard/AssetsKotlinNewProjectWizardStep.kt index b3bdb2a9102a..ec5c0bd0b3b3 100644 --- a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/wizard/AssetsKotlinNewProjectWizardStep.kt +++ b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/wizard/AssetsKotlinNewProjectWizardStep.kt @@ -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 } } } diff --git a/plugins/kotlin/project-wizard/gradle/src/org/jetbrains/kotlin/tools/projectWizard/gradle/GradleKotlinNewProjectWizard.kt b/plugins/kotlin/project-wizard/gradle/src/org/jetbrains/kotlin/tools/projectWizard/gradle/GradleKotlinNewProjectWizard.kt index b73c388f599f..08c6b91c9919 100644 --- a/plugins/kotlin/project-wizard/gradle/src/org/jetbrains/kotlin/tools/projectWizard/gradle/GradleKotlinNewProjectWizard.kt +++ b/plugins/kotlin/project-wizard/gradle/src/org/jetbrains/kotlin/tools/projectWizard/gradle/GradleKotlinNewProjectWizard.kt @@ -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) } } } \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/idea/src/org/jetbrains/kotlin/tools/projectWizard/IntelliJKotlinNewProjectWizard.kt b/plugins/kotlin/project-wizard/idea/src/org/jetbrains/kotlin/tools/projectWizard/IntelliJKotlinNewProjectWizard.kt index f4f384b8fce3..bb5bd1a6b078 100644 --- a/plugins/kotlin/project-wizard/idea/src/org/jetbrains/kotlin/tools/projectWizard/IntelliJKotlinNewProjectWizard.kt +++ b/plugins/kotlin/project-wizard/idea/src/org/jetbrains/kotlin/tools/projectWizard/IntelliJKotlinNewProjectWizard.kt @@ -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) } } } \ No newline at end of file diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenJavaNewProjectWizard.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenJavaNewProjectWizard.kt index c676c7617063..530d6b75094d 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenJavaNewProjectWizard.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenJavaNewProjectWizard.kt @@ -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) } } } \ No newline at end of file