mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
get rid of StudyLanguageManager (EDU-895)
This commit is contained in:
+4
-7
@@ -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);
|
||||
|
||||
+4
-5
@@ -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();
|
||||
}
|
||||
}
|
||||
+3
-4
@@ -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)) {
|
||||
|
||||
+7
-7
@@ -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"/>
|
||||
|
||||
+11
@@ -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();
|
||||
}
|
||||
-17
@@ -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();
|
||||
}
|
||||
+3
-3
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -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"
|
||||
|
||||
+2
-2
@@ -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";
|
||||
|
||||
+14
@@ -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";
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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) {
|
||||
|
||||
+3
-3
@@ -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);
|
||||
}
|
||||
|
||||
+2
-2
@@ -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());
|
||||
}
|
||||
|
||||
-27
@@ -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";
|
||||
}
|
||||
}
|
||||
+3
-10
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user