mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-06 06:21:16 +07:00
new subtask action
This commit is contained in:
committed by
liana.bakradze
parent
0b5b593874
commit
6d25e29ac0
+66
-2
@@ -2,15 +2,26 @@ package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
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.util.DocumentUtil;
|
||||
import com.jetbrains.edu.learning.StudyTaskManager;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
import com.jetbrains.edu.learning.courseFormat.Task;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PyCCLanguageManager implements CCLanguageManager {
|
||||
private static final Logger LOG = Logger.getInstance(PyCCLanguageManager.class);
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
@@ -45,6 +56,59 @@ public class PyCCLanguageManager implements CCLanguageManager {
|
||||
|
||||
@Override
|
||||
public boolean isTestFile(VirtualFile file) {
|
||||
return EduNames.TESTS_FILE.equals(file.getName());
|
||||
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 prevSubtaskIndex = task.getActiveSubtaskIndex();
|
||||
String name = prevSubtaskIndex == 0 ? EduNames.TESTS_FILE : getSubtaskTestsFileName(prevSubtaskIndex);
|
||||
VirtualFile testsFile = taskDir.findChild(name);
|
||||
if (testsFile == null) {
|
||||
return;
|
||||
}
|
||||
Document document = FileDocumentManager.getInstance().getDocument(testsFile);
|
||||
if (document == null) {
|
||||
return;
|
||||
}
|
||||
CharSequence prevTestText = document.getCharsSequence();
|
||||
int nextSubtaskIndex = prevSubtaskIndex + 1;
|
||||
String nextSubtaskTestsFileName = getSubtaskTestsFileName(nextSubtaskIndex);
|
||||
ApplicationManager.getApplication().runWriteAction(() -> {
|
||||
try {
|
||||
VirtualFile nextSubtaskTestsFile = taskDir.createChildData(this, nextSubtaskTestsFileName);
|
||||
StudyTaskManager.getInstance(project).addInvisibleFiles(nextSubtaskTestsFile.getPath());
|
||||
Document nextSubtaskDocument = FileDocumentManager.getInstance().getDocument(nextSubtaskTestsFile);
|
||||
if (nextSubtaskDocument == null) {
|
||||
return;
|
||||
}
|
||||
String header = "# This is test for subtask " + nextSubtaskIndex + ". We've already copied tests from previous subtask here.\n\n";
|
||||
DocumentUtil.writeInRunUndoTransparentAction(() -> {
|
||||
nextSubtaskDocument.insertString(0, header);
|
||||
nextSubtaskDocument.insertString(header.length(), prevTestText);
|
||||
FileDocumentManager.getInstance().saveDocument(nextSubtaskDocument);
|
||||
});
|
||||
}
|
||||
catch (IOException 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