diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/CCSubtaskChangeListener.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/CCSubtaskChangeListener.java
index 5a71c48a6297..4c881e551d30 100644
--- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/CCSubtaskChangeListener.java
+++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/CCSubtaskChangeListener.java
@@ -9,10 +9,7 @@ import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtil;
-import com.jetbrains.edu.learning.StudyLanguageManager;
-import com.jetbrains.edu.learning.StudySubtaskChangeListener;
-import com.jetbrains.edu.learning.StudyTaskManager;
-import com.jetbrains.edu.learning.StudyUtils;
+import com.jetbrains.edu.learning.*;
import com.jetbrains.edu.learning.core.EduNames;
import com.jetbrains.edu.learning.courseFormat.Course;
import com.jetbrains.edu.learning.courseFormat.Task;
@@ -31,11 +28,11 @@ public class CCSubtaskChangeListener implements StudySubtaskChangeListener {
if (course == null) {
return;
}
- StudyLanguageManager manager = StudyUtils.getLanguageManager(course);
- if (manager == null) {
+ EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
+ if (configurator == null) {
return;
}
- String testFileName = manager.getTestFileName();
+ String testFileName = configurator.getTestFileName();
if (newSubtaskNumber != 0) {
String nameWithoutExtension = FileUtil.getNameWithoutExtension(testFileName);
String extension = FileUtilRt.getExtension(testFileName);
diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/CCTestsTabTitleProvider.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/CCTestsTabTitleProvider.java
index fc74f839a8a2..bcb645d56ede 100644
--- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/CCTestsTabTitleProvider.java
+++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/CCTestsTabTitleProvider.java
@@ -3,9 +3,8 @@ package com.jetbrains.edu.coursecreator;
import com.intellij.openapi.fileEditor.impl.EditorTabTitleProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
-import com.jetbrains.edu.learning.StudyLanguageManager;
+import com.jetbrains.edu.learning.EduPluginConfigurator;
import com.jetbrains.edu.learning.StudyTaskManager;
-import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.courseFormat.Course;
import org.jetbrains.annotations.Nullable;
@@ -21,10 +20,10 @@ public class CCTestsTabTitleProvider implements EditorTabTitleProvider {
}
Course course = StudyTaskManager.getInstance(project).getCourse();
assert course != null;
- StudyLanguageManager manager = StudyUtils.getLanguageManager(course);
- if (manager == null) {
+ EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
+ if (configurator == null) {
return null;
}
- return manager.getTestFileName();
+ return configurator.getTestFileName();
}
}
\ No newline at end of file
diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCDirectoryNode.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCDirectoryNode.java
index 28334c43f9a8..b85c3f38d7d7 100644
--- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCDirectoryNode.java
+++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCDirectoryNode.java
@@ -9,9 +9,8 @@ import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.jetbrains.edu.coursecreator.CCUtils;
-import com.jetbrains.edu.learning.StudyLanguageManager;
+import com.jetbrains.edu.learning.EduPluginConfigurator;
import com.jetbrains.edu.learning.StudyTaskManager;
-import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.courseFormat.Course;
import com.jetbrains.edu.learning.courseFormat.StudyItem;
import com.jetbrains.edu.learning.projectView.DirectoryNode;
@@ -44,8 +43,8 @@ public class CCDirectoryNode extends DirectoryNode {
if (course == null) {
return null;
}
- StudyLanguageManager manager = StudyUtils.getLanguageManager(course);
- if (manager == null) {
+ EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
+ if (configurator == null) {
return new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings);
}
if (!CCUtils.isTestsFile(myProject, virtualFile)) {
diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCTaskDirectoryNode.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCTaskDirectoryNode.java
index 93d9ca6bec11..bd2702d24cef 100644
--- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCTaskDirectoryNode.java
+++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCTaskDirectoryNode.java
@@ -10,7 +10,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiNamedElement;
import com.jetbrains.edu.coursecreator.CCUtils;
-import com.jetbrains.edu.learning.StudyLanguageManager;
+import com.jetbrains.edu.learning.EduPluginConfigurator;
import com.jetbrains.edu.learning.StudyTaskManager;
import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.core.EduNames;
@@ -51,25 +51,25 @@ public class CCTaskDirectoryNode extends TaskDirectoryNode {
if (course == null) {
return null;
}
- StudyLanguageManager manager = StudyUtils.getLanguageManager(course);
- if (manager == null) {
+ EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
+ if (configurator == null) {
return new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings);
}
if (!CCUtils.isTestsFile(myProject, virtualFile)) {
return new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings);
}
if (!myTask.hasSubtasks()) {
- return new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings, getTestNodeName(manager, psiElement));
+ return new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings, getTestNodeName(configurator, psiElement));
}
- String testFileName = getTestNodeName(manager, psiElement);
+ String testFileName = getTestNodeName(configurator, psiElement);
return isActiveSubtaskTest(virtualFile) ? new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings, testFileName) : null;
}
return null;
}
@NotNull
- private static String getTestNodeName(StudyLanguageManager manager, PsiElement psiElement) {
- String defaultTestName = manager.getTestFileName();
+ private static String getTestNodeName(EduPluginConfigurator configurator, PsiElement psiElement) {
+ String defaultTestName = configurator.getTestFileName();
if (psiElement instanceof PsiFile) {
return defaultTestName;
}
diff --git a/python/educational-core/student/resources/META-INF/plugin.xml b/python/educational-core/student/resources/META-INF/plugin.xml
index ec049f945827..e2735c4f11cf 100644
--- a/python/educational-core/student/resources/META-INF/plugin.xml
+++ b/python/educational-core/student/resources/META-INF/plugin.xml
@@ -44,10 +44,10 @@
-
-
-
+
+
+
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
new file mode 100644
index 000000000000..77eeae3401c5
--- /dev/null
+++ b/python/educational-core/student/src/com/jetbrains/edu/learning/EduPluginConfigurator.java
@@ -0,0 +1,11 @@
+package com.jetbrains.edu.learning;
+
+import com.intellij.lang.LanguageExtension;
+import org.jetbrains.annotations.NotNull;
+
+public interface EduPluginConfigurator {
+ LanguageExtension INSTANCE = new LanguageExtension<>("Edu.pluginConfigurator");
+
+ @NotNull
+ String getTestFileName();
+}
diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyLanguageManager.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyLanguageManager.java
deleted file mode 100644
index 8eb48f0b5ace..000000000000
--- a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyLanguageManager.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.jetbrains.edu.learning;
-
-import com.intellij.lang.LanguageExtension;
-import org.jetbrains.annotations.NotNull;
-
-public interface StudyLanguageManager {
- LanguageExtension INSTANCE = new LanguageExtension<>("Edu.StudyLanguageManager");
-
- @NotNull
- String getTestFileName();
-
- @NotNull
- String getTestHelperFileName();
-
- @NotNull
- String getUserTester();
-}
diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyProjectComponent.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyProjectComponent.java
index 124da4a7c90f..f0491e383c7b 100644
--- a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyProjectComponent.java
+++ b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyProjectComponent.java
@@ -161,9 +161,9 @@ public class StudyProjectComponent implements ProjectComponent {
flushCourse(course);
course.initCourse(false);
- StudyLanguageManager manager = StudyUtils.getLanguageManager(course);
- if (manager == null) {
- LOG.info("Study Language Manager is null for " + course.getLanguageById().getDisplayName());
+ EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
+ if (configurator == null) {
+ LOG.info("EduPluginConfigurator not found for language " + course.getLanguageById().getDisplayName());
return;
}
diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudySubtaskUtils.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudySubtaskUtils.java
index b7a086a8ff8b..b4d7aad7d861 100644
--- a/python/educational-core/student/src/com/jetbrains/edu/learning/StudySubtaskUtils.java
+++ b/python/educational-core/student/src/com/jetbrains/edu/learning/StudySubtaskUtils.java
@@ -95,11 +95,11 @@ public class StudySubtaskUtils {
if (course == null) {
return;
}
- StudyLanguageManager manager = StudyUtils.getLanguageManager(course);
- if (manager == null) {
+ EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
+ if (configurator == null) {
return;
}
- String defaultTestFileName = manager.getTestFileName();
+ String defaultTestFileName = configurator.getTestFileName();
String nameWithoutExtension = FileUtil.getNameWithoutExtension(defaultTestFileName);
String extension = FileUtilRt.getExtension(defaultTestFileName);
String subtaskTestFileName = nameWithoutExtension + EduNames.SUBTASK_MARKER + toSubtaskIndex;
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 0bb0c542d6f8..6ca14306024e 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
@@ -297,25 +297,16 @@ public class StudyUtils {
}
- /**
- * returns language manager which contains all the information about language specific file names
- */
- @Nullable
- public static StudyLanguageManager getLanguageManager(@NotNull final Course course) {
- Language language = course.getLanguageById();
- return language == null ? null : StudyLanguageManager.INSTANCE.forLanguage(language);
- }
-
public static boolean isTestsFile(@NotNull Project project, @NotNull final String name) {
Course course = StudyTaskManager.getInstance(project).getCourse();
if (course == null) {
return false;
}
- StudyLanguageManager manager = getLanguageManager(course);
- if (manager == null) {
+ EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
+ if (configurator == null) {
return false;
}
- String testFileName = manager.getTestFileName();
+ String testFileName = configurator.getTestFileName();
return name.equals(testFileName) ||
name.startsWith(FileUtil.getNameWithoutExtension(testFileName)) && name.contains(EduNames.SUBTASK_MARKER);
}
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 70e30937af07..c842b9cb8051 100644
--- a/python/educational-python/Edu-Python/resources/META-INF/plugin.xml
+++ b/python/educational-python/Edu-Python/resources/META-INF/plugin.xml
@@ -33,8 +33,8 @@
-
+
userTests = StudyTaskManager.getInstance(project).getUserTests(currentTask);
if (!userTests.isEmpty()) {
- StudyLanguageManager manager = StudyUtils.getLanguageManager(currentTask.getLesson().getCourse());
- if (manager != null) {
- cmd.addParameter(new File(project.getBaseDir().getPath(), manager.getUserTester()).getPath());
+ EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(currentTask.getLesson().getCourse().getLanguageById());
+ if (configurator != null) {
+ cmd.addParameter(new File(project.getBaseDir().getPath(), "user_tester.py").getPath());
cmd.addParameter(sdkPath);
cmd.addParameter(filePath);
}
diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyInterpreterInspection.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyInterpreterInspection.java
index 5f14689e6268..001332ea3bf0 100644
--- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyInterpreterInspection.java
+++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyInterpreterInspection.java
@@ -82,12 +82,12 @@ public class PyStudyInterpreterInspection extends PyInspection {
final LanguageLevel projectLanguageLevel = LanguageLevel.fromPythonVersion(versionString.substring(prefix.length()));
final String version = course.getLanguageVersion();
- if (PyStudyLanguageManager.PYTHON_2.equals(version)) {
+ if (PyEduPluginConfigurator.PYTHON_2.equals(version)) {
if (projectLanguageLevel.isPy3K()) {
registerProblem(node, "Course is available for Python 2, but Python 3 is selected as project interpreter", new ConfigureInterpreterFix());
}
}
- else if (PyStudyLanguageManager.PYTHON_3.equals(version)) {
+ else if (PyEduPluginConfigurator.PYTHON_3.equals(version)) {
if (!projectLanguageLevel.isPy3K()) {
registerProblem(node, "Course is available for Python 3, but Python 2 is selected as project interpreter", new ConfigureInterpreterFix());
}
diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyLanguageManager.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyLanguageManager.java
deleted file mode 100644
index 5eb4b81436e2..000000000000
--- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyLanguageManager.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.jetbrains.edu.learning;
-
-import com.jetbrains.edu.learning.core.EduNames;
-import org.jetbrains.annotations.NotNull;
-
-public class PyStudyLanguageManager implements StudyLanguageManager {
- public static final String PYTHON_3 = "3.x";
- public static final String PYTHON_2 = "2.x";
-
- @NotNull
- @Override
- public String getTestFileName() {
- return EduNames.TESTS_FILE;
- }
-
- @NotNull
- @Override
- public String getTestHelperFileName() {
- return "test_helper.py";
- }
-
- @NotNull
- @Override
- public String getUserTester() {
- return "user_tester.py";
- }
-}
diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyTestRunner.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyTestRunner.java
index e3cf99aecb0f..cc6cd03a1c81 100644
--- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyTestRunner.java
+++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyTestRunner.java
@@ -2,7 +2,6 @@ package com.jetbrains.edu.learning;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.configurations.GeneralCommandLine;
-import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
@@ -21,7 +20,6 @@ import java.util.Map;
public class PyStudyTestRunner extends StudyTestRunner {
private static final String PYTHONPATH = "PYTHONPATH";
- private static final Logger LOG = Logger.getInstance(PyStudyTestRunner.class.getName());
PyStudyTestRunner(@NotNull final Task task, @NotNull final VirtualFile taskDir) {
super(task, taskDir);
@@ -30,17 +28,12 @@ public class PyStudyTestRunner extends StudyTestRunner {
public Process createCheckProcess(@NotNull final Project project, @NotNull final String executablePath) throws ExecutionException {
final Sdk sdk = PythonSdkType.findPythonSdk(ModuleManager.getInstance(project).getModules()[0]);
Course course = myTask.getLesson().getCourse();
- StudyLanguageManager manager = StudyUtils.getLanguageManager(course);
- if (manager == null) {
- LOG.info("Language manager is null for " + course.getLanguageById().getDisplayName());
- return null;
- }
-
- String testsFileName = manager.getTestFileName();
+ PyEduPluginConfigurator configurator = new PyEduPluginConfigurator();
+ String testsFileName = configurator.getTestFileName();
if (myTask.hasSubtasks() && myTask.getActiveSubtaskIndex() != 0) {
testsFileName = FileUtil.getNameWithoutExtension(testsFileName);
int index = myTask.getActiveSubtaskIndex();
- testsFileName += EduNames.SUBTASK_MARKER + index + "." + FileUtilRt.getExtension(manager.getTestFileName());
+ testsFileName += EduNames.SUBTASK_MARKER + index + "." + FileUtilRt.getExtension(configurator.getTestFileName());
}
final File testRunner = new File(myTaskDir.getPath(), testsFileName);
final GeneralCommandLine commandLine = new GeneralCommandLine();