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());
- }
-}