From ce75c02ba3ad5dcda7b04fa4de9fd31e886b8e24 Mon Sep 17 00:00:00 2001 From: "Liana.Bakradze" Date: Wed, 15 Mar 2017 15:39:25 +0300 Subject: [PATCH] get rid of StudyLanguageManager (EDU-895) --- .../CCSubtaskChangeListener.java | 11 +++----- .../CCTestsTabTitleProvider.java | 9 +++---- .../projectView/CCDirectoryNode.java | 7 +++-- .../projectView/CCTaskDirectoryNode.java | 14 +++++----- .../student/resources/META-INF/plugin.xml | 6 ++--- .../edu/learning/EduPluginConfigurator.java | 11 ++++++++ .../edu/learning/StudyLanguageManager.java | 17 ------------ .../edu/learning/StudyProjectComponent.java | 6 ++--- .../edu/learning/StudySubtaskUtils.java | 6 ++--- .../jetbrains/edu/learning/StudyUtils.java | 15 +++-------- .../Edu-Python/resources/META-INF/plugin.xml | 2 +- .../coursecreator/PyCCChangeCourseInfo.java | 4 +-- .../edu/learning/PyEduPluginConfigurator.java | 14 ++++++++++ .../PyStudyDirectoryProjectGenerator.java | 4 +-- .../edu/learning/PyStudyExecutor.java | 6 ++--- .../PyStudyInterpreterInspection.java | 4 +-- .../edu/learning/PyStudyLanguageManager.java | 27 ------------------- .../edu/learning/PyStudyTestRunner.java | 13 +++------ 18 files changed, 68 insertions(+), 108 deletions(-) create mode 100644 python/educational-core/student/src/com/jetbrains/edu/learning/EduPluginConfigurator.java delete mode 100644 python/educational-core/student/src/com/jetbrains/edu/learning/StudyLanguageManager.java create mode 100644 python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java delete mode 100644 python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyLanguageManager.java 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();