extension points to override task/lesson creation in language plugins

This commit is contained in:
Liana.Bakradze
2017-03-07 12:16:39 +03:00
parent 7a0e3770bc
commit 41c67a3861
5 changed files with 52 additions and 1 deletions
@@ -47,6 +47,12 @@
<extensionPoint qualifiedName="Edu.CCLanguageManager" beanClass="com.intellij.lang.LanguageExtensionPoint">
<with attribute="implementationClass" implements="com.jetbrains.edu.coursecreator.CCLanguageManager"/>
</extensionPoint>
<extensionPoint qualifiedName="Edu.CCTaskCreator" beanClass="com.intellij.lang.LanguageExtensionPoint">
<with attribute="implementationClass" implements="com.jetbrains.edu.coursecreator.creation.CCTaskCreator"/>
</extensionPoint>
<extensionPoint qualifiedName="Edu.CCLessonCreator" beanClass="com.intellij.lang.LanguageExtensionPoint">
<with attribute="implementationClass" implements="com.jetbrains.edu.coursecreator.creation.CCLessonCreator"/>
</extensionPoint>
</extensionPoints>
<actions>
@@ -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, "\\/");
@@ -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<PsiDirectory> taskDirectory = new Ref<>();
ApplicationManager.getApplication().runWriteAction(() -> {
String taskDirName = EduNames.TASK + item.getIndex();
@@ -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<CCLessonCreator> 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);
}
@@ -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<CCTaskCreator> 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);
}