diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/ui/TaskDialogPanelProvider.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/ui/TaskDialogPanelProvider.java index 9077d3440977..4cf9c05d58fc 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/ui/TaskDialogPanelProvider.java +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/ui/TaskDialogPanelProvider.java @@ -19,7 +19,7 @@ public abstract class TaskDialogPanelProvider { private final static ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.tasks.dialogPanelProvider"); - public static List getOpenTaskPanels(@NotNull Project project, @NotNull Task task) { + public static List getOpenTaskPanels(@NotNull Project project, @NotNull LocalTask task) { return ContainerUtil.mapNotNull(EP_NAME.getExtensionList(), (NullableFunction)provider -> provider.getOpenTaskPanel(project, task)); } @@ -29,9 +29,15 @@ public abstract class TaskDialogPanelProvider { (NullableFunction)provider -> provider.getCloseTaskPanel(project, task)); } + @Deprecated @Nullable public abstract TaskDialogPanel getOpenTaskPanel(@NotNull Project project, @NotNull Task task); + @Nullable + public TaskDialogPanel getOpenTaskPanel(@NotNull Project project, @NotNull LocalTask task) { + return getOpenTaskPanel(project, (Task)task); + } + @Nullable public abstract TaskDialogPanel getCloseTaskPanel(@NotNull Project project, @NotNull LocalTask task); } diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java index 25396b9a6be4..2abc6338791f 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java @@ -137,14 +137,14 @@ public class OpenTaskDialog extends DialogWrapper { } } } - taskManager.activateTask(myTask, isClearContext()); - if (myTask.getType() == TaskType.EXCEPTION && AnalyzeTaskStacktraceAction.hasTexts(myTask)) { - AnalyzeTaskStacktraceAction.analyzeStacktrace(myTask, myProject); - } for (TaskDialogPanel panel : myPanels) { panel.commit(); } + taskManager.activateTask(myTask, isClearContext()); + if (myTask.getType() == TaskType.EXCEPTION && AnalyzeTaskStacktraceAction.hasTexts(myTask)) { + AnalyzeTaskStacktraceAction.analyzeStacktrace(myTask, myProject); + } } private boolean isClearContext() { diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java index ebaa8326626d..f1fbd0b76d5f 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java @@ -62,12 +62,14 @@ public class VcsOpenTaskPanel extends TaskDialogPanel { private static final String START_FROM_BRANCH = "start.from.branch"; private final TaskManagerImpl myTaskManager; private final Project myProject; + private final LocalTask myTask; private final LocalTask myPreviousTask; - public VcsOpenTaskPanel(Project project, Task task) { + public VcsOpenTaskPanel(Project project, LocalTask task) { myTaskManager = (TaskManagerImpl)TaskManager.getManager(project); myProject = project; + myTask = task; myPreviousTask = myTaskManager.getActiveTask(); ActionListener listener = new ActionListener() { @Override @@ -196,21 +198,20 @@ public class VcsOpenTaskPanel extends TaskDialogPanel { myTaskManager.getState().createBranch = myCreateBranch.isSelected(); myTaskManager.getState().useBranch = myUseBranch.isSelected(); - LocalTask localTask = myTaskManager.getActiveTask(); if (myShelveChanges.isSelected()) { myTaskManager.shelveChanges(myPreviousTask, myPreviousTask.getSummary()); } if (myCreateChangelist.isSelected()) { - myTaskManager.createChangeList(localTask, myChangelistName.getText()); + myTaskManager.createChangeList(myTask, myChangelistName.getText()); } else { ChangeListManager changeListManager = ChangeListManager.getInstance(myProject); - String comment = TaskUtil.getChangeListComment(localTask); + String comment = TaskUtil.getChangeListComment(myTask); changeListManager.editComment(changeListManager.getDefaultListName(), comment); } if (myCreateBranch.isSelected()) { VcsTaskHandler.TaskInfo branchFrom = (VcsTaskHandler.TaskInfo)myBranchFrom.getSelectedItem(); - Runnable createBranch = () -> myTaskManager.createBranch(localTask, myPreviousTask, myBranchName.getText(), branchFrom); + Runnable createBranch = () -> myTaskManager.createBranch(myTask, myPreviousTask, myBranchName.getText(), branchFrom); VcsTaskHandler.TaskInfo[] current = myVcsTaskHandler.getCurrentTasks(); if (branchFrom != null && (current.length == 0 || !current[0].equals(branchFrom))) { myVcsTaskHandler.switchToTask(branchFrom, createBranch); @@ -224,7 +225,7 @@ public class VcsOpenTaskPanel extends TaskDialogPanel { if (branch != null) { VcsTaskHandler.TaskInfo[] tasks = myVcsTaskHandler.getCurrentTasks(); TaskManagerImpl.addBranches(myPreviousTask, tasks, true); - myVcsTaskHandler.switchToTask(branch, () -> TaskManagerImpl.addBranches(localTask, new VcsTaskHandler.TaskInfo[]{branch}, false)); + myVcsTaskHandler.switchToTask(branch, () -> TaskManagerImpl.addBranches(myTask, new VcsTaskHandler.TaskInfo[]{branch}, false)); } } } diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsTaskDialogPanelProvider.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsTaskDialogPanelProvider.java index 48fca23aa936..55a705b673ed 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsTaskDialogPanelProvider.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsTaskDialogPanelProvider.java @@ -31,6 +31,12 @@ public class VcsTaskDialogPanelProvider extends TaskDialogPanelProvider { @Nullable @Override public TaskDialogPanel getOpenTaskPanel(@NotNull Project project, @NotNull Task task) { + return null; + } + + @Nullable + @Override + public TaskDialogPanel getOpenTaskPanel(@NotNull Project project, @NotNull LocalTask task) { return TaskManager.getManager(project).isVcsEnabled() ? new VcsOpenTaskPanel(project, task) : null; } diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java index d901acb071ef..55d760e13b82 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java @@ -79,7 +79,7 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { Task task = myRepository.findTask("TEST-001"); assertNotNull(task); - activateAndCreateChangelist(task); + runOpenTaskDialog(task); assertEquals(2, myTaskManager.getLocalTasks().size()); @@ -98,7 +98,7 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { assertEquals(2, myChangeListManager.getChangeListsCopy().size()); assertEquals(defaultTask, myTaskManager.getAssociatedTask(myChangeListManager.getChangeListsCopy().get(0))); - activateAndCreateChangelist(localTask); + myTaskManager.activateTask(localTask, false); assertEquals(1, localTask.getChangeLists().size()); assertEquals(1, defaultTask.getChangeLists().size()); @@ -135,12 +135,12 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { public void testAddChangeListViaCreateChangeListAction() { Task task = myRepository.findTask("TEST-001"); assertNotNull(task); - activateAndCreateChangelist(task); + runOpenTaskDialog(task); myChangeListManager.waitUntilRefreshed(); LocalTask defaultTask = myTaskManager.findTask(LocalTaskImpl.DEFAULT_TASK_ID); assertNotNull(defaultTask); - activateAndCreateChangelist(defaultTask); + myTaskManager.activateTask(defaultTask, false); myChangeListManager.waitUntilRefreshed(); assertEquals(defaultTask, myTaskManager.getActiveTask()); @@ -174,12 +174,12 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { public void testRemoveChangelistViaVcsAction() { Task task = myRepository.findTask("TEST-001"); assertNotNull(task); - activateAndCreateChangelist(task); + runOpenTaskDialog(task); myChangeListManager.waitUntilRefreshed(); LocalTask defaultTask = myTaskManager.findTask(LocalTaskImpl.DEFAULT_TASK_ID); assertNotNull(defaultTask); - activateAndCreateChangelist(defaultTask); + myTaskManager.activateTask(defaultTask, false); myChangeListManager.waitUntilRefreshed(); assertEquals(defaultTask, myTaskManager.getActiveTask()); @@ -200,23 +200,15 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { assertEquals(LocalChangeList.DEFAULT_NAME, defaultChangeList.getName()); } - private void activateAndCreateChangelist(Task task) { - LocalTaskImpl localTask = new LocalTaskImpl(task); - if (localTask.getChangeLists().isEmpty()) { - myTaskManager.createChangeList(localTask, myTaskManager.getChangelistName(localTask)); - } - myTaskManager.activateTask(task, false); - } - public void testAddChangeListViaVcsAction() { Task task = myRepository.findTask("TEST-001"); assertNotNull(task); - activateAndCreateChangelist(task); + runOpenTaskDialog(task); myChangeListManager.waitUntilRefreshed(); LocalTask defaultTask = myTaskManager.findTask(LocalTaskImpl.DEFAULT_TASK_ID); assertNotNull(defaultTask); - activateAndCreateChangelist(defaultTask); + myTaskManager.activateTask(defaultTask, false); myChangeListManager.waitUntilRefreshed(); assertEquals(defaultTask, myTaskManager.getActiveTask()); @@ -267,7 +259,7 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { myRepository.setCommitMessageFormat("{id} {summary} {number} {project}"); Task task = myRepository.findTask("TEST-001"); assertNotNull(task); - activateAndCreateChangelist(task); + runOpenTaskDialog(task); myChangeListManager.waitUntilRefreshed(); LocalTask localTask = myTaskManager.getActiveTask(); assertNotNull(localTask); @@ -285,7 +277,7 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { Task task = myRepository.findTask("TEST-001"); assertNotNull(task); assertEquals(1, myChangeListManager.getChangeListsCopy().size()); // default change list should be here - activateAndCreateChangelist(task); + runOpenTaskDialog(task); myChangeListManager.waitUntilRefreshed(); assertEquals(2, myTaskManager.getLocalTasks().size()); @@ -413,15 +405,15 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { public void testRestoreChangelist() { final LocalTaskImpl task = new LocalTaskImpl("foo", "bar"); - activateAndCreateChangelist(task); - activateAndCreateChangelist(new LocalTaskImpl("next", "")); + runOpenTaskDialog(task); + runOpenTaskDialog(new LocalTaskImpl("next", "")); final String changelistName = myTaskManager.getChangelistName(task); myChangeListManager.removeChangeList(changelistName); myChangeListManager.invokeAfterUpdate(() -> { assertTrue(myTaskManager.isLocallyClosed(task)); - activateAndCreateChangelist(task); + myTaskManager.activateTask(task, false); assertNotNull(myChangeListManager.findChangeList(changelistName)); }, InvokeAfterUpdateMode.SYNCHRONOUS_NOT_CANCELLABLE, "foo", ModalityState.NON_MODAL); } @@ -481,7 +473,14 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { assertEquals("007 Bond", myChangeListManager.getDefaultChangeList().getComment()); } - private void runOpenTaskDialog(LocalTaskImpl task) { + public void testOpenTask() { + LocalTaskImpl task = new LocalTaskImpl("id", "summary"); + runOpenTaskDialog(task); + List lists = task.getChangeLists(); + assertEquals(1, lists.size()); + } + + private void runOpenTaskDialog(Task task) { OpenTaskDialog dialog = new OpenTaskDialog(getProject(), task); try { dialog.createTask();