diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCProjectComponent.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCProjectComponent.java index d1548a4244fe..a9f5fc3a68f5 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCProjectComponent.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCProjectComponent.java @@ -26,7 +26,7 @@ import java.util.Map; public class CCProjectComponent extends AbstractProjectComponent { private static final Logger LOG = Logger.getInstance(CCProjectComponent.class); - private final CCVirtualFileListener myTaskFileLifeListener = new CCVirtualFileListener(); + private CCVirtualFileListener myTaskFileLifeListener; private final Project myProject; protected CCProjectComponent(Project project) { @@ -106,11 +106,18 @@ public class CCProjectComponent extends AbstractProjectComponent { public void projectOpened() { migrateIfNeeded(); if (CCUtils.isCourseCreator(myProject)) { - VirtualFileManager.getInstance().addVirtualFileListener(myTaskFileLifeListener); + registerListener(); EduUsagesCollector.projectTypeOpened(CCUtils.COURSE_MODE); } } + public void registerListener() { + if (myTaskFileLifeListener == null) { + myTaskFileLifeListener = new CCVirtualFileListener(myProject); + VirtualFileManager.getInstance().addVirtualFileListener(myTaskFileLifeListener); + } + } + public void projectClosed() { VirtualFileManager.getInstance().removeVirtualFileListener(myTaskFileLifeListener); } diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCVirtualFileListener.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCVirtualFileListener.java index 7a2f28b61b4a..d116df72d72b 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCVirtualFileListener.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCVirtualFileListener.java @@ -17,6 +17,11 @@ import com.jetbrains.edu.learning.courseFormat.tasks.Task; import org.jetbrains.annotations.NotNull; public class CCVirtualFileListener implements VirtualFileListener { + private final Project myProject; + + public CCVirtualFileListener(Project project) { + myProject = project; + } @Override public void fileCreated(@NotNull VirtualFileEvent event) { @@ -27,18 +32,14 @@ public class CCVirtualFileListener implements VirtualFileListener { if (createdFile.getPath().contains(CCUtils.GENERATED_FILES_FOLDER)) { return; } - Project project = ProjectUtil.guessProjectForFile(createdFile); - if (project == null) { + if (myProject.getBasePath() !=null && !FileUtil.isAncestor(myProject.getBasePath(), createdFile.getPath(), true)) { return; } - if (project.getBasePath() !=null && !FileUtil.isAncestor(project.getBasePath(), createdFile.getPath(), true)) { - return; - } - Course course = StudyTaskManager.getInstance(project).getCourse(); + Course course = StudyTaskManager.getInstance(myProject).getCourse(); if (course == null) { return; } - TaskFile taskFile = StudyUtils.getTaskFile(project, createdFile); + TaskFile taskFile = StudyUtils.getTaskFile(myProject, createdFile); if (taskFile != null) { return; } @@ -50,7 +51,7 @@ public class CCVirtualFileListener implements VirtualFileListener { return; } - if (CCUtils.isTestsFile(project, createdFile) + if (CCUtils.isTestsFile(myProject, createdFile) || StudyUtils.isTaskDescriptionFile(createdFile.getName()) || taskRelativePath.contains(EduNames.WINDOW_POSTFIX) || taskRelativePath.contains(EduNames.WINDOWS_POSTFIX) @@ -61,7 +62,7 @@ public class CCVirtualFileListener implements VirtualFileListener { if (taskVF == null) { return; } - Task task = StudyUtils.getTask(project, taskVF); + Task task = StudyUtils.getTask(myProject, taskVF); if (task == null) { return; } diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/coursecreator/PyCCProjectGenerator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/coursecreator/PyCCProjectGenerator.java index 558c12db1091..6d8c60deb37b 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/coursecreator/PyCCProjectGenerator.java +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/coursecreator/PyCCProjectGenerator.java @@ -58,7 +58,8 @@ public class PyCCProjectGenerator extends PythonProjectGenerator