in intellij-plugin/educational-core/src/com/jetbrains/edu/coursecreator/handlers/move/CCTaskMoveHandlerDelegate.kt [27:75]
override fun doMove(
project: Project,
elements: Array<PsiElement>,
targetContainer: PsiElement?,
callback: MoveCallback?
) {
if (targetContainer !is PsiDirectory) {
return
}
val targetVFile = targetContainer.virtualFile
if (!targetVFile.isTaskDirectory(project) && !targetVFile.isLessonDirectory(project)) {
Messages.showInfoMessage(
message("dialog.message.incorrect.movement.task"),
message("dialog.title.incorrect.target.for.move")
)
return
}
StudyTaskManager.getInstance(project).course ?: return
val sourceDirectory = elements[0] as PsiDirectory
val taskToMove = sourceDirectory.virtualFile.getTask(project) ?: return
val sourceLesson = taskToMove.lesson
if (targetVFile.isLessonDirectory(project)) {
//if user moves task to any lesson, this task is inserted as the last task in this lesson
val targetLesson = targetVFile.getLesson(project) ?: return
if (targetVFile.findChild(taskToMove.name) != null) {
Messages.showInfoMessage(
message("dialog.message.task.name.conflict.in.lesson"),
message("dialog.title.incorrect.target.for.move")
)
return
}
val taskList = targetLesson.taskList
val targetTask = if (taskList.isEmpty()) null else taskList[taskList.size - 1]
StudyItemRefactoringHandler.processBeforeTaskMovement(project, taskToMove, targetVFile)
moveTask(sourceDirectory, taskToMove, targetTask, 1, targetVFile, targetLesson)
saveItem(sourceLesson)
saveItem(targetLesson)
}
else {
val lessonDir = targetVFile.parent ?: return
val targetTask = targetVFile.getTask(project) ?: return
val delta = getDelta(project, targetTask) ?: return
StudyItemRefactoringHandler.processBeforeTaskMovement(project, taskToMove, lessonDir)
moveTask(sourceDirectory, taskToMove, targetTask, delta, lessonDir, targetTask.lesson)
saveItem(sourceLesson)
saveItem(targetTask.lesson)
}
ProjectView.getInstance(project).refresh()
}