[IFT] Add sdk configuration tasks to lessons

Also specify original sample objects for restores in the first meaningful task of the lesson. It is required for the case when user change the sample during SDK configuration tasks.

IJ-CR-23618

GitOrigin-RevId: cbe08c75fc89c43b3fe966e87b3feeb3a0dce9af
This commit is contained in:
Konstantin Hudyakov
2022-04-20 16:12:34 +03:00
committed by intellij-monorepo-bot
parent 5aa970d397
commit eb44558322
25 changed files with 41 additions and 29 deletions

View File

@@ -46,7 +46,7 @@ class JavaSmartTypeCompletionLesson : KLesson("Smart type completion", LessonsBu
val text = editor.document.text
text.contains("strings = arrayBlockingQueue;") || text.contains("strings = linkedList;")
}
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
testSmartCompletion()
}
caret(20, 16)

View File

@@ -37,7 +37,7 @@ class JavaStatementCompletionLesson
override val lessonContent: LessonContext.() -> Unit = {
prepareSample(sample)
actionTask("EditorCompleteStatement") {
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
JavaLessonsBundle.message("java.statement.completion.complete.for", action(it), code("for"))
}
task("EditorCompleteStatement") {

View File

@@ -21,6 +21,8 @@ class JavaInheritanceHierarchyLesson
override val sampleFilePath: String = "src/InheritanceHierarchySample.java"
override val lessonContent: LessonContext.() -> Unit = {
sdkConfigurationTasks()
caret("foo(demo)")
actionTask("GotoImplementation") {

View File

@@ -62,7 +62,7 @@ class JavaOccurrencesLesson
task("Find") {
text(JavaLessonsBundle.message("java.find.occurrences.invoke.find", code("cellphone"), action(it)))
triggerUI().component { _: SearchTextArea -> true }
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
test { actions(it) }
}
task("FindNext") {

View File

@@ -20,7 +20,7 @@ class JavaExtractMethodCocktailSortLesson
showWarningIfInplaceRefactoringsDisabled()
actionTask("ExtractMethod") {
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(javaSortSample)
LessonsBundle.message("extract.method.invoke.action", action(it))
}

View File

@@ -13,7 +13,7 @@ import training.util.adaptToNotNativeLocalization
import javax.swing.JDialog
class JavaRefactoringMenuLesson : RefactoringMenuLessonBase("java.refactoring.menu") {
private val sample = parseLessonSample("""
override val sample = parseLessonSample("""
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
@@ -44,8 +44,6 @@ class JavaRefactoringMenuLesson : RefactoringMenuLessonBase("java.refactoring.me
""".trimIndent())
override val lessonContent: LessonContext.() -> Unit = {
prepareSample(sample)
showWarningIfInplaceRefactoringsDisabled()
extractParameterTasks()
moreRefactoringsTasks()
restoreRefactoringOptionsInformer()

View File

@@ -21,7 +21,7 @@ abstract class CompletionWithTabLesson(private val proposal: String) :
task("CodeCompletion") {
text(LessonsBundle.message("completion.with.tab.begin.completion", action(it), code(proposal)))
triggerAndBorderHighlight().listItem { item -> item.isToStringContains(proposal) }
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
test { actions(it) }
}

View File

@@ -46,7 +46,7 @@ abstract class ContextActionsLesson : KLesson("context.actions", LessonsBundle.m
triggerAndBorderHighlight().listItem { item ->
item.isToStringContains(warningQuickFix)
}
restoreIfModifiedOrMovedIncorrectly(warningPossibleArea)
restoreIfModifiedOrMovedIncorrectly(warningPossibleArea, sample)
test {
actions(it)
}

View File

@@ -19,7 +19,7 @@ class DuplicateLesson(private val sample: LessonSample) :
task("EditorDuplicate") {
text(LessonsBundle.message("duplicate.and.delete.lines.duplicate.line", action(it)))
trigger(it)
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
test { actions(it) }
}

View File

@@ -15,7 +15,7 @@ class MoveLesson(private val caretText: String, private val sample: LessonSample
prepareSample(sample)
actionTask("MoveLineDown") {
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
LessonsBundle.message("move.pull.down", action(it))
}
actionTask("MoveLineUp") {

View File

@@ -26,8 +26,8 @@ abstract class SurroundAndUnwrapLesson
task("SurroundWith") {
proposeIfModified {
editor.caretModel.currentCaret.selectionStart != previous.sample.selection?.first ||
editor.caretModel.currentCaret.selectionEnd != previous.sample.selection?.second
editor.caretModel.currentCaret.selectionStart != sample.selection?.first ||
editor.caretModel.currentCaret.selectionEnd != sample.selection?.second
}
text(LessonsBundle.message("surround.and.unwrap.invoke.surround", action(it)))
triggerAndBorderHighlight().listItem { item ->

View File

@@ -24,7 +24,7 @@ class CodeFormatLesson(private val sample: LessonSample, private val optimizeImp
}
actionTask("ReformatCode") {
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
LessonsBundle.message("code.format.reformat.selection", action(it))
}

View File

@@ -29,7 +29,7 @@ abstract class EditorCodingAssistanceLesson(private val sample: LessonSample) :
prepareSample(sample)
actionTask("GotoNextError") {
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
LessonsBundle.message("editor.coding.assistance.goto.next.error", action(it))
}

View File

@@ -16,7 +16,7 @@ class ParameterInfoLesson(private val sample: LessonSample) :
val initialOffset = sample.getPosition(0).startOffset
actionTask("ParameterInfo") {
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
LessonsBundle.message("parameter.info.use.action", action(it))
}

View File

@@ -20,7 +20,7 @@ class QuickPopupsLesson(private val sample: LessonSample) :
task("QuickJavaDoc") {
text(LessonsBundle.message("quick.popups.show.documentation", action(it)))
triggerOnQuickDocumentationPopup()
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
test { actions(it) }
}

View File

@@ -27,6 +27,8 @@ abstract class DeclarationAndUsagesLesson
override val lessonContent: LessonContext.() -> Unit
get() = {
sdkConfigurationTasks()
setInitialPosition()
prepareRuntimeTask {

View File

@@ -6,10 +6,7 @@ import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.editor.LogicalPosition
import com.intellij.openapi.editor.impl.EditorComponentImpl
import com.intellij.ui.speedSearch.SpeedSearchSupply
import training.dsl.LessonContext
import training.dsl.LessonUtil
import training.dsl.TaskRuntimeContext
import training.dsl.restoreAfterStateBecomeFalse
import training.dsl.*
import training.learn.LessonsBundle
import training.learn.course.KLesson
import training.learn.course.LessonType
@@ -28,6 +25,8 @@ abstract class FileStructureLesson
override val lessonContent: LessonContext.() -> Unit
get() = {
sdkConfigurationTasks()
caret(0)
actionTask("FileStructurePopup") {

View File

@@ -29,6 +29,8 @@ class FindInFilesLesson(override val sampleFilePath: String)
: KLesson("Find in files", LessonsBundle.message("find.in.files.lesson.name")) {
override val lessonContent: LessonContext.() -> Unit = {
sdkConfigurationTasks()
prepareRuntimeTask {
resetFindSettings(project)
}

View File

@@ -42,6 +42,8 @@ abstract class RecentFilesLesson : KLesson("Recent Files and Locations", Lessons
private val countOfFilesToDelete: Int = 5
override val lessonContent: LessonContext.() -> Unit = {
sdkConfigurationTasks()
setInitialPosition()
task("GotoDeclaration") {

View File

@@ -36,6 +36,8 @@ abstract class SearchEverywhereLesson : KLesson("Search everywhere", LessonsBund
private var backupPopupLocation: Point? = null
override val lessonContent: LessonContext.() -> Unit = {
sdkConfigurationTasks()
task("SearchEverywhere") {
triggerAndBorderHighlight().component { ui: ExtendableTextField ->
UIUtil.getParentOfType(SearchEverywhereUI::class.java, ui) != null

View File

@@ -25,7 +25,7 @@ class ExtractMethodCocktailSortLesson(private val sample: LessonSample)
triggerUI().component { dialog: JDialog ->
dialog.title == extractMethodDialogTitle
}
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
test { actions(it) }
}
// Now will be open the first dialog

View File

@@ -20,7 +20,7 @@ class ExtractVariableFromBubbleLesson(private val sample: LessonSample)
task("IntroduceVariable") {
text(LessonsBundle.message("extract.variable.start.refactoring", action(it), code("i + 1")))
triggerStart("IntroduceVariable")
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
test {
actions(it)
}

View File

@@ -15,7 +15,13 @@ import training.util.isToStringContains
import javax.swing.JList
abstract class RefactoringMenuLessonBase(lessonId: String) : KLesson(lessonId, LessonsBundle.message("refactoring.menu.lesson.name")) {
protected abstract val sample: LessonSample
fun LessonContext.extractParameterTasks() {
prepareSample(sample)
showWarningIfInplaceRefactoringsDisabled()
lateinit var showPopupTaskId: TaskContext.TaskId
task("Refactorings.QuickListPopupAction") {
showPopupTaskId = taskId
@@ -24,7 +30,7 @@ abstract class RefactoringMenuLessonBase(lessonId: String) : KLesson(lessonId, L
triggerUI().component { ui: EngravedLabel ->
ui.text.isToStringContains(refactorThisTitle)
}
restoreIfModifiedOrMoved()
restoreIfModifiedOrMoved(sample)
test { actions(it) }
}

View File

@@ -124,10 +124,12 @@ class PythonOnboardingTourLesson :
projectTasks()
prepareSample(sample)
prepareSample(sample, checkSdkConfiguration = false)
openLearnToolwindow()
sdkConfigurationTasks()
showInterpreterConfiguration()
waitIndexingTasks()

View File

@@ -4,11 +4,10 @@ package com.jetbrains.python.ift.lesson.refactorings
import training.dsl.LessonContext
import training.dsl.parseLessonSample
import training.dsl.restoreRefactoringOptionsInformer
import training.dsl.showWarningIfInplaceRefactoringsDisabled
import training.learn.lesson.general.refactorings.RefactoringMenuLessonBase
class PythonRefactorMenuLesson : RefactoringMenuLessonBase("Refactoring menu") {
private val sample = parseLessonSample("""
override val sample = parseLessonSample("""
# Need to think about better sample!
import random
@@ -18,8 +17,6 @@ class PythonRefactorMenuLesson : RefactoringMenuLessonBase("Refactoring menu") {
""".trimIndent())
override val lessonContent: LessonContext.() -> Unit = {
prepareSample(sample)
showWarningIfInplaceRefactoringsDisabled()
extractParameterTasks()
restoreRefactoringOptionsInformer()
}