diff --git a/python/educational-core/course-creator/resources/META-INF/plugin.xml b/python/educational-core/course-creator/resources/META-INF/plugin.xml
index 8fd2e2531208..ede2dfb83d31 100644
--- a/python/educational-core/course-creator/resources/META-INF/plugin.xml
+++ b/python/educational-core/course-creator/resources/META-INF/plugin.xml
@@ -47,6 +47,12 @@
+
+
+
+
+
+
diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateLesson.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateLesson.java
index 6952f319dcf7..c8af14b57077 100644
--- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateLesson.java
+++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateLesson.java
@@ -8,6 +8,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiManager;
import com.intellij.util.Function;
+import com.jetbrains.edu.coursecreator.creation.CCLessonCreator;
import com.jetbrains.edu.learning.core.EduNames;
import com.jetbrains.edu.learning.courseFormat.Course;
import com.jetbrains.edu.learning.courseFormat.Lesson;
@@ -51,6 +52,10 @@ public class CCCreateLesson extends CCCreateStudyItemActionBase {
protected PsiDirectory createItemDir(@NotNull final Project project, @NotNull final StudyItem item,
@Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory,
@NotNull final Course course) {
+ CCLessonCreator creator = CCLessonCreator.INSTANCE.forLanguage(course.getLanguageById());
+ if (creator != null) {
+ return creator.createLesson(project, item, view, parentDirectory, course);
+ }
final PsiDirectory[] lessonDirectory = new PsiDirectory[1];
ApplicationManager.getApplication().runWriteAction(() -> {
lessonDirectory[0] = DirectoryUtil.createSubdirectories(EduNames.LESSON + item.getIndex(), parentDirectory, "\\/");
diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java
index 6b4201b22452..6ae62ecd7272 100644
--- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java
+++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java
@@ -9,6 +9,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.util.Function;
import com.jetbrains.edu.coursecreator.CCUtils;
+import com.jetbrains.edu.coursecreator.creation.CCTaskCreator;
import com.jetbrains.edu.learning.core.EduNames;
import com.jetbrains.edu.learning.core.EduUtils;
import com.jetbrains.edu.learning.courseFormat.Course;
@@ -64,7 +65,10 @@ public class CCCreateTask extends CCCreateStudyItemActionBase {
protected PsiDirectory createItemDir(@NotNull final Project project, @NotNull final StudyItem item,
@Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory,
@NotNull final Course course) {
-
+ CCTaskCreator creator = CCTaskCreator.INSTANCE.forLanguage(course.getLanguageById());
+ if (creator != null) {
+ return creator.createTask(project, item, view, parentDirectory, course);
+ }
final Ref taskDirectory = new Ref<>();
ApplicationManager.getApplication().runWriteAction(() -> {
String taskDirName = EduNames.TASK + item.getIndex();
diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCLessonCreator.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCLessonCreator.java
new file mode 100644
index 000000000000..28ca6e7d25ac
--- /dev/null
+++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCLessonCreator.java
@@ -0,0 +1,18 @@
+package com.jetbrains.edu.coursecreator.creation;
+
+import com.intellij.ide.IdeView;
+import com.intellij.lang.LanguageExtension;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiDirectory;
+import com.jetbrains.edu.learning.courseFormat.Course;
+import com.jetbrains.edu.learning.courseFormat.StudyItem;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public interface CCLessonCreator {
+ LanguageExtension INSTANCE = new LanguageExtension<>("Edu.CCLessonCreator");
+
+ PsiDirectory createLesson(@NotNull final Project project, @NotNull final StudyItem item,
+ @Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory,
+ @NotNull final Course course);
+}
diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCTaskCreator.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCTaskCreator.java
new file mode 100644
index 000000000000..a4591e1577f1
--- /dev/null
+++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCTaskCreator.java
@@ -0,0 +1,18 @@
+package com.jetbrains.edu.coursecreator.creation;
+
+import com.intellij.ide.IdeView;
+import com.intellij.lang.LanguageExtension;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiDirectory;
+import com.jetbrains.edu.learning.courseFormat.Course;
+import com.jetbrains.edu.learning.courseFormat.StudyItem;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public interface CCTaskCreator {
+ LanguageExtension INSTANCE = new LanguageExtension<>("Edu.CCTaskCreator");
+
+ PsiDirectory createTask(@NotNull final Project project, @NotNull final StudyItem item,
+ @Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory,
+ @NotNull final Course course);
+}