diff --git a/java/java-features-trainer/src/com/intellij/java/ift/JavaLearningCourse.kt b/java/java-features-trainer/src/com/intellij/java/ift/JavaLearningCourse.kt
index 23957cf100e7..8350556f3940 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/JavaLearningCourse.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/JavaLearningCourse.kt
@@ -13,17 +13,17 @@ import com.intellij.java.ift.lesson.refactorings.JavaRenameLesson
import com.intellij.java.ift.lesson.run.JavaDebugLesson
import com.intellij.java.ift.lesson.run.JavaRunConfigurationLesson
import com.intellij.lang.java.JavaLanguage
-import training.learn.LearningModule
+import training.dsl.LessonUtil
import training.learn.LessonsBundle
import training.learn.course.LearningCourseBase
-import training.learn.interfaces.LessonType
+import training.learn.course.LearningModule
+import training.learn.course.LessonType
import training.learn.lesson.general.*
import training.learn.lesson.general.assistance.CodeFormatLesson
import training.learn.lesson.general.assistance.ParameterInfoLesson
import training.learn.lesson.general.assistance.QuickPopupsLesson
import training.learn.lesson.general.navigation.FindInFilesLesson
import training.learn.lesson.general.refactorings.ExtractVariableFromBubbleLesson
-import training.learn.lesson.kimpl.LessonUtil
class JavaLearningCourse : LearningCourseBase(JavaLanguage.INSTANCE.id) {
override fun modules() = listOf(
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/assistance/JavaEditorCodingAssistanceLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/assistance/JavaEditorCodingAssistanceLesson.kt
index e9a8921146f3..db021d493432 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/assistance/JavaEditorCodingAssistanceLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/assistance/JavaEditorCodingAssistanceLesson.kt
@@ -3,8 +3,8 @@ package com.intellij.java.ift.lesson.assistance
import com.intellij.codeInsight.daemon.QuickFixBundle
import com.siyeh.InspectionGadgetsBundle
+import training.dsl.LessonSample
import training.learn.lesson.general.assistance.EditorCodingAssistanceLesson
-import training.learn.lesson.kimpl.LessonSample
class JavaEditorCodingAssistanceLesson(lang: String, sample: LessonSample) :
EditorCodingAssistanceLesson(lang, sample) {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaContextActionsLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaContextActionsLesson.kt
index c2ef9948cc74..97dae83735ed 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaContextActionsLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaContextActionsLesson.kt
@@ -3,9 +3,9 @@ package com.intellij.java.ift.lesson.basic
import com.intellij.codeInsight.daemon.QuickFixBundle
import com.siyeh.IntentionPowerPackBundle
+import training.dsl.LessonSample
+import training.dsl.parseLessonSample
import training.learn.lesson.general.ContextActionsLesson
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.parseLessonSample
class JavaContextActionsLesson : ContextActionsLesson("JAVA") {
override val sample: LessonSample = parseLessonSample("""
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaSelectLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaSelectLesson.kt
index e0971d15c0aa..45f21e21afa5 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaSelectLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaSelectLesson.kt
@@ -1,9 +1,9 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.java.ift.lesson.basic
+import training.dsl.LessonSample
+import training.dsl.parseLessonSample
import training.learn.lesson.general.NewSelectLesson
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.parseLessonSample
class JavaSelectLesson : NewSelectLesson("JAVA") {
override val selectArgument = "\"$selectString\""
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaSurroundAndUnwrapLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaSurroundAndUnwrapLesson.kt
index 92aa928d207a..fca9a5bc5579 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaSurroundAndUnwrapLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/basic/JavaSurroundAndUnwrapLesson.kt
@@ -2,10 +2,10 @@
package com.intellij.java.ift.lesson.basic
import com.intellij.java.ift.JavaLessonsBundle
+import training.dsl.LessonSample
+import training.dsl.parseLessonSample
import training.learn.LessonsBundle
import training.learn.lesson.general.SurroundAndUnwrapLesson
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.parseLessonSample
class JavaSurroundAndUnwrapLesson : SurroundAndUnwrapLesson("JAVA") {
override val sample: LessonSample = parseLessonSample("""
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaBasicCompletionLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaBasicCompletionLesson.kt
index e7c25622aea5..1765cc88498f 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaBasicCompletionLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaBasicCompletionLesson.kt
@@ -3,13 +3,13 @@ package com.intellij.java.ift.lesson.completion
import com.intellij.java.ift.JavaLangSupport
import com.intellij.java.ift.JavaLessonsBundle
+import training.dsl.LessonContext
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.LessonUtil.restoreIfModifiedOrMovedIncorrectly
+import training.dsl.parseLessonSample
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMovedIncorrectly
-import training.learn.lesson.kimpl.parseLessonSample
+import training.learn.course.KLesson
class JavaBasicCompletionLesson
: KLesson("Basic completion", LessonsBundle.message("basic.completion.lesson.name"), JavaLangSupport.lang) {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaCompletionWithTabLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaCompletionWithTabLesson.kt
index 7e40f4c0a6cc..d93110de4d9e 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaCompletionWithTabLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaCompletionWithTabLesson.kt
@@ -2,8 +2,8 @@
package com.intellij.java.ift.lesson.completion
import com.intellij.java.ift.JavaLangSupport
+import training.dsl.parseLessonSample
import training.learn.lesson.general.CompletionWithTabLesson
-import training.learn.lesson.kimpl.parseLessonSample
class JavaCompletionWithTabLesson :
CompletionWithTabLesson(JavaLangSupport.lang, "DO_NOTHING_ON_CLOSE") {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaPostfixCompletionLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaPostfixCompletionLesson.kt
index 375c82e3a3cd..4ace9da11ba5 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaPostfixCompletionLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaPostfixCompletionLesson.kt
@@ -3,10 +3,10 @@ package com.intellij.java.ift.lesson.completion
import com.intellij.java.ift.JavaLangSupport
import com.intellij.java.ift.JavaLessonsBundle
+import training.dsl.LessonContext
+import training.dsl.parseLessonSample
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.parseLessonSample
+import training.learn.course.KLesson
class JavaPostfixCompletionLesson
: KLesson("Postfix completion", LessonsBundle.message("postfix.completion.lesson.name"), JavaLangSupport.lang) {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaSmartTypeCompletionLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaSmartTypeCompletionLesson.kt
index 92c879d4ea42..e6366478ad99 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaSmartTypeCompletionLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaSmartTypeCompletionLesson.kt
@@ -3,10 +3,10 @@ package com.intellij.java.ift.lesson.completion
import com.intellij.java.ift.JavaLangSupport
import com.intellij.java.ift.JavaLessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.parseLessonSample
+import training.dsl.LessonContext
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.parseLessonSample
+import training.learn.course.KLesson
class JavaSmartTypeCompletionLesson
: KLesson("Smart type completion", JavaLessonsBundle.message("java.smart.type.completion.lesson.name"), JavaLangSupport.lang) {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaStatementCompletionLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaStatementCompletionLesson.kt
index 6d60d6e93a6e..5693fd167849 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaStatementCompletionLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/completion/JavaStatementCompletionLesson.kt
@@ -6,12 +6,12 @@ import com.intellij.java.ift.JavaLessonsBundle
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiForStatement
import com.intellij.psi.util.PsiTreeUtil
-import training.commands.kotlin.TaskRuntimeContext
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.parseLessonSample
+import training.dsl.LessonContext
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.TaskRuntimeContext
+import training.dsl.parseLessonSample
+import training.learn.course.KLesson
class JavaStatementCompletionLesson
: KLesson("Statement completion", JavaLessonsBundle.message("java.statement.completion.lesson.name"), JavaLangSupport.lang) {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaDeclarationAndUsagesLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaDeclarationAndUsagesLesson.kt
index 382e658c0e27..ebf2d3a82afe 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaDeclarationAndUsagesLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaDeclarationAndUsagesLesson.kt
@@ -1,8 +1,8 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.java.ift.lesson.navigation
+import training.dsl.LessonContext
import training.learn.lesson.general.navigation.DeclarationAndUsagesLesson
-import training.learn.lesson.kimpl.LessonContext
class JavaDeclarationAndUsagesLesson : DeclarationAndUsagesLesson("JAVA") {
override fun LessonContext.setInitialPosition() = caret("foo()")
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaInheritanceHierarchyLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaInheritanceHierarchyLesson.kt
index e6fbbaf2f0bb..307a86929a5f 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaInheritanceHierarchyLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaInheritanceHierarchyLesson.kt
@@ -14,10 +14,9 @@ import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.util.Key
import com.intellij.ui.InplaceButton
import com.intellij.ui.UIBundle
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.*
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
class JavaInheritanceHierarchyLesson
: KLesson("java.inheritance.hierarchy.lesson", JavaLessonsBundle.message("java.inheritance.hierarchy.lesson.name"), "JAVA") {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaOccurrencesLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaOccurrencesLesson.kt
index 6215be617f29..8cd6b40236c5 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaOccurrencesLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaOccurrencesLesson.kt
@@ -7,12 +7,12 @@ import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.impl.actionButton
import com.intellij.testGuiFramework.util.Key
import com.intellij.usageView.UsageViewBundle
-import training.learn.interfaces.LessonType
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.parseLessonSample
+import training.dsl.LessonContext
+import training.dsl.LessonUtil
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.parseLessonSample
+import training.learn.course.KLesson
+import training.learn.course.LessonType
class JavaOccurrencesLesson
: KLesson("java.occurrences.lesson", JavaLessonsBundle.message("java.find.occurrences.lesson.name"), "JAVA") {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaRecentFilesLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaRecentFilesLesson.kt
index 812221adc5cc..f5c5ddae88e0 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaRecentFilesLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaRecentFilesLesson.kt
@@ -1,8 +1,8 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.java.ift.lesson.navigation
+import training.dsl.LessonContext
import training.learn.lesson.general.navigation.RecentFilesLesson
-import training.learn.lesson.kimpl.LessonContext
class JavaRecentFilesLesson : RecentFilesLesson("JAVA") {
override val existedFile: String = "src/RecentFilesDemo.java"
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaSearchEverywhereLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaSearchEverywhereLesson.kt
index a0e81680e047..f770d17d69d5 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaSearchEverywhereLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/navigation/JavaSearchEverywhereLesson.kt
@@ -1,9 +1,9 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.java.ift.lesson.navigation
+import training.dsl.LessonContext
import training.learn.LessonsBundle
import training.learn.lesson.general.navigation.SearchEverywhereLesson
-import training.learn.lesson.kimpl.LessonContext
class JavaSearchEverywhereLesson : SearchEverywhereLesson("JAVA") {
override val existedFile = "src/RecentFilesDemo.java"
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaExtractMethodCocktailSortLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaExtractMethodCocktailSortLesson.kt
index f4a598691383..0fa5c03659a7 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaExtractMethodCocktailSortLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaExtractMethodCocktailSortLesson.kt
@@ -6,13 +6,13 @@ import com.intellij.refactoring.RefactoringBundle
import com.intellij.refactoring.extractMethod.ExtractMethodHandler
import com.intellij.testGuiFramework.impl.button
import com.intellij.ui.UIBundle
-import training.commands.kotlin.TaskTestContext
+import training.dsl.LessonContext
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.TaskTestContext
+import training.dsl.dropMnemonic
+import training.dsl.parseLessonSample
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.dropMnemonic
-import training.learn.lesson.kimpl.parseLessonSample
+import training.learn.course.KLesson
import javax.swing.JDialog
class JavaExtractMethodCocktailSortLesson
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaRefactoringMenuLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaRefactoringMenuLesson.kt
index 7ce220fbc107..85cdcfe751a7 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaRefactoringMenuLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaRefactoringMenuLesson.kt
@@ -7,12 +7,12 @@ import com.intellij.refactoring.RefactoringBundle
import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.util.Key
import com.intellij.util.ui.UIUtil
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.LessonContext
+import training.dsl.LessonUtil
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.TaskRuntimeContext
+import training.dsl.parseLessonSample
import training.learn.lesson.general.refactorings.RefactoringMenuLessonBase
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.parseLessonSample
import javax.swing.JDialog
class JavaRefactoringMenuLesson : RefactoringMenuLessonBase("java.refactoring.menu", "JAVA") {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaRenameLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaRenameLesson.kt
index 5c308809fbd1..2da023220cf0 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaRenameLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/refactorings/JavaRenameLesson.kt
@@ -8,11 +8,10 @@ import com.intellij.java.refactoring.JavaRefactoringBundle
import com.intellij.refactoring.rename.RenameProcessor
import com.intellij.testGuiFramework.impl.button
import com.intellij.util.ui.UIUtil
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.*
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
+import training.learn.course.KLesson
import javax.swing.JDialog
class JavaRenameLesson
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaDebugLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaDebugLesson.kt
index e5b93d173029..400cfb6d9c42 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaDebugLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaDebugLesson.kt
@@ -5,10 +5,10 @@ import com.intellij.icons.AllIcons
import com.intellij.java.ift.JavaLessonsBundle
import com.intellij.openapi.editor.LogicalPosition
import com.intellij.testGuiFramework.impl.button
-import training.commands.kotlin.TaskTestContext
+import training.dsl.LessonContext
+import training.dsl.TaskTestContext
+import training.dsl.highlightButtonById
import training.learn.lesson.general.run.CommonDebugLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.highlightButtonById
class JavaDebugLesson : CommonDebugLesson("java.debug.workflow", "JAVA") {
private val demoClassName = JavaRunLessonsUtils.demoClassName
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaRunConfigurationLesson.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaRunConfigurationLesson.kt
index a779d7d57671..8b218ad258f0 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaRunConfigurationLesson.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaRunConfigurationLesson.kt
@@ -7,11 +7,11 @@ import com.intellij.java.ift.JavaLessonsBundle
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.actionSystem.DataProvider
import com.intellij.openapi.editor.ex.EditorGutterComponentEx
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.checkToolWindowState
+import training.dsl.dropMnemonic
import training.learn.lesson.general.run.CommonRunConfigurationLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.checkToolWindowState
-import training.learn.lesson.kimpl.dropMnemonic
import java.awt.Rectangle
class JavaRunConfigurationLesson : CommonRunConfigurationLesson("java.run.configuration", "JAVA") {
diff --git a/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaRunLessonsUtils.kt b/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaRunLessonsUtils.kt
index ace401cb0dda..ad15be0892ed 100644
--- a/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaRunLessonsUtils.kt
+++ b/java/java-features-trainer/src/com/intellij/java/ift/lesson/run/JavaRunLessonsUtils.kt
@@ -1,7 +1,7 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.java.ift.lesson.run
-import training.learn.lesson.kimpl.parseLessonSample
+import training.dsl.parseLessonSample
object JavaRunLessonsUtils {
const val demoClassName = "Sample"
diff --git a/plugins/ide-features-trainer/res/META-INF/plugin.xml b/plugins/ide-features-trainer/res/META-INF/plugin.xml
index 11fac38b0b5f..ac6eca526f7d 100644
--- a/plugins/ide-features-trainer/res/META-INF/plugin.xml
+++ b/plugins/ide-features-trainer/res/META-INF/plugin.xml
@@ -29,7 +29,7 @@
-
+
diff --git a/plugins/ide-features-trainer/src/training/actions/DumpFeaturesTrainerText.kt b/plugins/ide-features-trainer/src/training/actions/DumpFeaturesTrainerText.kt
index 90e73beb55d7..29e66ffec9ae 100644
--- a/plugins/ide-features-trainer/src/training/actions/DumpFeaturesTrainerText.kt
+++ b/plugins/ide-features-trainer/src/training/actions/DumpFeaturesTrainerText.kt
@@ -5,12 +5,12 @@ 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.dsl.LearningBalloonConfig
+import training.dsl.TaskContext
+import training.dsl.TaskRuntimeContext
+import training.dsl.impl.ApplyTaskLessonContext
import training.learn.CourseManager
-import training.learn.lesson.kimpl.ApplyTaskLessonContext
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LearningBalloonConfig
+import training.learn.course.KLesson
import java.awt.datatransfer.StringSelection
class DumpFeaturesTrainerText : AnAction() {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LearningBalloonConfig.kt b/plugins/ide-features-trainer/src/training/dsl/LearningBalloonConfig.kt
similarity index 93%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LearningBalloonConfig.kt
rename to plugins/ide-features-trainer/src/training/dsl/LearningBalloonConfig.kt
index 5c223754474d..64e534f4d196 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LearningBalloonConfig.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/LearningBalloonConfig.kt
@@ -1,5 +1,5 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+package training.dsl
import com.intellij.openapi.ui.popup.Balloon
import javax.swing.JComponent
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LearningDsl.kt b/plugins/ide-features-trainer/src/training/dsl/LearningDsl.kt
similarity index 54%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LearningDsl.kt
rename to plugins/ide-features-trainer/src/training/dsl/LearningDsl.kt
index 4317aa983a66..611908630ae1 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LearningDsl.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/LearningDsl.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl
@DslMarker
annotation class LearningDsl
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LearningDslBase.kt b/plugins/ide-features-trainer/src/training/dsl/LearningDslBase.kt
similarity index 91%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LearningDslBase.kt
rename to plugins/ide-features-trainer/src/training/dsl/LearningDslBase.kt
index 3e621b515101..913a672911bd 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LearningDslBase.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/LearningDslBase.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl
import com.intellij.openapi.util.text.StringUtil
import training.ui.LearningUiManager
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonContext.kt b/plugins/ide-features-trainer/src/training/dsl/LessonContext.kt
similarity index 92%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonContext.kt
rename to plugins/ide-features-trainer/src/training/dsl/LessonContext.kt
index d9a2c33d214b..6c7d19c991fb 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonContext.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/LessonContext.kt
@@ -1,13 +1,11 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl
import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.application.invokeLater
import com.intellij.util.concurrency.annotations.RequiresEdt
import org.intellij.lang.annotations.Language
import org.jetbrains.annotations.Nls
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
@LearningDsl
abstract class LessonContext: LearningDslBase {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonSample.kt b/plugins/ide-features-trainer/src/training/dsl/LessonSample.kt
similarity index 97%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonSample.kt
rename to plugins/ide-features-trainer/src/training/dsl/LessonSample.kt
index 9fe421b8ae22..ae1e5672b8e3 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonSample.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/LessonSample.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl
import com.intellij.openapi.editor.Editor
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonUtil.kt b/plugins/ide-features-trainer/src/training/dsl/LessonUtil.kt
similarity index 98%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonUtil.kt
rename to plugins/ide-features-trainer/src/training/dsl/LessonUtil.kt
index 98cf67a3252c..2167213850a7 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonUtil.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/LessonUtil.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl
import com.intellij.openapi.actionSystem.*
import com.intellij.openapi.actionSystem.impl.ActionButton
@@ -29,13 +29,12 @@ import com.intellij.util.ui.UIUtil
import com.intellij.xdebugger.XDebuggerManager
import org.fest.swing.timing.Timeout
import org.jetbrains.annotations.Nls
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.keymap.KeymapUtil
+import training.dsl.*
import training.learn.LearnBundle
import training.learn.LessonsBundle
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiUtil
+import training.util.KeymapUtil
import java.awt.Component
import java.awt.Rectangle
import java.awt.event.KeyEvent
diff --git a/plugins/ide-features-trainer/src/training/commands/kotlin/PreviousTaskInfo.kt b/plugins/ide-features-trainer/src/training/dsl/PreviousTaskInfo.kt
similarity index 70%
rename from plugins/ide-features-trainer/src/training/commands/kotlin/PreviousTaskInfo.kt
rename to plugins/ide-features-trainer/src/training/dsl/PreviousTaskInfo.kt
index f89f17df53d7..07f3a52180c4 100644
--- a/plugins/ide-features-trainer/src/training/commands/kotlin/PreviousTaskInfo.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/PreviousTaskInfo.kt
@@ -1,9 +1,8 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.commands.kotlin
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl
import com.intellij.openapi.editor.LogicalPosition
import com.intellij.openapi.vfs.VirtualFile
-import training.learn.lesson.kimpl.LessonSample
import java.awt.Component
interface PreviousTaskInfo {
diff --git a/plugins/ide-features-trainer/src/training/commands/kotlin/TaskContext.kt b/plugins/ide-features-trainer/src/training/dsl/TaskContext.kt
similarity index 98%
rename from plugins/ide-features-trainer/src/training/commands/kotlin/TaskContext.kt
rename to plugins/ide-features-trainer/src/training/dsl/TaskContext.kt
index b8123ed91343..2f216cc40a46 100644
--- a/plugins/ide-features-trainer/src/training/commands/kotlin/TaskContext.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/TaskContext.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.commands.kotlin
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.Project
@@ -9,7 +9,6 @@ import org.fest.swing.timing.Timeout
import org.intellij.lang.annotations.Language
import org.jetbrains.annotations.Nls
import training.learn.LearnBundle
-import training.learn.lesson.kimpl.*
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiUtil
import java.awt.Component
diff --git a/plugins/ide-features-trainer/src/training/commands/kotlin/TaskRuntimeContext.kt b/plugins/ide-features-trainer/src/training/dsl/TaskRuntimeContext.kt
similarity index 97%
rename from plugins/ide-features-trainer/src/training/commands/kotlin/TaskRuntimeContext.kt
rename to plugins/ide-features-trainer/src/training/dsl/TaskRuntimeContext.kt
index 4bda8d6550b3..1f0262d8d1b2 100644
--- a/plugins/ide-features-trainer/src/training/commands/kotlin/TaskRuntimeContext.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/TaskRuntimeContext.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.commands.kotlin
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ModalityState
@@ -19,8 +19,8 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.wm.IdeFocusManager
import com.intellij.psi.PsiDocumentManager
import com.intellij.util.DocumentUtil
+import training.dsl.impl.LessonExecutor
import training.learn.ActionsRecorder
-import training.learn.lesson.kimpl.*
import java.awt.Component
@LearningDsl
diff --git a/plugins/ide-features-trainer/src/training/commands/kotlin/TaskTestContext.kt b/plugins/ide-features-trainer/src/training/dsl/TaskTestContext.kt
similarity index 92%
rename from plugins/ide-features-trainer/src/training/commands/kotlin/TaskTestContext.kt
rename to plugins/ide-features-trainer/src/training/dsl/TaskTestContext.kt
index f3d6132251b8..bc943a7506b2 100644
--- a/plugins/ide-features-trainer/src/training/commands/kotlin/TaskTestContext.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/TaskTestContext.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.commands.kotlin
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.testGuiFramework.cellReader.ExtendedJListCellReader
@@ -15,7 +15,6 @@ import org.fest.swing.core.Robot
import org.fest.swing.fixture.ContainerFixture
import org.fest.swing.fixture.JListFixture
import org.fest.swing.timing.Timeout
-import training.learn.lesson.kimpl.LearningDsl
import training.util.invokeActionForFocusContext
import java.awt.Component
import java.awt.Container
@@ -72,7 +71,8 @@ class TaskTestContext(rt: TaskRuntimeContext): TaskRuntimeContext(rt) {
}
- class SimpleComponentFixture(robot: Robot, target: Component): ComponentFixture(SimpleComponentFixture::class.java, robot, target)
+ class SimpleComponentFixture(robot: Robot, target: Component): ComponentFixture(
+ SimpleComponentFixture::class.java, robot, target)
fun IdeFrameFixture.jComponent(target: Component): SimpleComponentFixture {
return SimpleComponentFixture(robot(), target)
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/ApplyTaskLessonContext.kt b/plugins/ide-features-trainer/src/training/dsl/impl/ApplyTaskLessonContext.kt
similarity index 78%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/ApplyTaskLessonContext.kt
rename to plugins/ide-features-trainer/src/training/dsl/impl/ApplyTaskLessonContext.kt
index dfa4ed88fb99..acf0df57a34d 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/ApplyTaskLessonContext.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/impl/ApplyTaskLessonContext.kt
@@ -1,7 +1,8 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+package training.dsl.impl
-import training.commands.kotlin.TaskContext
+import training.dsl.LessonContext
+import training.dsl.TaskContext
internal class ApplyTaskLessonContext(private val taskContext: TaskContext) : LessonContext() {
override fun task(taskContent: TaskContext.() -> Unit) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonContextImpl.kt b/plugins/ide-features-trainer/src/training/dsl/impl/LessonContextImpl.kt
similarity index 69%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonContextImpl.kt
rename to plugins/ide-features-trainer/src/training/dsl/impl/LessonContextImpl.kt
index 206652f2fab3..cbc1d2a62074 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonContextImpl.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/impl/LessonContextImpl.kt
@@ -1,7 +1,8 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl.impl
-import training.commands.kotlin.TaskContext
+import training.dsl.LessonContext
+import training.dsl.TaskContext
class LessonContextImpl(private val executor: LessonExecutor): LessonContext() {
override fun task(taskContent: TaskContext.() -> Unit) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonExecutor.kt b/plugins/ide-features-trainer/src/training/dsl/impl/LessonExecutor.kt
similarity index 98%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonExecutor.kt
rename to plugins/ide-features-trainer/src/training/dsl/impl/LessonExecutor.kt
index 07749d009f11..a7772b7c70c2 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonExecutor.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/impl/LessonExecutor.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl.impl
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
@@ -15,10 +15,9 @@ import com.intellij.openapi.util.Disposer
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.Alarm
import org.intellij.lang.annotations.Language
-import training.commands.kotlin.PreviousTaskInfo
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.*
import training.learn.ActionsRecorder
+import training.learn.course.KLesson
import training.learn.exceptons.NoTextEditor
import training.learn.lesson.LessonManager
import training.statistic.StatisticBase
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonExecutorUtil.kt b/plugins/ide-features-trainer/src/training/dsl/impl/LessonExecutorUtil.kt
similarity index 96%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonExecutorUtil.kt
rename to plugins/ide-features-trainer/src/training/dsl/impl/LessonExecutorUtil.kt
index afb49d0195f2..c261fa6ffc3b 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonExecutorUtil.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/impl/LessonExecutorUtil.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl.impl
import com.intellij.openapi.application.invokeLater
import com.intellij.openapi.project.Project
@@ -11,9 +11,10 @@ import com.intellij.openapi.ui.popup.LightweightWindowEvent
import com.intellij.ui.UIBundle
import com.intellij.ui.awt.RelativePoint
import com.intellij.util.Alarm
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.LearningBalloonConfig
+import training.dsl.TaskContext
+import training.dsl.TaskRuntimeContext
+import training.dsl.TaskTestContext
import training.learn.ActionsRecorder
import training.learn.LearnBundle
import training.learn.lesson.LessonManager
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/OpenPassedContext.kt b/plugins/ide-features-trainer/src/training/dsl/impl/OpenPassedContext.kt
similarity index 75%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/OpenPassedContext.kt
rename to plugins/ide-features-trainer/src/training/dsl/impl/OpenPassedContext.kt
index 85bfd103d40f..36984a623725 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/OpenPassedContext.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/impl/OpenPassedContext.kt
@@ -1,8 +1,10 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl.impl
import com.intellij.openapi.project.Project
-import training.commands.kotlin.TaskContext
+import training.dsl.LearningBalloonConfig
+import training.dsl.LessonContext
+import training.dsl.TaskContext
import training.learn.lesson.LessonManager
class OpenPassedContext(private val project: Project) : LessonContext() {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/TaskContextImpl.kt b/plugins/ide-features-trainer/src/training/dsl/impl/TaskContextImpl.kt
similarity index 97%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/TaskContextImpl.kt
rename to plugins/ide-features-trainer/src/training/dsl/impl/TaskContextImpl.kt
index c2a4ac7d208b..97ad8da47fb0 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/TaskContextImpl.kt
+++ b/plugins/ide-features-trainer/src/training/dsl/impl/TaskContextImpl.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.dsl.impl
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.ModalityState
@@ -17,9 +17,7 @@ import com.intellij.ui.EditorNotifications
import org.fest.swing.exception.ComponentLookupException
import org.fest.swing.exception.WaitTimedOutError
import org.intellij.lang.annotations.Language
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.*
import training.learn.ActionsRecorder
import training.learn.LearnBundle
import training.learn.lesson.LessonManager
diff --git a/plugins/ide-features-trainer/src/training/learn/ActionsRecorder.kt b/plugins/ide-features-trainer/src/training/learn/ActionsRecorder.kt
index a6e26649261d..3106e74a7511 100644
--- a/plugins/ide-features-trainer/src/training/learn/ActionsRecorder.kt
+++ b/plugins/ide-features-trainer/src/training/learn/ActionsRecorder.kt
@@ -21,7 +21,7 @@ import com.intellij.openapi.util.Disposer
import com.intellij.openapi.util.Pair
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiDocumentManager
-import training.commands.kotlin.TaskContext
+import training.dsl.TaskContext
import training.learn.exceptons.NoTextEditor
import training.learn.lesson.LessonManager
import training.ui.LearningUiManager
diff --git a/plugins/ide-features-trainer/src/training/learn/CourseManager.kt b/plugins/ide-features-trainer/src/training/learn/CourseManager.kt
index c78d9633e1e6..6c82735f6a81 100644
--- a/plugins/ide-features-trainer/src/training/learn/CourseManager.kt
+++ b/plugins/ide-features-trainer/src/training/learn/CourseManager.kt
@@ -10,8 +10,9 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.containers.ContainerUtil
import training.lang.LangManager
import training.lang.LangSupport
-import training.learn.interfaces.Lesson
-import training.learn.interfaces.Module
+import training.learn.course.LearningCourse
+import training.learn.course.Lesson
+import training.learn.course.Module
import training.learn.lesson.LessonManager
import training.ui.LearnToolWindowFactory
import training.util.WeakReferenceDelegator
diff --git a/plugins/ide-features-trainer/src/training/learn/OpenLessonActivities.kt b/plugins/ide-features-trainer/src/training/learn/OpenLessonActivities.kt
index c0fe9925f9ef..a48e29a6b977 100644
--- a/plugins/ide-features-trainer/src/training/learn/OpenLessonActivities.kt
+++ b/plugins/ide-features-trainer/src/training/learn/OpenLessonActivities.kt
@@ -24,17 +24,17 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.wm.ToolWindowManager
import com.intellij.util.Alarm
import com.intellij.util.concurrency.annotations.RequiresEdt
+import training.dsl.LessonUtil
+import training.dsl.impl.LessonContextImpl
+import training.dsl.impl.LessonExecutor
import training.lang.LangManager
import training.lang.LangSupport
-import training.learn.interfaces.Lesson
-import training.learn.interfaces.LessonType
+import training.learn.course.KLesson
+import training.learn.course.Lesson
+import training.learn.course.LessonType
import training.learn.lesson.LessonManager
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContextImpl
-import training.learn.lesson.kimpl.LessonExecutor
-import training.learn.lesson.kimpl.LessonUtil
-import training.learn.lesson.listeners.StatisticLessonListener
import training.project.ProjectUtils
+import training.statistic.StatisticLessonListener
import training.ui.LearnToolWindowFactory
import training.ui.LearningUiManager
import training.util.findLanguageByID
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/KLesson.kt b/plugins/ide-features-trainer/src/training/learn/course/KLesson.kt
similarity index 78%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/KLesson.kt
rename to plugins/ide-features-trainer/src/training/learn/course/KLesson.kt
index 2792f3a54115..0d2184257eac 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/KLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/course/KLesson.kt
@@ -1,11 +1,9 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.learn.course
import org.jetbrains.annotations.Nls
import org.jetbrains.annotations.NonNls
-import training.learn.interfaces.Lesson
-import training.learn.interfaces.LessonType
-import training.learn.interfaces.Module
+import training.dsl.LessonContext
import training.learn.lesson.LessonListener
import training.util.findLanguageByID
diff --git a/plugins/ide-features-trainer/src/training/learn/LearningCourse.kt b/plugins/ide-features-trainer/src/training/learn/course/LearningCourse.kt
similarity index 52%
rename from plugins/ide-features-trainer/src/training/learn/LearningCourse.kt
rename to plugins/ide-features-trainer/src/training/learn/course/LearningCourse.kt
index 1db63c5282f1..84fc324c4a99 100644
--- a/plugins/ide-features-trainer/src/training/learn/LearningCourse.kt
+++ b/plugins/ide-features-trainer/src/training/learn/course/LearningCourse.kt
@@ -1,6 +1,5 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn
-import training.learn.interfaces.Module
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.learn.course
interface LearningCourse {
fun modules() : Collection
diff --git a/plugins/ide-features-trainer/src/training/learn/course/LearningCourseBase.kt b/plugins/ide-features-trainer/src/training/learn/course/LearningCourseBase.kt
index d1260fbfb0ac..8f55a40be51e 100644
--- a/plugins/ide-features-trainer/src/training/learn/course/LearningCourseBase.kt
+++ b/plugins/ide-features-trainer/src/training/learn/course/LearningCourseBase.kt
@@ -1,11 +1,10 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.course
+import training.dsl.LessonSample
+import training.dsl.parseLessonSample
import training.lang.LangManager
import training.lang.LangSupport
-import training.learn.LearningCourse
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.parseLessonSample
import training.util.DataLoader
abstract class LearningCourseBase(val lang: String) : LearningCourse {
diff --git a/plugins/ide-features-trainer/src/training/learn/LearningModule.kt b/plugins/ide-features-trainer/src/training/learn/course/LearningModule.kt
similarity index 80%
rename from plugins/ide-features-trainer/src/training/learn/LearningModule.kt
rename to plugins/ide-features-trainer/src/training/learn/course/LearningModule.kt
index 74afda3fec9c..561fbdc632c8 100644
--- a/plugins/ide-features-trainer/src/training/learn/LearningModule.kt
+++ b/plugins/ide-features-trainer/src/training/learn/course/LearningModule.kt
@@ -1,10 +1,8 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.learn.course
import org.jetbrains.annotations.Nls
import training.lang.LangSupport
-import training.learn.interfaces.LessonType
-import training.learn.lesson.kimpl.KLesson
class LearningModule(@Nls name: String,
@Nls description: String,
diff --git a/plugins/ide-features-trainer/src/training/learn/LearningModuleBase.kt b/plugins/ide-features-trainer/src/training/learn/course/LearningModuleBase.kt
similarity index 80%
rename from plugins/ide-features-trainer/src/training/learn/LearningModuleBase.kt
rename to plugins/ide-features-trainer/src/training/learn/course/LearningModuleBase.kt
index e0485205b69e..7a31e655f2c5 100644
--- a/plugins/ide-features-trainer/src/training/learn/LearningModuleBase.kt
+++ b/plugins/ide-features-trainer/src/training/learn/course/LearningModuleBase.kt
@@ -1,12 +1,8 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.learn.course
import org.jetbrains.annotations.Nls
import training.lang.LangSupport
-import training.learn.interfaces.Lesson
-import training.learn.interfaces.LessonType
-import training.learn.interfaces.Module
-import training.learn.lesson.kimpl.KLesson
abstract class LearningModuleBase(@Nls override val name: String,
@Nls override val description: String,
diff --git a/plugins/ide-features-trainer/src/training/learn/interfaces/Lesson.kt b/plugins/ide-features-trainer/src/training/learn/course/Lesson.kt
similarity index 89%
rename from plugins/ide-features-trainer/src/training/learn/interfaces/Lesson.kt
rename to plugins/ide-features-trainer/src/training/learn/course/Lesson.kt
index 13b62a80c7df..dd65e6d205f5 100644
--- a/plugins/ide-features-trainer/src/training/learn/interfaces/Lesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/course/Lesson.kt
@@ -1,15 +1,14 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.interfaces
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.learn.course
import com.intellij.openapi.project.Project
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import org.jetbrains.annotations.Nls
import org.jetbrains.annotations.NonNls
-import training.commands.kotlin.TaskTestContext
+import training.dsl.TaskTestContext
import training.learn.lesson.LessonListener
import training.learn.lesson.LessonState
import training.learn.lesson.LessonStateManager
-import training.learn.lesson.kimpl.LessonProperties
interface Lesson {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonProperties.kt b/plugins/ide-features-trainer/src/training/learn/course/LessonProperties.kt
similarity index 89%
rename from plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonProperties.kt
rename to plugins/ide-features-trainer/src/training/learn/course/LessonProperties.kt
index a2ced6683db3..16d938d84c0d 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/kimpl/LessonProperties.kt
+++ b/plugins/ide-features-trainer/src/training/learn/course/LessonProperties.kt
@@ -1,5 +1,5 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.kimpl
+package training.learn.course
data class LessonProperties(
val canStartInDumbMode: Boolean = false,
diff --git a/plugins/ide-features-trainer/src/training/learn/interfaces/LessonType.kt b/plugins/ide-features-trainer/src/training/learn/course/LessonType.kt
similarity index 89%
rename from plugins/ide-features-trainer/src/training/learn/interfaces/LessonType.kt
rename to plugins/ide-features-trainer/src/training/learn/course/LessonType.kt
index 55852d3f9b60..452f7455d0f2 100644
--- a/plugins/ide-features-trainer/src/training/learn/interfaces/LessonType.kt
+++ b/plugins/ide-features-trainer/src/training/learn/course/LessonType.kt
@@ -1,5 +1,5 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.interfaces
+package training.learn.course
enum class LessonType(val isProject: Boolean, val isSingleEditor: Boolean) {
SCRATCH(false, true), SINGLE_EDITOR(true, true), PROJECT(true, false)
diff --git a/plugins/ide-features-trainer/src/training/learn/interfaces/Module.kt b/plugins/ide-features-trainer/src/training/learn/course/Module.kt
similarity index 88%
rename from plugins/ide-features-trainer/src/training/learn/interfaces/Module.kt
rename to plugins/ide-features-trainer/src/training/learn/course/Module.kt
index 3280964788e2..bb3db356fa5b 100644
--- a/plugins/ide-features-trainer/src/training/learn/interfaces/Module.kt
+++ b/plugins/ide-features-trainer/src/training/learn/course/Module.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.interfaces
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.learn.course
import com.intellij.openapi.util.NlsSafe
import org.jetbrains.annotations.Nls
diff --git a/plugins/ide-features-trainer/src/training/learn/js/JSCommonLessonUtils.kt b/plugins/ide-features-trainer/src/training/learn/js/JSCommonLessonUtils.kt
index 8e70ef69a616..d818727f95f1 100644
--- a/plugins/ide-features-trainer/src/training/learn/js/JSCommonLessonUtils.kt
+++ b/plugins/ide-features-trainer/src/training/learn/js/JSCommonLessonUtils.kt
@@ -5,7 +5,7 @@ import com.intellij.openapi.util.SystemInfo
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiElement
import com.intellij.ui.components.fields.ExtendableTextField
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.TaskRuntimeContext
fun TaskRuntimeContext.textBeforeCaret(text: String): Boolean {
val offset = editor.caretModel.offset
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/LessonListener.kt b/plugins/ide-features-trainer/src/training/learn/lesson/LessonListener.kt
index 82c6cdd3235f..da5112130b88 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/LessonListener.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/LessonListener.kt
@@ -1,7 +1,7 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.lesson
-import training.learn.interfaces.Lesson
+import training.learn.course.Lesson
import java.util.*
interface LessonListener : EventListener {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/LessonManager.kt b/plugins/ide-features-trainer/src/training/learn/lesson/LessonManager.kt
index df6d13555ca1..21a9c74a13a9 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/LessonManager.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/LessonManager.kt
@@ -12,11 +12,11 @@ import com.intellij.openapi.keymap.Keymap
import com.intellij.openapi.keymap.KeymapManagerListener
import com.intellij.openapi.project.Project
import org.intellij.lang.annotations.Language
-import training.commands.kotlin.TaskContext
-import training.learn.interfaces.Lesson
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonExecutor
-import training.learn.lesson.kimpl.OpenPassedContext
+import training.dsl.TaskContext
+import training.dsl.impl.LessonExecutor
+import training.dsl.impl.OpenPassedContext
+import training.learn.course.KLesson
+import training.learn.course.Lesson
import training.ui.*
import training.ui.views.LearnPanel
import training.util.createNamedSingleThreadExecutor
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/LessonStateBase.kt b/plugins/ide-features-trainer/src/training/learn/lesson/LessonStateBase.kt
index eec979f5348a..fdc92ee63c52 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/LessonStateBase.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/LessonStateBase.kt
@@ -5,7 +5,7 @@ import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.PersistentStateComponent
import com.intellij.openapi.components.State
import com.intellij.openapi.components.Storage
-import training.learn.interfaces.Lesson
+import training.learn.course.Lesson
import training.util.trainerPluginConfigName
@State(name = "LessonStateBase", storages = [Storage(value = trainerPluginConfigName)])
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/Scenario.kt b/plugins/ide-features-trainer/src/training/learn/lesson/Scenario.kt
deleted file mode 100644
index 1519583a1af1..000000000000
--- a/plugins/ide-features-trainer/src/training/learn/lesson/Scenario.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson
-
-import org.jdom.Element
-import training.util.DataLoader
-
-class Scenario(private val path: String, classLoader: ClassLoader) {
-
- val root: Element = DataLoader.getXmlRootElement(path, classLoader)
-
- val lang: String
- get() {
- val lang = root.getAttribute(LANG)
- if (lang != null) return lang.value else throw Exception("Cannot get '$LANG' property for the lesson file with path: $path")
- }
-
- val name: String
- get() = root.getAttribute(NAME)!!.value
-
- /**
- * It is a unique String attribute to distinguish different lessons with a probably similar names
- */
- val id: String
- get() = root.getAttribute(ID)!!.value
-
- val file: String?
- get() = root.getAttribute(FILE)?.value
-
- companion object {
- private const val LANG = "lang"
- private const val NAME = "name"
- private const val ID = "id"
- private const val FILE = "file"
- }
-
-}
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/CollapseLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/CollapseLesson.kt
index 9e9a5a9099c9..bc221a2217f7 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/CollapseLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/CollapseLesson.kt
@@ -1,10 +1,10 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.lesson.general
+import training.dsl.LessonContext
+import training.dsl.LessonSample
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
+import training.learn.course.KLesson
class CollapseLesson(lang: String, private val sample: LessonSample)
: KLesson("Collapse", LessonsBundle.message("collapse.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/CompletionWithTabLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/CompletionWithTabLesson.kt
index dfc1bed21c4f..db8c497dc739 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/CompletionWithTabLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/CompletionWithTabLesson.kt
@@ -1,11 +1,11 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.lesson.general
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
abstract class CompletionWithTabLesson(lang: String, private val proposal: String) :
KLesson("Completion with tab", LessonsBundle.message("completion.with.tab.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/ContextActionsLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/ContextActionsLesson.kt
index 532f1959d72d..e1f50cd78ed5 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/ContextActionsLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/ContextActionsLesson.kt
@@ -3,11 +3,10 @@ package training.learn.lesson.general
import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler
import com.intellij.openapi.editor.impl.EditorComponentImpl
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.*
+import training.dsl.LessonUtil.restoreIfModifiedOrMovedIncorrectly
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMovedIncorrectly
+import training.learn.course.KLesson
abstract class ContextActionsLesson(lang: String) :
KLesson("context.actions", LessonsBundle.message("context.actions.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/DuplicateLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/DuplicateLesson.kt
index a9bbf869d671..9f9d2ed775c5 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/DuplicateLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/DuplicateLesson.kt
@@ -1,10 +1,10 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.lesson.general
+import training.dsl.LessonContext
+import training.dsl.LessonSample
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
+import training.learn.course.KLesson
class DuplicateLesson(lang: String, private val sample: LessonSample) :
KLesson("Duplicate", LessonsBundle.message("duplicate.and.delete.lines.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/GotoActionLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/GotoActionLesson.kt
index 9d304ea0008e..6fed5a464157 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/GotoActionLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/GotoActionLesson.kt
@@ -13,11 +13,10 @@ import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.impl.jList
import com.intellij.testGuiFramework.util.Key
import com.intellij.util.ui.UIUtil
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.*
import training.learn.LearnBundle
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
+import training.learn.course.KLesson
import java.awt.event.KeyEvent
import javax.swing.JPanel
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/MoveLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/MoveLesson.kt
index 655cb0d606dd..3710f9cca04f 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/MoveLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/MoveLesson.kt
@@ -1,11 +1,11 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.lesson.general
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
class MoveLesson(lang: String, private val caretText: String, private val sample: LessonSample)
: KLesson("Move", LessonsBundle.message("move.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/MultipleSelectionHtmlLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/MultipleSelectionHtmlLesson.kt
index d5685cf0209b..1395fa69f9d2 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/MultipleSelectionHtmlLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/MultipleSelectionHtmlLesson.kt
@@ -4,12 +4,12 @@ package training.learn.lesson.general
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.html.HtmlTag
import com.intellij.psi.util.PsiTreeUtil
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.LessonContext
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.TaskRuntimeContext
+import training.dsl.parseLessonSample
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.parseLessonSample
+import training.learn.course.KLesson
class MultipleSelectionHtmlLesson
: KLesson("Multiple selections", LessonsBundle.message("multiple.selections.lesson.name"), "HTML") {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/NewSelectLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/NewSelectLesson.kt
index 498738fdd173..e0f3882f73b6 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/NewSelectLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/NewSelectLesson.kt
@@ -1,11 +1,13 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.lesson.general
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.LessonUtil.checkPositionOfEditor
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.TaskRuntimeContext
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.checkPositionOfEditor
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
abstract class NewSelectLesson(lang: String) :
KLesson("Select", LessonsBundle.message("selection.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/SelectLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/SelectLesson.kt
index 98fac1589f78..d3140752d2c7 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/SelectLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/SelectLesson.kt
@@ -1,10 +1,10 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.lesson.general
+import training.dsl.LessonContext
+import training.dsl.LessonSample
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
+import training.learn.course.KLesson
class SelectLesson(lang: String, private val sample: LessonSample) :
KLesson("Select", LessonsBundle.message("selection.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/SingleLineCommentLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/SingleLineCommentLesson.kt
index 504341395701..304208eabe8f 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/SingleLineCommentLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/SingleLineCommentLesson.kt
@@ -4,11 +4,11 @@ package training.learn.lesson.general
import com.intellij.psi.PsiComment
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiElement
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.TaskRuntimeContext
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
+import training.learn.course.KLesson
class SingleLineCommentLesson(lang: String, private val sample: LessonSample)
: KLesson("Comment line", LessonsBundle.message("comment.line.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/SurroundAndUnwrapLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/SurroundAndUnwrapLesson.kt
index 8505676852e8..9cedda9aff96 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/SurroundAndUnwrapLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/SurroundAndUnwrapLesson.kt
@@ -1,15 +1,11 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.lesson.general
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.*
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
import training.learn.LearnBundle
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
-import training.learn.lesson.kimpl.restoreAfterStateBecomeFalse
+import training.learn.course.KLesson
abstract class SurroundAndUnwrapLesson(lang: String)
: KLesson("Surround and unwrap", LessonsBundle.message("surround.and.unwrap.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/CodeFormatLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/CodeFormatLesson.kt
index 67d693563565..e7b7c38b75ce 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/CodeFormatLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/CodeFormatLesson.kt
@@ -5,12 +5,12 @@ import com.intellij.codeInsight.CodeInsightBundle
import com.intellij.ide.util.PropertiesComponent
import com.intellij.openapi.editor.impl.EditorComponentImpl
import com.intellij.testGuiFramework.impl.button
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.restoreAfterStateBecomeFalse
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.restoreAfterStateBecomeFalse
+import training.learn.course.KLesson
class CodeFormatLesson(override val lang: String, private val sample: LessonSample, private val optimizeImports: Boolean) :
KLesson("CodeAssistance.CodeFormatting", LessonsBundle.message("code.format.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/EditorCodingAssistanceLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/EditorCodingAssistanceLesson.kt
index 89a4a81da3d2..9add94ca5f2c 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/EditorCodingAssistanceLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/EditorCodingAssistanceLesson.kt
@@ -7,14 +7,10 @@ import com.intellij.testGuiFramework.impl.jList
import com.intellij.testGuiFramework.util.Key
import com.intellij.testGuiFramework.util.Modifier
import com.intellij.testGuiFramework.util.Shortcut
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.*
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
import training.util.PerformActionUtil
import javax.swing.JEditorPane
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/ParameterInfoLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/ParameterInfoLesson.kt
index c6639094b9bb..ae718ea6af4b 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/ParameterInfoLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/ParameterInfoLesson.kt
@@ -1,12 +1,12 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.lesson.general.assistance
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.TaskRuntimeContext
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
import kotlin.math.min
class ParameterInfoLesson(lang: String, private val sample: LessonSample) :
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/QuickPopupsLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/QuickPopupsLesson.kt
index 822f269d9d5b..d18672bacb65 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/QuickPopupsLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/QuickPopupsLesson.kt
@@ -6,12 +6,12 @@ import com.intellij.codeInsight.documentation.QuickDocUtil
import com.intellij.codeInsight.hint.ImplementationViewComponent
import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.util.Key
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.TaskRuntimeContext
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
class QuickPopupsLesson(lang: String, private val sample: LessonSample) :
KLesson("CodeAssistance.QuickPopups", LessonsBundle.message("quick.popups.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/completion/BasicCompletionLessonBase.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/completion/BasicCompletionLessonBase.kt
index a800bb9e03d7..1c5b9206b9d2 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/completion/BasicCompletionLessonBase.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/completion/BasicCompletionLessonBase.kt
@@ -3,9 +3,13 @@ package training.learn.lesson.general.completion
import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.util.Key
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.LessonUtil
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.restoreAfterStateBecomeFalse
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
+import training.learn.course.KLesson
import javax.swing.JList
abstract class BasicCompletionLessonBase(lang: String)
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/DeclarationAndUsagesLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/DeclarationAndUsagesLesson.kt
index 09e6714ca270..cc5a8953ba9a 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/DeclarationAndUsagesLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/DeclarationAndUsagesLesson.kt
@@ -12,14 +12,14 @@ import com.intellij.testGuiFramework.framework.GuiTestUtil.shortcut
import com.intellij.testGuiFramework.util.Key
import com.intellij.ui.UIBundle
import com.intellij.ui.table.JBTable
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.LessonContext
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.TaskRuntimeContext
+import training.dsl.checkToolWindowState
+import training.dsl.closeAllFindTabs
import training.learn.LearnBundle
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.checkToolWindowState
-import training.learn.lesson.kimpl.closeAllFindTabs
+import training.learn.course.KLesson
abstract class DeclarationAndUsagesLesson(lang: String)
: KLesson("Declaration and usages", LessonsBundle.message("declaration.and.usages.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/FileStructureLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/FileStructureLesson.kt
index 3c48d59cfa2b..096a3f77dbb5 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/FileStructureLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/FileStructureLesson.kt
@@ -7,13 +7,13 @@ import com.intellij.openapi.editor.impl.EditorComponentImpl
import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.util.Key
import com.intellij.ui.speedSearch.SpeedSearchSupply
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.LessonContext
+import training.dsl.LessonUtil
+import training.dsl.TaskRuntimeContext
+import training.dsl.restoreAfterStateBecomeFalse
import training.learn.LessonsBundle
-import training.learn.interfaces.LessonType
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil
-import training.learn.lesson.kimpl.restoreAfterStateBecomeFalse
+import training.learn.course.KLesson
+import training.learn.course.LessonType
abstract class FileStructureLesson(lang: String)
: KLesson("File structure", LessonsBundle.message("file.structure.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/FindInFilesLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/FindInFilesLesson.kt
index 415ef0a0f1a3..40ce47cd0820 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/FindInFilesLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/FindInFilesLesson.kt
@@ -20,11 +20,9 @@ import com.intellij.util.ui.UIUtil
import org.fest.swing.core.MouseClickInfo
import org.fest.swing.data.TableCell
import org.fest.swing.fixture.JTextComponentFixture
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.*
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
+import training.learn.course.KLesson
import java.awt.event.InputEvent
import java.awt.event.KeyEvent
import javax.swing.*
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/RecentFilesLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/RecentFilesLesson.kt
index 1efd2489bc2c..d17564ab2601 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/RecentFilesLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/RecentFilesLesson.kt
@@ -15,17 +15,12 @@ import com.intellij.ui.components.JBList
import com.intellij.ui.speedSearch.SpeedSearchSupply
import com.intellij.util.ui.UIUtil
import icons.FeaturesTrainerIcons
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.*
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
import training.learn.LearnBundle
import training.learn.LessonsBundle
+import training.learn.course.KLesson
import training.learn.lesson.LessonManager
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
-import training.learn.lesson.kimpl.defaultRestoreDelay
import java.awt.event.KeyEvent
import javax.swing.JComponent
import javax.swing.JLabel
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/SearchEverywhereLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/SearchEverywhereLesson.kt
index 309382d3c407..becfae38e8b8 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/SearchEverywhereLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/navigation/SearchEverywhereLesson.kt
@@ -14,14 +14,10 @@ import com.intellij.testGuiFramework.util.Modifier
import com.intellij.testGuiFramework.util.Shortcut
import com.intellij.ui.components.fields.ExtendableTextField
import com.intellij.util.ui.UIUtil
-import training.commands.kotlin.TaskRuntimeContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.*
import training.learn.LessonsBundle
-import training.learn.interfaces.LessonType
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil
-import training.learn.lesson.kimpl.restoreAfterStateBecomeFalse
+import training.learn.course.KLesson
+import training.learn.course.LessonType
import java.awt.event.KeyEvent
import javax.swing.JList
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/ExtractMethodCocktailSortLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/ExtractMethodCocktailSortLesson.kt
index 70b761fa2871..42c39b0b1d6a 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/ExtractMethodCocktailSortLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/ExtractMethodCocktailSortLesson.kt
@@ -5,11 +5,10 @@ import com.intellij.CommonBundle
import com.intellij.refactoring.RefactoringBundle
import com.intellij.testGuiFramework.impl.button
import com.intellij.ui.UIBundle
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.*
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
import javax.swing.JButton
import javax.swing.JDialog
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/ExtractVariableFromBubleLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/ExtractVariableFromBubleLesson.kt
index e807f9ac6626..8b9a1690abf5 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/ExtractVariableFromBubleLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/ExtractVariableFromBubleLesson.kt
@@ -3,9 +3,13 @@ package training.learn.lesson.general.refactorings
import com.intellij.testGuiFramework.impl.jList
import com.intellij.ui.components.JBList
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.LessonUtil
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
+import training.dsl.restoreAfterStateBecomeFalse
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
class ExtractVariableFromBubbleLesson(lang: String, private val sample: LessonSample)
: KLesson("Extract variable", LessonsBundle.message("extract.variable.lesson.name"), lang) {
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/RefactoringMenuLessonBase.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/RefactoringMenuLessonBase.kt
index dda444a3aedd..59ccb9ac7058 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/RefactoringMenuLessonBase.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/refactorings/RefactoringMenuLessonBase.kt
@@ -6,11 +6,10 @@ import com.intellij.refactoring.rename.inplace.InplaceRefactoring
import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.util.Key
import com.intellij.ui.components.JBList
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.*
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
+import training.learn.course.KLesson
import javax.swing.JList
abstract class RefactoringMenuLessonBase(lessonId: String, languageId: String)
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/run/CommonDebugLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/run/CommonDebugLesson.kt
index 648fc7ed932d..2a82c95e4f27 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/run/CommonDebugLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/run/CommonDebugLesson.kt
@@ -29,20 +29,18 @@ import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil
import com.intellij.xdebugger.impl.frame.XDebuggerFramesList
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree
import org.jetbrains.annotations.Nls
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.commands.kotlin.TaskTestContext
-import training.keymap.KeymapUtil
+import training.dsl.*
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.LessonUtil.checkPositionOfEditor
+import training.dsl.LessonUtil.highlightBreakpointGutter
+import training.dsl.LessonUtil.sampleRestoreNotification
import training.learn.CourseManager
import training.learn.LessonsBundle
+import training.learn.course.KLesson
import training.learn.lesson.LessonManager
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
-import training.learn.lesson.kimpl.LessonUtil.checkPositionOfEditor
-import training.learn.lesson.kimpl.LessonUtil.highlightBreakpointGutter
-import training.learn.lesson.kimpl.LessonUtil.sampleRestoreNotification
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiManager
+import training.util.KeymapUtil
import training.util.WeakReferenceDelegator
import training.util.invokeActionForFocusContext
import java.awt.Rectangle
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/run/CommonRunConfigurationLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/run/CommonRunConfigurationLesson.kt
index 862bc7ee86e4..48809d7f2602 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/general/run/CommonRunConfigurationLesson.kt
+++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/run/CommonRunConfigurationLesson.kt
@@ -9,11 +9,9 @@ import com.intellij.testGuiFramework.impl.button
import com.intellij.testGuiFramework.impl.jList
import com.intellij.ui.UIBundle
import com.intellij.ui.components.JBCheckBox
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.*
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.*
+import training.learn.course.KLesson
import training.ui.LearningUiHighlightingManager
import java.util.concurrent.CompletableFuture
import javax.swing.JButton
diff --git a/plugins/ide-features-trainer/src/training/learn/log/LessonLog.kt b/plugins/ide-features-trainer/src/training/learn/log/LessonLog.kt
index f04f84a00cad..1baa6b7282f9 100644
--- a/plugins/ide-features-trainer/src/training/learn/log/LessonLog.kt
+++ b/plugins/ide-features-trainer/src/training/learn/log/LessonLog.kt
@@ -1,7 +1,7 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.learn.log
-import training.learn.interfaces.Lesson
+import training.learn.course.Lesson
import java.util.*
class LessonLog(lesson: Lesson) {
diff --git a/plugins/ide-features-trainer/src/training/project/ReadMeCreator.kt b/plugins/ide-features-trainer/src/training/project/ReadMeCreator.kt
index 5aeafb671598..56b63138aabb 100644
--- a/plugins/ide-features-trainer/src/training/project/ReadMeCreator.kt
+++ b/plugins/ide-features-trainer/src/training/project/ReadMeCreator.kt
@@ -2,10 +2,10 @@
package training.project
import com.intellij.idea.ActionsBundle
+import training.dsl.LessonUtil
+import training.dsl.dropMnemonic
import training.learn.LearnBundle
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.LessonUtil
-import training.learn.lesson.kimpl.dropMnemonic
open class ReadMeCreator {
private val learnName get() = LearnBundle.message("toolwindow.stripe.Learn")
diff --git a/plugins/ide-features-trainer/src/training/statistic/StatisticBase.kt b/plugins/ide-features-trainer/src/training/statistic/StatisticBase.kt
index d9aeb263e3f7..00eb584ac560 100644
--- a/plugins/ide-features-trainer/src/training/statistic/StatisticBase.kt
+++ b/plugins/ide-features-trainer/src/training/statistic/StatisticBase.kt
@@ -10,11 +10,10 @@ import com.intellij.openapi.keymap.Keymap
import com.intellij.openapi.keymap.KeymapManager
import com.intellij.openapi.keymap.impl.DefaultKeymapImpl
import com.intellij.util.TimeoutUtil
-import training.keymap.KeymapUtil
import training.lang.LangManager
import training.learn.CourseManager
-import training.learn.interfaces.Lesson
-import training.learn.interfaces.Module
+import training.learn.course.Lesson
+import training.learn.course.Module
import training.learn.lesson.LessonManager
import training.statistic.FeatureUsageStatisticConsts.ACTION_ID
import training.statistic.FeatureUsageStatisticConsts.COMPLETED_COUNT
@@ -32,6 +31,7 @@ import training.statistic.FeatureUsageStatisticConsts.SHORTCUT_CLICKED
import training.statistic.FeatureUsageStatisticConsts.START
import training.statistic.FeatureUsageStatisticConsts.START_MODULE_ACTION
import training.statistic.FeatureUsageStatisticConsts.TASK_ID
+import training.util.KeymapUtil
import java.awt.event.KeyEvent
import java.util.concurrent.ConcurrentHashMap
import javax.swing.JOptionPane
diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/listeners/StatisticLessonListener.kt b/plugins/ide-features-trainer/src/training/statistic/StatisticLessonListener.kt
similarity index 69%
rename from plugins/ide-features-trainer/src/training/learn/lesson/listeners/StatisticLessonListener.kt
rename to plugins/ide-features-trainer/src/training/statistic/StatisticLessonListener.kt
index b257b6cb2e13..c912b6be8e56 100644
--- a/plugins/ide-features-trainer/src/training/learn/lesson/listeners/StatisticLessonListener.kt
+++ b/plugins/ide-features-trainer/src/training/statistic/StatisticLessonListener.kt
@@ -1,10 +1,9 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.learn.lesson.listeners
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.statistic
import com.intellij.openapi.project.Project
-import training.learn.interfaces.Lesson
+import training.learn.course.Lesson
import training.learn.lesson.LessonListener
-import training.statistic.StatisticBase
class StatisticLessonListener(val project: Project) : LessonListener {
diff --git a/plugins/ide-features-trainer/src/training/ui/ActionKeyPopup.kt b/plugins/ide-features-trainer/src/training/ui/ActionKeyPopup.kt
index e1079dd16f2d..240caef9eace 100644
--- a/plugins/ide-features-trainer/src/training/ui/ActionKeyPopup.kt
+++ b/plugins/ide-features-trainer/src/training/ui/ActionKeyPopup.kt
@@ -15,9 +15,9 @@ import com.intellij.ui.awt.RelativePoint
import com.intellij.ui.components.labels.LinkLabel
import com.intellij.util.ui.JBUI
import com.intellij.util.ui.UIUtil
-import training.keymap.KeymapUtil
import training.learn.LearnBundle
import training.statistic.StatisticBase
+import training.util.KeymapUtil
import training.util.invokeActionForFocusContext
import java.awt.Component
import java.awt.Insets
diff --git a/plugins/ide-features-trainer/src/training/ui/MessageFactory.kt b/plugins/ide-features-trainer/src/training/ui/MessageFactory.kt
index c657b26d4f9b..9b9c4f05e204 100644
--- a/plugins/ide-features-trainer/src/training/ui/MessageFactory.kt
+++ b/plugins/ide-features-trainer/src/training/ui/MessageFactory.kt
@@ -11,8 +11,8 @@ import org.jdom.Element
import org.jdom.Text
import org.jdom.input.SAXBuilder
import org.jdom.output.XMLOutputter
-import training.keymap.KeymapUtil
import training.learn.CourseManager
+import training.util.KeymapUtil
import training.util.openLinkInBrowser
object MessageFactory {
diff --git a/plugins/ide-features-trainer/src/training/ui/views/LearnPanel.kt b/plugins/ide-features-trainer/src/training/ui/views/LearnPanel.kt
index 491cb2cb9bfc..7836f259b694 100644
--- a/plugins/ide-features-trainer/src/training/ui/views/LearnPanel.kt
+++ b/plugins/ide-features-trainer/src/training/ui/views/LearnPanel.kt
@@ -14,7 +14,7 @@ import org.intellij.lang.annotations.Language
import org.jetbrains.annotations.Nls
import training.learn.CourseManager
import training.learn.LearnBundle
-import training.learn.interfaces.Lesson
+import training.learn.course.Lesson
import training.learn.lesson.LessonManager
import training.ui.*
import training.util.getNextLessonForCurrent
diff --git a/plugins/ide-features-trainer/src/training/ui/views/LearningItems.kt b/plugins/ide-features-trainer/src/training/ui/views/LearningItems.kt
index 164e715b2208..f92a3f27c197 100644
--- a/plugins/ide-features-trainer/src/training/ui/views/LearningItems.kt
+++ b/plugins/ide-features-trainer/src/training/ui/views/LearningItems.kt
@@ -15,8 +15,8 @@ import icons.FeaturesTrainerIcons
import org.jetbrains.annotations.NotNull
import training.learn.CourseManager
import training.learn.LearnBundle
-import training.learn.interfaces.Lesson
-import training.learn.interfaces.Module
+import training.learn.course.Lesson
+import training.learn.course.Module
import training.learn.lesson.LessonManager
import training.ui.UISettings
import training.util.createBalloon
diff --git a/plugins/ide-features-trainer/src/training/ui/welcomeScreen/IFTInteractiveCourse.kt b/plugins/ide-features-trainer/src/training/ui/welcomeScreen/IFTInteractiveCourse.kt
index 91c3b52b5c99..8aaeb81df909 100644
--- a/plugins/ide-features-trainer/src/training/ui/welcomeScreen/IFTInteractiveCourse.kt
+++ b/plugins/ide-features-trainer/src/training/ui/welcomeScreen/IFTInteractiveCourse.kt
@@ -16,7 +16,7 @@ import com.intellij.ui.scale.JBUIScale
import icons.FeaturesTrainerIcons.Img.PluginIcon
import training.learn.CourseManager
import training.learn.LearnBundle
-import training.learn.interfaces.Module
+import training.learn.course.Module
import training.statistic.StatisticBase
import training.util.rigid
import java.awt.event.ActionEvent
diff --git a/plugins/ide-features-trainer/src/training/keymap/KeymapUtil.kt b/plugins/ide-features-trainer/src/training/util/KeymapUtil.kt
similarity index 98%
rename from plugins/ide-features-trainer/src/training/keymap/KeymapUtil.kt
rename to plugins/ide-features-trainer/src/training/util/KeymapUtil.kt
index d09741fbb5f8..0ff381b824ba 100644
--- a/plugins/ide-features-trainer/src/training/keymap/KeymapUtil.kt
+++ b/plugins/ide-features-trainer/src/training/util/KeymapUtil.kt
@@ -1,5 +1,5 @@
-// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package training.keymap
+// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package training.util
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.KeyboardShortcut
diff --git a/plugins/ide-features-trainer/src/training/util/LearningLessonsAutoExecutor.kt b/plugins/ide-features-trainer/src/training/util/LearningLessonsAutoExecutor.kt
index 4407e597c546..8c2369cf8296 100644
--- a/plugins/ide-features-trainer/src/training/util/LearningLessonsAutoExecutor.kt
+++ b/plugins/ide-features-trainer/src/training/util/LearningLessonsAutoExecutor.kt
@@ -7,11 +7,11 @@ import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.runBackgroundableTask
import com.intellij.openapi.project.Project
import org.jetbrains.concurrency.AsyncPromise
-import training.commands.kotlin.TaskTestContext
+import training.dsl.TaskTestContext
import training.learn.CourseManager
-import training.learn.interfaces.Lesson
+import training.learn.course.KLesson
+import training.learn.course.Lesson
import training.learn.lesson.LessonListener
-import training.learn.lesson.kimpl.KLesson
import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeoutException
diff --git a/plugins/ide-features-trainer/src/training/util/Utils.kt b/plugins/ide-features-trainer/src/training/util/Utils.kt
index 53bdabd8031f..7eb652a5bb04 100644
--- a/plugins/ide-features-trainer/src/training/util/Utils.kt
+++ b/plugins/ide-features-trainer/src/training/util/Utils.kt
@@ -25,7 +25,7 @@ import training.lang.LangManager
import training.lang.LangSupport
import training.learn.CourseManager
import training.learn.LearnBundle
-import training.learn.interfaces.Lesson
+import training.learn.course.Lesson
import training.learn.lesson.LessonManager
import training.learn.lesson.LessonStateManager
import training.ui.LearnToolWindowFactory
diff --git a/plugins/ide-features-trainer/testSrc/training/simple/DecryptMacShortcutTest.kt b/plugins/ide-features-trainer/testSrc/training/simple/DecryptMacShortcutTest.kt
index 32f51dbfa4bd..89ff224c8ba2 100644
--- a/plugins/ide-features-trainer/testSrc/training/simple/DecryptMacShortcutTest.kt
+++ b/plugins/ide-features-trainer/testSrc/training/simple/DecryptMacShortcutTest.kt
@@ -3,7 +3,7 @@ package training.simple
import com.intellij.testFramework.UsefulTestCase
import junit.framework.TestCase
-import training.keymap.KeymapUtil
+import training.util.KeymapUtil
class DecryptMacShortcutTest : UsefulTestCase() {
fun testSimpleKey() {
diff --git a/plugins/ide-features-trainer/testSrc/training/simple/SampleParserTest.kt b/plugins/ide-features-trainer/testSrc/training/simple/SampleParserTest.kt
index b2b4475662af..56cc368a72ec 100644
--- a/plugins/ide-features-trainer/testSrc/training/simple/SampleParserTest.kt
+++ b/plugins/ide-features-trainer/testSrc/training/simple/SampleParserTest.kt
@@ -5,7 +5,7 @@ package training.simple
import com.intellij.testFramework.UsefulTestCase
import junit.framework.TestCase
-import training.learn.lesson.kimpl.parseLessonSample
+import training.dsl.parseLessonSample
class SampleParserTest : UsefulTestCase() {
fun testStartCaretTag1() {
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/PythonLangSupport.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/PythonLangSupport.kt
index 088ed1a0dcb2..9993385cd7d2 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/PythonLangSupport.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/PythonLangSupport.kt
@@ -21,10 +21,10 @@ import com.jetbrains.python.sdk.configuration.PyProjectSdkConfiguration.setReady
import com.jetbrains.python.sdk.configuration.PyProjectVirtualEnvConfiguration
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
import com.jetbrains.python.statistics.modules
+import training.dsl.LessonUtil
import training.lang.AbstractLangSupport
import training.learn.LearnBundle
import training.learn.exceptons.NoSdkException
-import training.learn.lesson.kimpl.LessonUtil
import training.project.ProjectUtils
import training.project.ReadMeCreator
import training.util.getFeedbackLink
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/PythonLearningCourse.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/PythonLearningCourse.kt
index fa0bff44a04e..35540c436963 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/PythonLearningCourse.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/PythonLearningCourse.kt
@@ -18,10 +18,11 @@ import com.jetbrains.python.ift.lesson.refactorings.PythonRefactorMenuLesson
import com.jetbrains.python.ift.lesson.refactorings.PythonRenameLesson
import com.jetbrains.python.ift.lesson.run.PythonDebugLesson
import com.jetbrains.python.ift.lesson.run.PythonRunConfigurationLesson
-import training.learn.LearningModule
+import training.dsl.LessonUtil
import training.learn.LessonsBundle
import training.learn.course.LearningCourseBase
-import training.learn.interfaces.LessonType
+import training.learn.course.LearningModule
+import training.learn.course.LessonType
import training.learn.lesson.general.*
import training.learn.lesson.general.assistance.CodeFormatLesson
import training.learn.lesson.general.assistance.ParameterInfoLesson
@@ -29,7 +30,6 @@ import training.learn.lesson.general.assistance.QuickPopupsLesson
import training.learn.lesson.general.navigation.FindInFilesLesson
import training.learn.lesson.general.refactorings.ExtractMethodCocktailSortLesson
import training.learn.lesson.general.refactorings.ExtractVariableFromBubbleLesson
-import training.learn.lesson.kimpl.LessonUtil
import training.util.switchOnExperimentalLessons
class PythonLearningCourse : LearningCourseBase(PythonLanguage.INSTANCE.id) {
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/assistance/PythonEditorCodingAssistanceLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/assistance/PythonEditorCodingAssistanceLesson.kt
index 68c1748e81cc..42330ce1c6f6 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/assistance/PythonEditorCodingAssistanceLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/assistance/PythonEditorCodingAssistanceLesson.kt
@@ -3,9 +3,9 @@ package com.jetbrains.python.ift.lesson.assistance
import com.jetbrains.python.PyPsiBundle
import com.jetbrains.python.ift.PythonLessonsBundle
-import training.commands.kotlin.TaskContext
+import training.dsl.LessonSample
+import training.dsl.TaskContext
import training.learn.lesson.general.assistance.EditorCodingAssistanceLesson
-import training.learn.lesson.kimpl.LessonSample
class PythonEditorCodingAssistanceLesson(lang: String, sample: LessonSample) :
EditorCodingAssistanceLesson(lang, sample) {
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonContextActionsLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonContextActionsLesson.kt
index f4cd90dd035a..dc826d1aeb50 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonContextActionsLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonContextActionsLesson.kt
@@ -1,9 +1,9 @@
package com.jetbrains.python.ift.lesson.basic
import com.jetbrains.python.PyPsiBundle
+import training.dsl.LessonSample
+import training.dsl.parseLessonSample
import training.learn.lesson.general.ContextActionsLesson
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.parseLessonSample
class PythonContextActionsLesson : ContextActionsLesson("Python") {
override val sample: LessonSample = parseLessonSample("""
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonSelectLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonSelectLesson.kt
index 24d9933ad08b..4734ea8b3f05 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonSelectLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonSelectLesson.kt
@@ -2,9 +2,9 @@
package com.jetbrains.python.ift.lesson.basic
import org.jetbrains.annotations.Nls
+import training.dsl.LessonSample
+import training.dsl.parseLessonSample
import training.learn.lesson.general.NewSelectLesson
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.parseLessonSample
class PythonSelectLesson : NewSelectLesson("Python") {
override val selectArgument = "\"$selectString\""
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonSurroundAndUnwrapLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonSurroundAndUnwrapLesson.kt
index 1969be33d894..97b39ac0080a 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonSurroundAndUnwrapLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/basic/PythonSurroundAndUnwrapLesson.kt
@@ -1,10 +1,10 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.ift.lesson.basic
+import training.dsl.LessonSample
+import training.dsl.parseLessonSample
import training.learn.LessonsBundle
import training.learn.lesson.general.SurroundAndUnwrapLesson
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.parseLessonSample
class PythonSurroundAndUnwrapLesson : SurroundAndUnwrapLesson("Python") {
override val sample: LessonSample = parseLessonSample("""
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/FStringCompletionLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/FStringCompletionLesson.kt
index c275ad74e061..f51dad0fc9c7 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/FStringCompletionLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/FStringCompletionLesson.kt
@@ -4,10 +4,10 @@ package com.jetbrains.python.ift.lesson.completion
import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.util.Key
import com.jetbrains.python.ift.PythonLessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
-import training.learn.lesson.kimpl.parseLessonSample
+import training.dsl.LessonContext
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.parseLessonSample
+import training.learn.course.KLesson
class FStringCompletionLesson
: KLesson("completion.f.string", PythonLessonsBundle.message("python.f.string.completion.lesson.name"), "Python") {
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonBasicCompletionLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonBasicCompletionLesson.kt
index 931838d1ffa3..89e788dc8d70 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonBasicCompletionLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonBasicCompletionLesson.kt
@@ -1,8 +1,8 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.ift.lesson.completion
+import training.dsl.parseLessonSample
import training.learn.lesson.general.completion.BasicCompletionLessonBase
-import training.learn.lesson.kimpl.parseLessonSample
private const val keyToComplete1 = "director"
private const val keyToComplete2 = "distributor"
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonPostfixCompletionLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonPostfixCompletionLesson.kt
index a63d47d3e00e..7e19c7c0de70 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonPostfixCompletionLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonPostfixCompletionLesson.kt
@@ -4,11 +4,11 @@ package com.jetbrains.python.ift.lesson.completion
import com.intellij.testGuiFramework.framework.GuiTestUtil.typeText
import com.intellij.testGuiFramework.impl.jList
import com.jetbrains.python.ift.PythonLessonsBundle
+import training.dsl.LessonContext
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.parseLessonSample
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
-import training.learn.lesson.kimpl.parseLessonSample
+import training.learn.course.KLesson
private const val completionSuffix = ".ifnn"
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonSmartCompletionLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonSmartCompletionLesson.kt
index b40e8e6a404c..8bf3af905cdf 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonSmartCompletionLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonSmartCompletionLesson.kt
@@ -2,12 +2,12 @@
package com.jetbrains.python.ift.lesson.completion
import com.jetbrains.python.ift.PythonLessonsBundle
-import training.commands.kotlin.TaskContext
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonUtil
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
-import training.learn.lesson.kimpl.parseLessonSample
+import training.dsl.LessonContext
+import training.dsl.LessonUtil
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.TaskContext
+import training.dsl.parseLessonSample
+import training.learn.course.KLesson
class PythonSmartCompletionLesson
: KLesson("Smart completion", PythonLessonsBundle.message("python.smart.completion.lesson.name"), "Python") {
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonTabCompletionLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonTabCompletionLesson.kt
index 447951e3897f..17e0b2a9f1a7 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonTabCompletionLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/completion/PythonTabCompletionLesson.kt
@@ -4,10 +4,9 @@ package com.jetbrains.python.ift.lesson.completion
import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.util.Key
import com.jetbrains.python.ift.PythonLessonsBundle
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.*
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.learn.course.KLesson
import javax.swing.JList
class PythonTabCompletionLesson
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/essensial/PythonOnboardingTour.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/essensial/PythonOnboardingTour.kt
index a43df82df24b..adfa7fc04c0b 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/essensial/PythonOnboardingTour.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/essensial/PythonOnboardingTour.kt
@@ -35,14 +35,14 @@ import com.jetbrains.python.PythonLanguage
import com.jetbrains.python.ift.PythonLessonsBundle
import org.intellij.lang.annotations.Language
import org.jetbrains.annotations.Nls
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
+import training.dsl.*
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.LessonUtil.restoreIfModified
+import training.dsl.LessonUtil.restoreIfModifiedOrMoved
import training.learn.LessonsBundle
+import training.learn.course.KLesson
+import training.learn.course.LessonProperties
import training.learn.lesson.general.run.toggleBreakpointTask
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModified
-import training.learn.lesson.kimpl.LessonUtil.restoreIfModifiedOrMoved
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiManager
import training.util.invokeActionForFocusContext
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/navigation/PythonDeclarationAndUsagesLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/navigation/PythonDeclarationAndUsagesLesson.kt
index 03dd683702b0..6ef4e950d397 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/navigation/PythonDeclarationAndUsagesLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/navigation/PythonDeclarationAndUsagesLesson.kt
@@ -1,8 +1,8 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.ift.lesson.navigation
+import training.dsl.LessonContext
import training.learn.lesson.general.navigation.DeclarationAndUsagesLesson
-import training.learn.lesson.kimpl.LessonContext
class PythonDeclarationAndUsagesLesson : DeclarationAndUsagesLesson("Python") {
override fun LessonContext.setInitialPosition() = caret(9, 21)
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/navigation/PythonRecentFilesLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/navigation/PythonRecentFilesLesson.kt
index bad9470c42f9..168630d40f44 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/navigation/PythonRecentFilesLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/navigation/PythonRecentFilesLesson.kt
@@ -1,8 +1,8 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.ift.lesson.navigation
+import training.dsl.LessonContext
import training.learn.lesson.general.navigation.RecentFilesLesson
-import training.learn.lesson.kimpl.LessonContext
class PythonRecentFilesLesson : RecentFilesLesson("Python") {
override val existedFile: String = "src/recent_files_demo.py"
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonInPlaceRefactoringLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonInPlaceRefactoringLesson.kt
index 7ee89b9f0462..378fd6ea0c10 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonInPlaceRefactoringLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonInPlaceRefactoringLesson.kt
@@ -5,10 +5,9 @@ import com.intellij.icons.AllIcons
import com.intellij.testGuiFramework.framework.GuiTestUtil
import com.intellij.testGuiFramework.util.Key
import com.jetbrains.python.ift.PythonLessonsBundle
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskRuntimeContext
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.*
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.learn.course.KLesson
import javax.swing.JLabel
import javax.swing.JPanel
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonQuickFixesRefactoringLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonQuickFixesRefactoringLesson.kt
index 281daf263726..c1d1e963896f 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonQuickFixesRefactoringLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonQuickFixesRefactoringLesson.kt
@@ -14,10 +14,9 @@ import com.intellij.util.ui.table.JBTableRow
import com.jetbrains.python.PyBundle
import com.jetbrains.python.ift.PythonLessonsBundle
import com.jetbrains.python.inspections.quickfix.PyChangeSignatureQuickFix
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskTestContext
-import training.learn.lesson.kimpl.*
-import training.learn.lesson.kimpl.LessonUtil.checkExpectedStateOfEditor
+import training.dsl.*
+import training.dsl.LessonUtil.checkExpectedStateOfEditor
+import training.learn.course.KLesson
import java.util.regex.Pattern
import javax.swing.JDialog
import javax.swing.JTable
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonRefactorMenuLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonRefactorMenuLesson.kt
index 92fc5200d9ed..4025eb123af8 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonRefactorMenuLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonRefactorMenuLesson.kt
@@ -1,9 +1,9 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.ift.lesson.refactorings
+import training.dsl.LessonContext
+import training.dsl.parseLessonSample
import training.learn.lesson.general.refactorings.RefactoringMenuLessonBase
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.parseLessonSample
class PythonRefactorMenuLesson : RefactoringMenuLessonBase("Refactoring menu", "Python") {
private val sample = parseLessonSample("""
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonRenameLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonRenameLesson.kt
index 3eb24fcacda8..ac474ea4aa00 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonRenameLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/refactorings/PythonRenameLesson.kt
@@ -15,13 +15,9 @@ import com.intellij.usageView.UsageViewBundle
import com.intellij.util.ui.tree.TreeUtil
import com.jetbrains.python.ift.PythonLessonsBundle
import org.jetbrains.annotations.Nullable
-import training.commands.kotlin.TaskContext
-import training.commands.kotlin.TaskTestContext
+import training.dsl.*
import training.learn.LessonsBundle
-import training.learn.lesson.kimpl.KLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.dropMnemonic
-import training.learn.lesson.kimpl.parseLessonSample
+import training.learn.course.KLesson
import java.util.regex.Pattern
import javax.swing.JButton
import javax.swing.JTree
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonDebugLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonDebugLesson.kt
index 6ddd18004ea6..2c707ab4fead 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonDebugLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonDebugLesson.kt
@@ -4,10 +4,10 @@ package com.jetbrains.python.ift.lesson.run
import com.intellij.icons.AllIcons
import com.intellij.openapi.editor.LogicalPosition
import com.jetbrains.python.ift.PythonLessonsBundle
-import training.commands.kotlin.TaskTestContext
+import training.dsl.LessonContext
+import training.dsl.TaskTestContext
+import training.dsl.highlightButtonById
import training.learn.lesson.general.run.CommonDebugLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.highlightButtonById
class PythonDebugLesson : CommonDebugLesson("python.debug.workflow", "Python") {
override val configurationName = PythonRunLessonsUtils.demoConfigurationName
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonRunConfigurationLesson.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonRunConfigurationLesson.kt
index 3a9276e6595c..0fe931fade83 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonRunConfigurationLesson.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonRunConfigurationLesson.kt
@@ -2,10 +2,10 @@
package com.jetbrains.python.ift.lesson.run
import com.jetbrains.python.ift.PythonLessonsBundle
+import training.dsl.LessonContext
+import training.dsl.LessonSample
+import training.dsl.checkToolWindowState
import training.learn.lesson.general.run.CommonRunConfigurationLesson
-import training.learn.lesson.kimpl.LessonContext
-import training.learn.lesson.kimpl.LessonSample
-import training.learn.lesson.kimpl.checkToolWindowState
class PythonRunConfigurationLesson : CommonRunConfigurationLesson("python.run.configuration", "Python") {
override val sample: LessonSample = PythonRunLessonsUtils.demoSample
diff --git a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonRunLessonsUtils.kt b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonRunLessonsUtils.kt
index 792b4240bd26..6f61facd3d6d 100644
--- a/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonRunLessonsUtils.kt
+++ b/python/python-features-trainer/src/com/jetbrains/python/ift/lesson/run/PythonRunLessonsUtils.kt
@@ -1,7 +1,7 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.ift.lesson.run
-import training.learn.lesson.kimpl.parseLessonSample
+import training.dsl.parseLessonSample
object PythonRunLessonsUtils {
const val demoConfigurationName = "sandbox"