package com.jetbrains.edu.coursecreator;
import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.refactoring.listeners.RefactoringElementAdapter;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.listeners.RefactoringElementListenerProvider;
+import com.jetbrains.edu.learning.StudyTaskManager;
+import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.core.EduNames;
import com.jetbrains.edu.learning.courseFormat.Course;
import com.jetbrains.edu.learning.courseFormat.Lesson;
import com.jetbrains.edu.learning.courseFormat.Task;
import com.jetbrains.edu.learning.courseFormat.TaskFile;
-import com.jetbrains.edu.coursecreator.actions.CCRunTestsAction;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.io.IOException;
import java.util.Map;
public class CCRefactoringElementListenerProvider implements RefactoringElementListenerProvider {
+ private static final Logger LOG = Logger.getInstance(CCRefactoringElementListenerProvider.class);
+
@Nullable
@Override
public RefactoringElementListener getListener(PsiElement element) {
private static void tryToRenameTaskFile(PsiFile file, String oldName) {
final PsiDirectory taskDir = file.getContainingDirectory();
- final CCProjectService service = CCProjectService.getInstance(file.getProject());
- Course course = service.getCourse();
+ Course course = StudyTaskManager.getInstance(file.getProject()).getCourse();
if (course == null) {
return;
}
if (task == null) {
return;
}
+ Map<String, TaskFile> taskFiles = task.getTaskFiles();
+ TaskFile taskFile = task.getTaskFile(oldName);
+ if (taskFile == null) {
+ return;
+ }
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
- CCRunTestsAction.clearTestEnvironment(taskDir.getVirtualFile(), taskDir.getProject());
+ VirtualFile patternFile = StudyUtils.getPatternFile(taskFile, oldName);
+ if (patternFile != null) {
+ try {
+ patternFile.delete(CCRefactoringElementListenerProvider.class);
+ }
+ catch (IOException e) {
+ LOG.info(e);
+ }
+ }
}
});
- Map<String, TaskFile> taskFiles = task.getTaskFiles();
- TaskFile taskFile = task.getTaskFile(oldName);
+
taskFiles.remove(oldName);
taskFiles.put(file.getName(), taskFile);
+ CCUtils.createResourceFile(file.getVirtualFile(), course, taskDir.getVirtualFile());
}
@Override
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.Ref;
+import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileEvent;
import com.intellij.psi.PsiDirectory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
}
return manager.isTestFile(file);
}
+
+ public static void createResourceFile(VirtualFile createdFile, Course course, VirtualFile taskVF) {
+ VirtualFile lessonVF = taskVF.getParent();
+ if (lessonVF == null) {
+ return;
+ }
+
+ String taskResourcesPath = FileUtil.join(course.getCourseDirectory(), lessonVF.getName(), taskVF.getName());
+ File taskResourceFile = new File(taskResourcesPath);
+ if (!taskResourceFile.exists()) {
+ if (!taskResourceFile.mkdirs()) {
+ LOG.info("Failed to create resources for task " + taskResourcesPath);
+ }
+ }
+ try {
+ File toFile = new File(taskResourceFile, createdFile.getName());
+ FileUtil.copy(new File(createdFile.getPath()), toFile);
+ }
+ catch (IOException e) {
+ LOG.info("Failed to copy created task file to resources " + createdFile.getPath());
+ }
+ }
}
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectUtil;
-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.courseFormat.*;
import org.jetbrains.annotations.NotNull;
-import java.io.File;
-import java.io.IOException;
-
public class CCVirtualFileListener extends VirtualFileAdapter {
private static final Logger LOG = Logger.getInstance(CCVirtualFileListener.class);
return;
}
- createResourceFile(createdFile, course, taskVF);
+ CCUtils.createResourceFile(createdFile, course, taskVF);
task.addTaskFile(name, 1);
}
- private static void createResourceFile(VirtualFile createdFile, Course course, VirtualFile taskVF) {
- VirtualFile lessonVF = taskVF.getParent();
- if (lessonVF == null) {
- return;
- }
-
- String taskResourcesPath = FileUtil.join(course.getCourseDirectory(), lessonVF.getName(), taskVF.getName());
- File taskResourceFile = new File(taskResourcesPath);
- if (!taskResourceFile.exists()) {
- if (!taskResourceFile.mkdirs()) {
- LOG.info("Failed to create resources for task " + taskResourcesPath);
- }
- }
- try {
- File toFile = new File(taskResourceFile, createdFile.getName());
- FileUtil.copy(new File(createdFile.getPath()), toFile);
- }
- catch (IOException e) {
- LOG.info("Failed to copy created task file to resources " + createdFile.getPath());
- }
- }
-
@Override
public void fileDeleted(@NotNull VirtualFileEvent event) {
VirtualFile removedFile = event.getFile();
@Nullable
public static Document getPatternDocument(@NotNull final TaskFile taskFile, String name) {
+ VirtualFile patternFile = getPatternFile(taskFile, name);
+ if (patternFile == null) {
+ return null;
+ }
+ return FileDocumentManager.getInstance().getDocument(patternFile);
+ }
+
+ @Nullable
+ public static VirtualFile getPatternFile(@NotNull TaskFile taskFile, String name) {
Task task = taskFile.getTask();
String lessonDir = EduNames.LESSON + String.valueOf(task.getLesson().getIndex());
String taskDir = EduNames.TASK + String.valueOf(task.getIndex());
Course course = task.getLesson().getCourse();
File resourceFile = new File(course.getCourseDirectory());
if (!resourceFile.exists()) {
- return null;
+ return null;
}
String patternPath = FileUtil.join(resourceFile.getPath(), lessonDir, taskDir, name);
VirtualFile patternFile = VfsUtil.findFileByIoFile(new File(patternPath), true);
if (patternFile == null) {
return null;
}
- return FileDocumentManager.getInstance().getDocument(patternFile);
+ return patternFile;
}
public static boolean isRenameableOrMoveable(@NotNull final Project project, @NotNull final Course course, @NotNull final PsiElement element) {
package com.jetbrains.edu.coursecreator;
+import com.intellij.openapi.project.Project;
import com.jetbrains.python.edu.PyEduUtils;
import com.jetbrains.python.psi.PyQualifiedExpression;
import com.jetbrains.python.psi.resolve.PyReferenceResolveProvider;
@NotNull
@Override
public List<RatedResolveResult> resolveName(@NotNull final PyQualifiedExpression element) {
- if (CCProjectService.getInstance(element.getProject()).getCourse() == null) {
+ Project project = element.getProject();
+ if (!CCUtils.isCourseCreator(project)) {
return Collections.emptyList();
}
return PyEduUtils.getResolveResultFromContainingDirectory(element);