diff --git a/python/educational/interactive-learning/resources/META-INF/plugin.xml b/python/educational/interactive-learning/resources/META-INF/plugin.xml index bb1adde38e47..823f3242e5dd 100644 --- a/python/educational/interactive-learning/resources/META-INF/plugin.xml +++ b/python/educational/interactive-learning/resources/META-INF/plugin.xml @@ -85,5 +85,6 @@ serviceImplementation="com.jetbrains.edu.learning.StudyTaskManager"/> + \ No newline at end of file diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyMoveDelegate.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyMoveDelegate.java new file mode 100644 index 000000000000..a0417d7c8a66 --- /dev/null +++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyMoveDelegate.java @@ -0,0 +1,54 @@ +package com.jetbrains.edu.learning; + +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.Messages; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiReference; +import com.intellij.refactoring.move.MoveCallback; +import com.intellij.refactoring.move.MoveHandlerDelegate; +import com.jetbrains.edu.courseFormat.Course; +import org.jetbrains.annotations.Nullable; + +public class StudyMoveDelegate extends MoveHandlerDelegate{ + @Override + public boolean canMove(DataContext dataContext) { + return StudyUtils.canRenameOrMove(dataContext); + } + + @Override + public boolean canMove(PsiElement[] elements, @Nullable PsiElement targetContainer) { + if (elements.length == 1) { + Project project = elements[0].getProject(); + Course course = StudyTaskManager.getInstance(project).getCourse(); + if (course == null) { + return false; + } + return !StudyUtils.isRenameableOrMoveable(project, course, elements[0]); + } + return false; + } + + @Override + public boolean isValidTarget(PsiElement psiElement, PsiElement[] sources) { + return true; + } + + @Override + public void doMove(final Project project, + PsiElement[] elements, + @Nullable PsiElement targetContainer, + @Nullable MoveCallback callback) { + Messages.showInfoMessage("This move operation can break the course", "Invalid Move Operation"); + } + + @Override + public boolean tryToMove(PsiElement element, + Project project, + DataContext dataContext, + @Nullable PsiReference reference, + Editor editor) { + return true; + } +} diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyRenameHandler.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyRenameHandler.java index f550acb8f8f0..9ec8201d6758 100644 --- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyRenameHandler.java +++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyRenameHandler.java @@ -1,6 +1,5 @@ package com.jetbrains.edu.learning; -import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; @@ -8,25 +7,12 @@ import com.intellij.openapi.ui.Messages; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.refactoring.rename.RenameHandler; -import com.jetbrains.edu.courseFormat.Course; import org.jetbrains.annotations.NotNull; public class StudyRenameHandler implements RenameHandler { @Override public boolean isAvailableOnDataContext(DataContext dataContext) { - Project project = CommonDataKeys.PROJECT.getData(dataContext); - PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(dataContext); - if (element == null || project == null) { - return false; - } - Course course = StudyTaskManager.getInstance(project).getCourse(); - if (course == null) { - return false; - } - if (!StudyUtils.isRenameableOrMoveable(project, course, element)) { - return true; - } - return false; + return StudyUtils.canRenameOrMove(dataContext); } @Override @@ -36,7 +22,7 @@ public class StudyRenameHandler implements RenameHandler { @Override public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) { - Messages.showWarningDialog("This rename operation can break the course", "Invalid Rename Operation"); + Messages.showInfoMessage("This rename operation can break the course", "Invalid Rename Operation"); } @Override diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyUtils.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyUtils.java index 09ea82ce9691..6265cde16d73 100644 --- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyUtils.java +++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyUtils.java @@ -5,6 +5,8 @@ import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.process.ProcessHandler; import com.intellij.lang.Language; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; @@ -370,4 +372,20 @@ public class StudyUtils { } return true; } + + public static boolean canRenameOrMove(DataContext dataContext) { + Project project = CommonDataKeys.PROJECT.getData(dataContext); + PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(dataContext); + if (element == null || project == null) { + return false; + } + Course course = StudyTaskManager.getInstance(project).getCourse(); + if (course == null) { + return false; + } + if (!isRenameableOrMoveable(project, course, element)) { + return true; + } + return false; + } }