1 package com.jetbrains.edu.coursecreator.projectView;
3 import com.intellij.ide.projectView.ViewSettings;
4 import com.intellij.ide.util.treeView.AbstractTreeNode;
5 import com.intellij.openapi.project.Project;
6 import com.intellij.openapi.vfs.VirtualFile;
7 import com.intellij.psi.PsiDirectory;
8 import com.intellij.psi.PsiElement;
9 import com.intellij.psi.PsiFile;
10 import com.jetbrains.edu.coursecreator.CCUtils;
11 import com.jetbrains.edu.learning.StudyLanguageManager;
12 import com.jetbrains.edu.learning.StudyTaskManager;
13 import com.jetbrains.edu.learning.StudyUtils;
14 import com.jetbrains.edu.learning.core.EduNames;
15 import com.jetbrains.edu.learning.courseFormat.Course;
16 import com.jetbrains.edu.learning.courseFormat.Task;
17 import com.jetbrains.edu.learning.projectView.TaskDirectoryNode;
18 import org.jetbrains.annotations.NotNull;
19 import org.jetbrains.annotations.Nullable;
21 public class CCTaskDirectoryNode extends TaskDirectoryNode {
22 public CCTaskDirectoryNode(@NotNull Project project,
24 ViewSettings viewSettings,
26 super(project, value, viewSettings, task);
31 public AbstractTreeNode modifyChildNode(AbstractTreeNode childNode) {
32 AbstractTreeNode node = super.modifyChildNode(childNode);
36 Object value = childNode.getValue();
37 if (value instanceof PsiElement) {
38 PsiFile psiFile = ((PsiElement)value).getContainingFile();
39 VirtualFile virtualFile = psiFile.getVirtualFile();
40 if (virtualFile == null) {
43 if (StudyUtils.isTaskDescriptionFile(virtualFile.getName())) {
46 if (!CCUtils.isTestsFile(myProject, virtualFile) || !myTask.hasSubtasks()) {
47 return new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings);
50 Course course = StudyTaskManager.getInstance(myProject).getCourse();
54 StudyLanguageManager manager = StudyUtils.getLanguageManager(course);
55 if (manager == null) {
56 return new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings);
58 String testFileName = manager.getTestFileName();
59 return isActiveSubtaskTest(virtualFile) ? new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings, testFileName) : null;
64 private boolean isActiveSubtaskTest(VirtualFile virtualFile) {
65 if (!myTask.hasSubtasks()) {
69 boolean isSubtaskTestFile = virtualFile.getName().contains(EduNames.SUBTASK_MARKER);
70 if (myTask.getActiveSubtaskIndex() == 0) {
71 return !isSubtaskTestFile;
73 if (!isSubtaskTestFile) {
76 String nameWithoutExtension = virtualFile.getNameWithoutExtension();
77 int stepMarkerStart = nameWithoutExtension.indexOf(EduNames.SUBTASK_MARKER);
78 int stepIndex = Integer.valueOf(nameWithoutExtension.substring(EduNames.SUBTASK_MARKER.length() + stepMarkerStart));
79 return stepIndex == myTask.getActiveSubtaskIndex();