diff --git a/python/educational-core/student/resources/META-INF/plugin.xml b/python/educational-core/student/resources/META-INF/plugin.xml index d841a74693d3..013fee2c0d42 100644 --- a/python/educational-core/student/resources/META-INF/plugin.xml +++ b/python/educational-core/student/resources/META-INF/plugin.xml @@ -44,7 +44,6 @@ - diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/EduPluginConfigurator.java b/python/educational-core/student/src/com/jetbrains/edu/learning/EduPluginConfigurator.java index 365a63946992..a24b9ec467d2 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/EduPluginConfigurator.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/EduPluginConfigurator.java @@ -3,10 +3,12 @@ package com.jetbrains.edu.learning; import com.intellij.ide.IdeView; import com.intellij.ide.util.DirectoryUtil; import com.intellij.lang.LanguageExtension; +import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; +import com.jetbrains.edu.learning.actions.*; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.courseFormat.Course; import com.jetbrains.edu.learning.courseFormat.StudyItem; @@ -63,4 +65,20 @@ public interface EduPluginConfigurator { @NotNull default String getLanguageScriptUrl(){return "";} + + StudyCheckAction getCheckAction(); + + @NotNull + default DefaultActionGroup getTaskDescriptionActionGroup() { + final DefaultActionGroup group = new DefaultActionGroup(); + group.add(getCheckAction()); + group.add(new StudyPreviousTaskAction()); + group.add(new StudyNextTaskAction()); + group.add(new StudyRefreshTaskFileAction()); + group.add(new StudyShowHintAction()); + + group.add(new StudyRunAction()); + group.add(new StudyEditInputAction()); + return group; + } } diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyBasePluginConfigurator.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyBasePluginConfigurator.java deleted file mode 100644 index 8ac99eab4079..000000000000 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyBasePluginConfigurator.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.jetbrains.edu.learning; - -import com.intellij.openapi.actionSystem.DefaultActionGroup; -import com.intellij.openapi.project.Project; -import com.jetbrains.edu.learning.actions.*; -import org.jetbrains.annotations.NotNull; - -public abstract class StudyBasePluginConfigurator implements StudyPluginConfigurator { - @NotNull - @Override - public DefaultActionGroup getActionGroup(Project project) { - return getDefaultActionGroup(); - } - - @NotNull - public static DefaultActionGroup getDefaultActionGroup() { - final DefaultActionGroup group = new DefaultActionGroup(); - group.add(new StudyPreviousTaskAction()); - group.add(new StudyNextTaskAction()); - group.add(new StudyRefreshTaskFileAction()); - group.add(new StudyShowHintAction()); - - group.add(new StudyRunAction()); - group.add(new StudyEditInputAction()); - return group; - } -} diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyPluginConfigurator.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyPluginConfigurator.java deleted file mode 100644 index 36adbd1c90d2..000000000000 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyPluginConfigurator.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.jetbrains.edu.learning; - -import com.intellij.openapi.actionSystem.DefaultActionGroup; -import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.openapi.project.Project; -import org.jetbrains.annotations.NotNull; - -public interface StudyPluginConfigurator { - ExtensionPointName EP_NAME = ExtensionPointName.create("Edu.studyPluginConfigurator"); - - /** - * Provide action group that should be placed on the tool window toolbar. - */ - @NotNull - DefaultActionGroup getActionGroup(Project project); - - boolean accept(@NotNull final Project project); -} diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java index c5d3de4e09da..80f80bc436ca 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java @@ -547,17 +547,6 @@ public class StudyUtils { return null; } - @Nullable - public static StudyPluginConfigurator getConfigurator(@NotNull final Project project) { - StudyPluginConfigurator[] extensions = StudyPluginConfigurator.EP_NAME.getExtensions(); - for (StudyPluginConfigurator extension: extensions) { - if (extension.accept(project)) { - return extension; - } - } - return null; - } - @Nullable public static StudyTwitterPluginConfigurator getTwitterConfigurator(@NotNull final Project project) { StudyTwitterPluginConfigurator[] extensions = StudyTwitterPluginConfigurator.EP_NAME.getExtensions(); diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindow.java b/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindow.java index a0939b96e372..af7a7ae465c5 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindow.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindow.java @@ -94,10 +94,7 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D setContent(mySplitPane); if (isToolwindow) { - StudyPluginConfigurator configurator = StudyUtils.getConfigurator(project); - if (configurator != null) { - project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new StudyFileEditorManagerListener(this, project)); - } + project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new StudyFileEditorManagerListener(this, project)); if (StudyTaskManager.getInstance(project).isTurnEditingMode() || StudyTaskManager.getInstance(project).getToolWindowMode() == StudyToolWindowMode.EDITING) { @@ -172,16 +169,12 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D LOG.warn("Course is null"); return group; } - StudyPluginConfigurator configurator = StudyUtils.getConfigurator(project); + EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById()); if (configurator != null) { - group.addAll(configurator.getActionGroup(project)); - addAdditionalActions(group); - return group; - } - else { - LOG.warn("No configurator is provided for plugin"); - return StudyBasePluginConfigurator.getDefaultActionGroup(); + group.addAll(configurator.getTaskDescriptionActionGroup()); } + addAdditionalActions(group); + return group; } private static void addAdditionalActions(DefaultActionGroup group) { diff --git a/python/educational-python/Edu-Python/resources/META-INF/plugin.xml b/python/educational-python/Edu-Python/resources/META-INF/plugin.xml index c842b9cb8051..f7b353ea2818 100644 --- a/python/educational-python/Edu-Python/resources/META-INF/plugin.xml +++ b/python/educational-python/Edu-Python/resources/META-INF/plugin.xml @@ -33,7 +33,6 @@ - diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java index b36c6240f55e..67627b3699b1 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java @@ -15,6 +15,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiManager; import com.jetbrains.edu.coursecreator.settings.CCSettings; +import com.jetbrains.edu.learning.actions.StudyCheckAction; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.courseFormat.Course; import com.jetbrains.edu.learning.courseFormat.StudyItem; @@ -121,4 +122,9 @@ public class PyEduPluginConfigurator implements EduPluginConfigurator { public String getLanguageScriptUrl() { return getClass().getResource("/python.js").toExternalForm(); } + + @Override + public StudyCheckAction getCheckAction() { + return new PyStudyCheckAction(); + } } diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyPluginConfigurator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyPluginConfigurator.java deleted file mode 100644 index 9674312f3e42..000000000000 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyPluginConfigurator.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.jetbrains.edu.learning; - -import com.intellij.openapi.actionSystem.DefaultActionGroup; -import com.intellij.openapi.project.Project; -import com.jetbrains.edu.learning.courseFormat.Course; -import org.jetbrains.annotations.NotNull; - -public class PyStudyPluginConfigurator extends StudyBasePluginConfigurator { - - @NotNull - @Override - public DefaultActionGroup getActionGroup(Project project) { - final DefaultActionGroup baseGroup = super.getActionGroup(project); - final DefaultActionGroup group = new DefaultActionGroup(); - group.add(new PyStudyCheckAction()); - group.addAll(baseGroup); - return group; - } - - @Override - public boolean accept(@NotNull Project project) { - StudyTaskManager taskManager = StudyTaskManager.getInstance(project); - if (taskManager == null) return false; - Course course = taskManager.getCourse(); - return course != null && "Python".equals(course.getLanguageID()) && "PyCharm".equals(course.getCourseType()); - } -}