[IFT] Add project to TaskContext
authorAlexey Merkulov <alexey.merkulov@jetbrains.com>
Fri, 18 Sep 2020 14:30:20 +0000 (17:30 +0300)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Wed, 23 Sep 2020 09:21:50 +0000 (09:21 +0000)
GitOrigin-RevId: df65823b022a1b7f8f2ebe5c6fa61da5c21be083

ide-features-trainer/src/training/actions/DumpFeaturesTrainerText.kt
ide-features-trainer/src/training/commands/kotlin/TaskContext.kt
ide-features-trainer/src/training/learn/lesson/kimpl/LessonExecutor.kt
ide-features-trainer/src/training/learn/lesson/kimpl/LessonExecutorUtil.kt
ide-features-trainer/src/training/learn/lesson/kimpl/TaskContextImpl.kt
ide-features-trainer/src/training/ui/LearnToolWindow.kt

index 6185e77af4452ca12be874c656cd0d8b707680bf..3d537e679a9bf2336e5a8ebaa3f370eaa29b0f59 100644 (file)
@@ -4,6 +4,7 @@ package training.actions
 import com.intellij.ide.CopyPasteManagerEx
 import com.intellij.openapi.actionSystem.AnAction
 import com.intellij.openapi.actionSystem.AnActionEvent
+import com.intellij.openapi.project.Project
 import training.commands.kotlin.TaskContext
 import training.commands.kotlin.TaskRuntimeContext
 import training.learn.CourseManager
@@ -14,13 +15,14 @@ import java.awt.datatransfer.StringSelection
 @Suppress("HardCodedStringLiteral")
 class DumpFeaturesTrainerText : AnAction("Copy IFT Course Text to Clipboard") {
   override fun actionPerformed(e: AnActionEvent) {
+    val project = e.project ?: return
     val lessonsForModules = CourseManager.instance.lessonsForModules
     val buffer = StringBuffer()
     for (x in lessonsForModules) {
       if (x is KLesson) {
         buffer.append(x.name)
         buffer.append(":\n")
-        x.lessonContent(ApplyTaskLessonContext(TextCollector(buffer)))
+        x.lessonContent(ApplyTaskLessonContext(TextCollector(buffer, project)))
         buffer.append('\n')
       }
     }
@@ -29,7 +31,7 @@ class DumpFeaturesTrainerText : AnAction("Copy IFT Course Text to Clipboard") {
 }
 
 
-private class TextCollector(private val buffer: StringBuffer) : TaskContext() {
+private class TextCollector(private val buffer: StringBuffer, override val project: Project) : TaskContext() {
   override fun text(text: String) {
     buffer.append(text)
     buffer.append('\n')
index 72db8acefbfe50826427ec37694c1d870612d475..e3f2b68cc176a288ca532308da484dbf0c01d03e 100644 (file)
@@ -2,6 +2,7 @@
 package training.commands.kotlin
 
 import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.project.Project
 import com.intellij.openapi.util.text.StringUtil
 import com.intellij.ui.tree.TreeVisitor
 import com.intellij.util.ui.tree.TreeUtil
@@ -24,6 +25,8 @@ import javax.swing.JTree
 import javax.swing.tree.TreePath
 
 abstract class TaskContext {
+  abstract val project: Project
+
   open val taskId: TaskId = TaskId(0)
 
   /** Put here some initialization for the task */
index 34c1bbd64d7e534347079c3ba4bed48d1e39b2ed..3d9f38e94d38837c98a9cd03eff5ca516371bf22 100644 (file)
@@ -92,7 +92,7 @@ class LessonExecutor(val lesson: KLesson, val project: Project) : Disposable {
       throw IllegalStateException("Nested tasks are not permitted!")
     }
 
-    val isRealTask = LessonExecutorUtil.isRealTask(taskContent)
+    val isRealTask = LessonExecutorUtil.isRealTask(taskContent, project)
     val shownTaskNumber = if (isRealTask) currentProgressTaskNumber++ else null
     addTaskAction(shownTaskNumber) { processTask(taskContent) }
   }
index 289fe2400c88af672d16d217d8008feb881f7376..c483c6862e853f5ac3462df646fb1b8f6a656a7d 100644 (file)
@@ -18,8 +18,8 @@ import javax.swing.Icon
 
 internal object LessonExecutorUtil {
   /** This task is a real task with some event required and corresponding text. Used for progress indication. */
-  fun isRealTask(taskContent: TaskContext.() -> Unit): Boolean {
-    val fakeTaskContext = FakeTaskContext()
+  fun isRealTask(taskContent: TaskContext.() -> Unit, project: Project): Boolean {
+    val fakeTaskContext = FakeTaskContext(project)
     taskContent(fakeTaskContext)
     return fakeTaskContext.hasDetection && fakeTaskContext.hasText
   }
@@ -40,7 +40,7 @@ internal object LessonExecutorUtil {
   }
 }
 
-private class FakeTaskContext : TaskContext() {
+private class FakeTaskContext(override val project: Project) : TaskContext() {
   var hasText = false
   var hasDetection = false
 
index 279813eb48b35489bcaa9868983a565fd76cc694..bd7595ac8c6e942434367e64980859d521672b77 100644 (file)
@@ -27,6 +27,9 @@ internal class TaskContextImpl(private val lessonExecutor: LessonExecutor,
                                private val recorder: ActionsRecorder,
                                val taskIndex: Int,
                                private val callbackData: LessonExecutor.TaskCallbackData) : TaskContext() {
+  override val project: Project
+    get() = lessonExecutor.project
+
   override val taskId = TaskId(taskIndex)
 
   private val runtimeContext = TaskRuntimeContext(lessonExecutor,
index 65ec1a7a357ab219ea7757b1d4ca71a6576d26ae..5fc1343ea82c1f9d951ab3e9ada6c768cc67a194 100644 (file)
@@ -217,6 +217,6 @@ class LearnToolWindow internal constructor(val project: Project, private val who
   }
 }
 
-private class DocumentationModeTaskContext(private val project: Project) : TaskContext() {
+private class DocumentationModeTaskContext(override val project: Project) : TaskContext() {
   override fun text(text: String) = LessonExecutorUtil.addTextToLearnPanel(text, project)
 }