get rid of StudyLanguageManager (EDU-895)

This commit is contained in:
Liana.Bakradze
2017-03-23 13:43:29 +03:00
parent 95601c4505
commit ce75c02ba3
18 changed files with 68 additions and 108 deletions
@@ -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);
@@ -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();
}
}
@@ -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)) {
@@ -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;
}
@@ -44,10 +44,10 @@
<extensionPoint qualifiedName="Edu.StudyExecutor" beanClass="com.intellij.lang.LanguageExtensionPoint">
<with attribute="implementationClass" implements="com.jetbrains.edu.learning.checker.StudyExecutor"/>
</extensionPoint>
<extensionPoint qualifiedName="Edu.StudyLanguageManager" beanClass="com.intellij.lang.LanguageExtensionPoint">
<with attribute="implementationClass" implements="com.jetbrains.edu.learning.StudyLanguageManager"/>
</extensionPoint>
<extensionPoint qualifiedName="Edu.studyPluginConfigurator" interface="com.jetbrains.edu.learning.StudyPluginConfigurator"/>
<extensionPoint qualifiedName="Edu.pluginConfigurator" beanClass="com.intellij.lang.LanguageExtensionPoint">
<with attribute="implementationClass" implements="com.jetbrains.edu.learning.EduPluginConfigurator"/>
</extensionPoint>
<extensionPoint qualifiedName="Edu.studyActionsProvider" interface="com.jetbrains.edu.learning.StudyActionsProvider"/>
<extensionPoint qualifiedName="Edu.studyTwitterPluginConfigurator" interface="com.jetbrains.edu.learning.StudyTwitterPluginConfigurator"/>
<extensionPoint qualifiedName="Edu.studyActionListener" interface="com.jetbrains.edu.learning.StudyActionListener"/>
@@ -0,0 +1,11 @@
package com.jetbrains.edu.learning;
import com.intellij.lang.LanguageExtension;
import org.jetbrains.annotations.NotNull;
public interface EduPluginConfigurator {
LanguageExtension<EduPluginConfigurator> INSTANCE = new LanguageExtension<>("Edu.pluginConfigurator");
@NotNull
String getTestFileName();
}
@@ -1,17 +0,0 @@
package com.jetbrains.edu.learning;
import com.intellij.lang.LanguageExtension;
import org.jetbrains.annotations.NotNull;
public interface StudyLanguageManager {
LanguageExtension<StudyLanguageManager> INSTANCE = new LanguageExtension<>("Edu.StudyLanguageManager");
@NotNull
String getTestFileName();
@NotNull
String getTestHelperFileName();
@NotNull
String getUserTester();
}
@@ -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;
}
@@ -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;
@@ -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);
}
@@ -33,8 +33,8 @@
</extensions>
<extensions defaultExtensionNs="Edu">
<StudyExecutor implementationClass="com.jetbrains.edu.learning.PyStudyExecutor" language="Python"/>
<StudyLanguageManager implementationClass="com.jetbrains.edu.learning.PyStudyLanguageManager" language="Python"/>
<studyPluginConfigurator implementation="com.jetbrains.edu.learning.PyStudyPluginConfigurator" />
<pluginConfigurator implementationClass="com.jetbrains.edu.learning.PyEduPluginConfigurator" language="Python"/>
</extensions>
<actions>
<action id="WelcomeScreen.PythonIntro" class="com.jetbrains.edu.learning.actions.PyStudyIntroductionCourseAction"
@@ -9,8 +9,8 @@ import com.jetbrains.python.psi.LanguageLevel;
import javax.swing.*;
import static com.jetbrains.edu.learning.PyStudyLanguageManager.PYTHON_2;
import static com.jetbrains.edu.learning.PyStudyLanguageManager.PYTHON_3;
import static com.jetbrains.edu.learning.PyEduPluginConfigurator.PYTHON_2;
import static com.jetbrains.edu.learning.PyEduPluginConfigurator.PYTHON_3;
public class PyCCChangeCourseInfo extends CCChangeCourseInfo {
public static final String ALL_VERSIONS = "All versions";
@@ -0,0 +1,14 @@
package com.jetbrains.edu.learning;
import org.jetbrains.annotations.NotNull;
public class PyEduPluginConfigurator implements EduPluginConfigurator {
public static final String PYTHON_3 = "3.x";
public static final String PYTHON_2 = "2.x";
@NotNull
@Override
public String getTestFileName() {
return "tests.py";
}
}
@@ -239,10 +239,10 @@ public class PyStudyDirectoryProjectGenerator extends PythonProjectGenerator<PyN
LanguageLevel baseLevel = LanguageLevel.PYTHON30;
if (course != null) {
final String version = course.getLanguageVersion();
if (PyStudyLanguageManager.PYTHON_2.equals(version)) {
if (PyEduPluginConfigurator.PYTHON_2.equals(version)) {
baseLevel = LanguageLevel.PYTHON27;
}
else if (PyStudyLanguageManager.PYTHON_3.equals(version)) {
else if (PyEduPluginConfigurator.PYTHON_3.equals(version)) {
baseLevel = LanguageLevel.PYTHON31;
}
else if (version != null) {
@@ -65,9 +65,9 @@ public class PyStudyExecutor implements StudyExecutor {
@NotNull final Task currentTask) {
final List<UserTest> 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);
}
@@ -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());
}
@@ -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";
}
}
@@ -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();