From ef8771c4bbf342a943d14b840511224e6e41bf12 Mon Sep 17 00:00:00 2001 From: Liana Bakradze Date: Tue, 25 Nov 2014 13:47:30 +0300 Subject: [PATCH] EDU-268 Task directories should be marked as source roots automatically --- .../plugins/coursecreator/CCUtils.java | 39 +++++++++++++++++++ .../coursecreator/actions/CCCreateTask.java | 2 + 2 files changed, 41 insertions(+) create mode 100644 python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCUtils.java diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCUtils.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCUtils.java new file mode 100644 index 000000000000..e2cc9d575638 --- /dev/null +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCUtils.java @@ -0,0 +1,39 @@ +package org.jetbrains.plugins.coursecreator; + +import com.intellij.ide.projectView.actions.MarkRootActionBase; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleUtilCore; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ContentEntry; +import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; + +public class CCUtils { + private static final Logger LOG = Logger.getInstance(CCUtils.class.getName()); + + public static void markDirAsSourceRoot(@NotNull final VirtualFile dir, @NotNull final Project project) { + final Module module = ModuleUtilCore.findModuleForFile(dir, project); + if (module == null) { + LOG.info("Module for " + dir.getPath() + " was not found"); + return; + } + final ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel(); + ContentEntry entry = MarkRootActionBase.findContentEntry(model, dir); + if (entry == null) { + LOG.info("Content entry for " + dir.getPath() + " was not found"); + return; + } + entry.addSourceFolder(dir, false); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + model.commit(); + module.getProject().save(); + } + }); + } +} diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCCreateTask.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCCreateTask.java index a0a16687bf23..9c363540a596 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCCreateTask.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCCreateTask.java @@ -22,6 +22,7 @@ import com.intellij.psi.PsiElement; import com.intellij.util.PlatformIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.coursecreator.CCProjectService; +import org.jetbrains.plugins.coursecreator.CCUtils; import org.jetbrains.plugins.coursecreator.format.Course; import org.jetbrains.plugins.coursecreator.format.Lesson; import org.jetbrains.plugins.coursecreator.format.Task; @@ -66,6 +67,7 @@ public class CCCreateTask extends DumbAwareAction { public void run() { final PsiDirectory taskDirectory = DirectoryUtil.createSubdirectories("task" + (size + 1), lessonDir, "\\/"); if (taskDirectory != null) { + CCUtils.markDirAsSourceRoot(taskDirectory.getVirtualFile(), project); final FileTemplate template = FileTemplateManager.getInstance().getInternalTemplate("task.html"); final FileTemplate testsTemplate = FileTemplateManager.getInstance().getInternalTemplate("tests"); final FileTemplate taskTemplate = FileTemplateManager.getInstance().getInternalTemplate("task.answer");