mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
extension points to override task/lesson creation in language plugins
This commit is contained in:
@@ -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>
|
||||
|
||||
+5
@@ -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, "\\/");
|
||||
|
||||
+5
-1
@@ -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();
|
||||
|
||||
+18
@@ -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);
|
||||
}
|
||||
+18
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user