IDEA-333739 Force onboarding tips comments rendering on editor opening

GitOrigin-RevId: 4c05dbfb016504028a00ade55beef75e3875e679
This commit is contained in:
Alexey Merkulov
2023-10-09 22:11:19 +02:00
committed by intellij-monorepo-bot
parent 2de01a136e
commit 8323548c83
2 changed files with 34 additions and 2 deletions

View File

@@ -3,17 +3,17 @@ package com.intellij.java.featuresTrainer.onboarding.tips
import com.intellij.lang.documentation.DocumentationProvider
import com.intellij.openapi.util.TextRange
import com.intellij.openapi.util.registry.Registry
import com.intellij.psi.*
import com.intellij.psi.impl.FakePsiElement
import com.intellij.psi.tree.IElementType
import training.onboarding.filePathWithOnboardingTips
import training.onboarding.renderedOnboardingTipsEnabled
import java.util.function.Consumer
private const val tipPrefix = "//TIP"
class JavaOnboardingTipsDocumentationProvider: DocumentationProvider {
private val enabled get() = Registry.`is`("doc.onboarding.tips.render")
private val enabled get() = renderedOnboardingTipsEnabled
override fun collectDocComments(file: PsiFile, sink: Consumer<in PsiDocCommentBase>) {
if (!enabled || file !is PsiJavaFile) return

View File

@@ -3,6 +3,7 @@
package training.onboarding
import com.intellij.codeInsight.documentation.render.DocRenderManager
import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl
import com.intellij.ide.util.PropertiesComponent
import com.intellij.ide.wizard.NewProjectOnboardingTips
@@ -13,18 +14,21 @@ import com.intellij.openapi.actionSystem.ex.ActionUtil.getDelegateChainRootActio
import com.intellij.openapi.actionSystem.ex.AnActionListener
import com.intellij.openapi.actionSystem.impl.ActionButton
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.EDT
import com.intellij.openapi.application.invokeLater
import com.intellij.openapi.components.service
import com.intellij.openapi.editor.EditorFactory
import com.intellij.openapi.editor.event.EditorFactoryEvent
import com.intellij.openapi.editor.event.EditorFactoryListener
import com.intellij.openapi.fileEditor.FileEditor
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.fileEditor.TextEditor
import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.ProjectActivity
import com.intellij.openapi.ui.popup.Balloon
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.ui.EditorNotificationPanel
import com.intellij.ui.EditorNotificationProvider
@@ -36,6 +40,9 @@ import com.intellij.xdebugger.*
import com.intellij.xdebugger.impl.XDebugSessionImpl
import com.intellij.xdebugger.impl.actions.XDebuggerActions
import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.NonNls
import training.learn.LearnBundle
@@ -57,6 +64,11 @@ var Project.filePathWithOnboardingTips: String?
@ApiStatus.Internal
set(value) { PropertiesComponent.getInstance(this).setValue("onboarding.tips.debug.path", value) }
val renderedOnboardingTipsEnabled: Boolean
@ApiStatus.Internal
get() = Registry.`is`("doc.onboarding.tips.render")
private val RESET_TOOLTIP_SAMPLE_TEXT = Key.create<String>("reset.tooltip.sample.text")
internal val promotedActions = listOf(IdeActions.ACTION_SEARCH_EVERYWHERE,
@@ -115,6 +127,26 @@ private class InstallOnboardingTooltip : ProjectActivity {
val pathToRunningFile = project.filePathWithOnboardingTips
if (pathToRunningFile != null) {
installDebugListener(project, pathToRunningFile)
if (!renderedOnboardingTipsEnabled) return
coroutineScope {
launch(Dispatchers.EDT) {
for (fileEditor in FileEditorManager.getInstance(project).allEditors) {
val editor = (fileEditor as? TextEditor)?.editor
if (editor?.virtualFile?.path == pathToRunningFile) {
DocRenderManager.setDocRenderingEnabled(editor, true)
}
}
}
}
EditorFactory.getInstance().addEditorFactoryListener(object : EditorFactoryListener {
override fun editorCreated(event: EditorFactoryEvent) {
if (event.editor.virtualFile?.path != pathToRunningFile) return
DocRenderManager.setDocRenderingEnabled(event.editor, true)
}
}, project)
}
}
}