mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
merge CCLanguageConfigurator to EduPluginConfigurator (EDU-895)
This commit is contained in:
@@ -44,12 +44,6 @@
|
||||
</component>
|
||||
</project-components>
|
||||
|
||||
<extensionPoints>
|
||||
<extensionPoint qualifiedName="Edu.CCLanguageManager" beanClass="com.intellij.lang.LanguageExtensionPoint">
|
||||
<with attribute="implementationClass" implements="com.jetbrains.edu.coursecreator.CCLanguageManager"/>
|
||||
</extensionPoint>
|
||||
</extensionPoints>
|
||||
|
||||
<actions>
|
||||
<action id="CreateLesson" class="com.jetbrains.edu.coursecreator.actions.CCCreateLesson">
|
||||
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
|
||||
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.lang.LanguageExtension;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.jetbrains.edu.learning.courseFormat.Task;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public interface CCLanguageManager {
|
||||
LanguageExtension<CCLanguageManager> INSTANCE = new LanguageExtension<>("Edu.CCLanguageManager");
|
||||
|
||||
boolean doNotPackFile(File pathname);
|
||||
|
||||
default boolean isTestFile(VirtualFile file) {
|
||||
return false;
|
||||
}
|
||||
|
||||
default void createTestsForNewSubtask(@NotNull Project project, @NotNull Task task) {}
|
||||
}
|
||||
+4
-10
@@ -2,7 +2,6 @@ package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Collections2;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.Presentation;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -19,6 +18,7 @@ import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.util.Function;
|
||||
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;
|
||||
@@ -66,12 +66,6 @@ public class CCUtils {
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static CCLanguageManager getStudyLanguageManager(@NotNull final Course course) {
|
||||
Language language = Language.findLanguageByID(course.getLanguageID());
|
||||
return language == null ? null : CCLanguageManager.INSTANCE.forLanguage(language);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method decreases index and updates directory names of
|
||||
* all tasks/lessons that have higher index than specified object
|
||||
@@ -206,11 +200,11 @@ public class CCUtils {
|
||||
if (course == null) {
|
||||
return false;
|
||||
}
|
||||
CCLanguageManager manager = getStudyLanguageManager(course);
|
||||
if (manager == null) {
|
||||
EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
|
||||
if (configurator == null) {
|
||||
return false;
|
||||
}
|
||||
return manager.isTestFile(file);
|
||||
return configurator.isTestFile(file);
|
||||
}
|
||||
|
||||
public static void createResourceFile(VirtualFile createdFile, Course course, VirtualFile taskVF) {
|
||||
|
||||
+3
-2
@@ -6,6 +6,7 @@ import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileAdapter;
|
||||
import com.intellij.openapi.vfs.VirtualFileEvent;
|
||||
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;
|
||||
@@ -46,8 +47,8 @@ public class CCVirtualFileListener extends VirtualFileAdapter {
|
||||
|
||||
String taskRelativePath = StudyUtils.pathRelativeToTask(createdFile);
|
||||
|
||||
CCLanguageManager manager = CCUtils.getStudyLanguageManager(course);
|
||||
if (manager != null && manager.doNotPackFile(new File(createdFile.getPath()))) {
|
||||
EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
|
||||
if (configurator != null && configurator.excludeFromArchive(new File(createdFile.getPath()))) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -21,9 +21,9 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.io.ZipUtil;
|
||||
import com.jetbrains.edu.coursecreator.CCLanguageManager;
|
||||
import com.jetbrains.edu.coursecreator.CCUtils;
|
||||
import com.jetbrains.edu.coursecreator.ui.CreateCourseArchiveDialog;
|
||||
import com.jetbrains.edu.learning.EduPluginConfigurator;
|
||||
import com.jetbrains.edu.learning.StudyTaskManager;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
import com.jetbrains.edu.learning.core.EduUtils;
|
||||
@@ -88,17 +88,17 @@ public class CCCreateCourseArchive extends DumbAwareAction {
|
||||
return;
|
||||
}
|
||||
|
||||
CCLanguageManager manager = CCUtils.getStudyLanguageManager(course);
|
||||
if (manager == null) {
|
||||
EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
|
||||
if (configurator == null) {
|
||||
return;
|
||||
}
|
||||
FileFilter filter = pathname -> !manager.doNotPackFile(pathname);
|
||||
FileFilter filter = pathname -> !configurator.excludeFromArchive(pathname);
|
||||
|
||||
for (VirtualFile child : baseDir.getChildren()) {
|
||||
String name = child.getName();
|
||||
File fromFile = new File(child.getPath());
|
||||
if (CCUtils.GENERATED_FILES_FOLDER.equals(name) || Project.DIRECTORY_STORE_FOLDER.equals(name)
|
||||
|| name.contains("iml") || manager.doNotPackFile(fromFile)) {
|
||||
|| name.contains("iml") || configurator.excludeFromArchive(fromFile)) {
|
||||
continue;
|
||||
}
|
||||
copyChild(archiveFolder, filter, child, fromFile);
|
||||
|
||||
+4
-4
@@ -16,9 +16,9 @@ import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.jetbrains.edu.coursecreator.CCLanguageManager;
|
||||
import com.jetbrains.edu.coursecreator.CCUtils;
|
||||
import com.jetbrains.edu.coursecreator.settings.CCSettings;
|
||||
import com.jetbrains.edu.learning.EduPluginConfigurator;
|
||||
import com.jetbrains.edu.learning.StudySubtaskUtils;
|
||||
import com.jetbrains.edu.learning.StudyTaskManager;
|
||||
import com.jetbrains.edu.learning.StudyUtils;
|
||||
@@ -69,11 +69,11 @@ public class CCNewSubtaskAction extends DumbAwareAction {
|
||||
if (course == null) {
|
||||
return;
|
||||
}
|
||||
CCLanguageManager manager = CCUtils.getStudyLanguageManager(course);
|
||||
if (manager == null) {
|
||||
EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById());
|
||||
if (configurator == null) {
|
||||
return;
|
||||
}
|
||||
manager.createTestsForNewSubtask(project, task);
|
||||
configurator.createTestsForNewSubtask(project, task);
|
||||
}
|
||||
|
||||
private static void createTaskDescriptionFile(Project project, VirtualFile taskDir, int index) {
|
||||
|
||||
+12
@@ -5,13 +5,17 @@ import com.intellij.ide.util.DirectoryUtil;
|
||||
import com.intellij.lang.LanguageExtension;
|
||||
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.core.EduNames;
|
||||
import com.jetbrains.edu.learning.courseFormat.Course;
|
||||
import com.jetbrains.edu.learning.courseFormat.StudyItem;
|
||||
import com.jetbrains.edu.learning.courseFormat.Task;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public interface EduPluginConfigurator {
|
||||
LanguageExtension<EduPluginConfigurator> INSTANCE = new LanguageExtension<>("Edu.pluginConfigurator");
|
||||
|
||||
@@ -42,4 +46,12 @@ public interface EduPluginConfigurator {
|
||||
void createTaskContent(@NotNull Project project,
|
||||
@Nullable IdeView view,
|
||||
PsiDirectory taskDirectory);
|
||||
|
||||
boolean excludeFromArchive(File pathname);
|
||||
|
||||
default boolean isTestFile(VirtualFile file) {
|
||||
return false;
|
||||
}
|
||||
|
||||
default void createTestsForNewSubtask(@NotNull Project project, @NotNull Task task) {}
|
||||
}
|
||||
|
||||
@@ -5,10 +5,6 @@
|
||||
<runConfigurationProducer implementation="com.jetbrains.edu.coursecreator.run.PyCCRunTestsConfigurationProducer"/>
|
||||
</extensions>
|
||||
|
||||
<extensions defaultExtensionNs="Edu">
|
||||
<CCLanguageManager implementationClass="com.jetbrains.edu.coursecreator.PyCCLanguageManager" language="Python"/>
|
||||
</extensions>
|
||||
|
||||
<actions>
|
||||
<action class="com.jetbrains.edu.coursecreator.PyCCCreateProjectFromArchive" id="PyCC.NewEdu">
|
||||
<add-to-group group-id="CCFileGroup" anchor="last"/>
|
||||
|
||||
-70
@@ -1,70 +0,0 @@
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.jetbrains.edu.learning.StudyUtils;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
import com.jetbrains.edu.learning.courseFormat.Task;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class PyCCLanguageManager implements CCLanguageManager {
|
||||
private static final Logger LOG = Logger.getInstance(PyCCLanguageManager.class);
|
||||
|
||||
@Override
|
||||
public boolean doNotPackFile(File pathname) {
|
||||
String name = pathname.getName();
|
||||
return name.contains("__pycache__") || name.contains(".pyc");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTestFile(VirtualFile file) {
|
||||
String name = file.getName();
|
||||
if (EduNames.TESTS_FILE.equals(name)) {
|
||||
return true;
|
||||
}
|
||||
return name.contains(FileUtil.getNameWithoutExtension(EduNames.TESTS_FILE)) && name.contains(EduNames.SUBTASK_MARKER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createTestsForNewSubtask(@NotNull Project project, @NotNull Task task) {
|
||||
VirtualFile taskDir = task.getTaskDir(project);
|
||||
if (taskDir == null) {
|
||||
return;
|
||||
}
|
||||
int nextSubtaskIndex = task.getLastSubtaskIndex() + 1;
|
||||
String nextSubtaskTestsFileName = getSubtaskTestsFileName(nextSubtaskIndex);
|
||||
ApplicationManager.getApplication().runWriteAction(() -> {
|
||||
try {
|
||||
PsiDirectory taskPsiDir = PsiManager.getInstance(project).findDirectory(taskDir);
|
||||
FileTemplate testsTemplate = FileTemplateManager.getInstance(project).getInternalTemplate(EduNames.TESTS_FILE);
|
||||
if (taskPsiDir == null || testsTemplate == null) {
|
||||
return;
|
||||
}
|
||||
FileTemplateUtil.createFromTemplate(testsTemplate, nextSubtaskTestsFileName, null, taskPsiDir);
|
||||
StudyUtils.createFromTemplate(project, taskPsiDir, nextSubtaskTestsFileName, null, false);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String getSubtaskTestsFileName(int index) {
|
||||
return index == 0 ? EduNames.TESTS_FILE : FileUtil.getNameWithoutExtension(EduNames.TESTS_FILE) +
|
||||
EduNames.SUBTASK_MARKER +
|
||||
index + "." +
|
||||
FileUtilRt.getExtension(EduNames.TESTS_FILE);
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -10,7 +10,7 @@ import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.jetbrains.edu.coursecreator.CCUtils;
|
||||
import com.jetbrains.edu.coursecreator.PyCCLanguageManager;
|
||||
import com.jetbrains.edu.learning.PyEduPluginConfigurator;
|
||||
import com.jetbrains.edu.learning.StudyUtils;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
import com.jetbrains.edu.learning.courseFormat.Task;
|
||||
@@ -87,7 +87,7 @@ public class PyCCRunTestsConfigurationProducer extends RunConfigurationProducer<
|
||||
if (task == null) {
|
||||
return null;
|
||||
}
|
||||
String testsFileName = PyCCLanguageManager.getSubtaskTestsFileName(task.getActiveSubtaskIndex());
|
||||
String testsFileName = PyEduPluginConfigurator.getSubtaskTestsFileName(task.getActiveSubtaskIndex());
|
||||
String taskDirPath = FileUtil.toSystemDependentName(taskDir.getPath());
|
||||
String testsPath = taskDir.findChild(EduNames.SRC) != null ?
|
||||
FileUtil.join(taskDirPath, EduNames.SRC, testsFileName) :
|
||||
|
||||
+58
@@ -1,22 +1,34 @@
|
||||
package com.jetbrains.edu.learning;
|
||||
|
||||
import com.intellij.ide.IdeView;
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateUtil;
|
||||
import com.intellij.ide.util.DirectoryUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
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.core.EduNames;
|
||||
import com.jetbrains.edu.learning.courseFormat.Course;
|
||||
import com.jetbrains.edu.learning.courseFormat.StudyItem;
|
||||
import com.jetbrains.edu.learning.courseFormat.Task;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class PyEduPluginConfigurator implements EduPluginConfigurator {
|
||||
public static final String PYTHON_3 = "3.x";
|
||||
public static final String PYTHON_2 = "2.x";
|
||||
private static final String TESTS_PY = "tests.py";
|
||||
private static final Logger LOG = Logger.getInstance(PyEduPluginConfigurator.class);
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
@@ -51,4 +63,50 @@ public class PyEduPluginConfigurator implements EduPluginConfigurator {
|
||||
StudyUtils.getTaskDescriptionFileName(CCSettings.getInstance().useHtmlAsDefaultTaskFormat()), view,
|
||||
false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean excludeFromArchive(File pathname) {
|
||||
String name = pathname.getName();
|
||||
return name.contains("__pycache__") || name.contains(".pyc");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTestFile(VirtualFile file) {
|
||||
String name = file.getName();
|
||||
if (EduNames.TESTS_FILE.equals(name)) {
|
||||
return true;
|
||||
}
|
||||
return name.contains(FileUtil.getNameWithoutExtension(EduNames.TESTS_FILE)) && name.contains(EduNames.SUBTASK_MARKER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createTestsForNewSubtask(@NotNull Project project, @NotNull Task task) {
|
||||
VirtualFile taskDir = task.getTaskDir(project);
|
||||
if (taskDir == null) {
|
||||
return;
|
||||
}
|
||||
int nextSubtaskIndex = task.getLastSubtaskIndex() + 1;
|
||||
String nextSubtaskTestsFileName = getSubtaskTestsFileName(nextSubtaskIndex);
|
||||
ApplicationManager.getApplication().runWriteAction(() -> {
|
||||
try {
|
||||
PsiDirectory taskPsiDir = PsiManager.getInstance(project).findDirectory(taskDir);
|
||||
FileTemplate testsTemplate = FileTemplateManager.getInstance(project).getInternalTemplate(EduNames.TESTS_FILE);
|
||||
if (taskPsiDir == null || testsTemplate == null) {
|
||||
return;
|
||||
}
|
||||
FileTemplateUtil.createFromTemplate(testsTemplate, nextSubtaskTestsFileName, null, taskPsiDir);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String getSubtaskTestsFileName(int index) {
|
||||
return index == 0 ? EduNames.TESTS_FILE : FileUtil.getNameWithoutExtension(EduNames.TESTS_FILE) +
|
||||
EduNames.SUBTASK_MARKER +
|
||||
index + "." +
|
||||
FileUtilRt.getExtension(EduNames.TESTS_FILE);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user