diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java index 9139b7b85bcb..099ffd5a7ac3 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java @@ -51,6 +51,8 @@ public abstract class TaskManager { public abstract Task updateIssue(String id); public abstract LocalTask[] getLocalTasks(); + + public abstract LocalTask addTask(Task issue); public abstract LocalTask createLocalTask(String summary); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskAction.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskAction.java index 434ee3d9b798..ee555ec826b4 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskAction.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskAction.java @@ -117,7 +117,7 @@ public class SwitchTaskAction extends BaseTaskAction { } if (vcsEnabled && !temp.isEmpty()) { group.addSeparator(); - for (int i = 0, tempSize = temp.size(); i < Math.min(tempSize, 5); i++) { + for (int i = 0, tempSize = temp.size(); i < Math.min(tempSize, 15); i++) { LocalTask task = temp.get(i); group.add(createActivateTaskAction(manager, project, task, shiftPressed, true)); } diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskCheckinHandlerFactory.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskCheckinHandlerFactory.java index db91fce8a788..39697014cd3a 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskCheckinHandlerFactory.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskCheckinHandlerFactory.java @@ -20,11 +20,16 @@ import com.intellij.openapi.vcs.CheckinProjectPanel; import com.intellij.openapi.vcs.changes.CommitContext; import com.intellij.openapi.vcs.checkin.CheckinHandler; import com.intellij.openapi.vcs.checkin.CheckinHandlerFactory; +import com.intellij.tasks.LocalTask; +import com.intellij.tasks.Task; import com.intellij.tasks.TaskManager; +import com.intellij.tasks.TaskRepository; import com.intellij.tasks.context.WorkingContextManager; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.Date; /** * @author Dmitry Avdeev @@ -41,12 +46,23 @@ public class TaskCheckinHandlerFactory extends CheckinHandlerFactory { final String message = panel.getCommitMessage(); if (message != null) { final Project project = panel.getProject(); - TaskManagerImpl manager = (TaskManagerImpl)TaskManager.getManager(project); + final TaskManagerImpl manager = (TaskManagerImpl)TaskManager.getManager(project); if (manager.getState().saveContextOnCommit) { + final Task task = findTask(message, manager); + + //noinspection SSBasedInspection SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - WorkingContextManager.getInstance(project).saveContext(null, message); + final WorkingContextManager contextManager = WorkingContextManager.getInstance(project); + if (task != null) { + LocalTask localTask = manager.addTask(task); + localTask.setUpdated(new Date()); + contextManager.saveContext(localTask); + } + else { + contextManager.saveContext(null, message); + } } }); } @@ -54,4 +70,22 @@ public class TaskCheckinHandlerFactory extends CheckinHandlerFactory { } }; } + + @Nullable + private static Task findTask(String message, TaskManager manager) { + TaskRepository[] repositories = manager.getAllRepositories(); + for (TaskRepository repository : repositories) { + String id = repository.extractId(message); + try { + Task task = repository.findTask(id); + if (task != null) { + return task; + } + } + catch (Exception ignore) { + + } + } + return null; + } } diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java index f881ce53ca45..90995167b9ed 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java @@ -278,6 +278,13 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe } } + @Override + public LocalTask addTask(Task issue) { + LocalTaskImpl task = issue instanceof LocalTaskImpl ? (LocalTaskImpl)issue : new LocalTaskImpl(issue); + addTask(task); + return task; + } + @Override public LocalTaskImpl createLocalTask(String summary) { return createTask(LOCAL_TASK_ID_FORMAT.format(myConfig.localTasksCounter++), summary); @@ -353,7 +360,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe task.setUpdated(new Date()); } task.setActive(true); - myTasks.put(task.getId(), task); + addTask(task); if (task.isIssue()) { StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new Runnable() { public void run() { @@ -374,6 +381,10 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe return task; } + private void addTask(LocalTaskImpl task) { + myTasks.put(task.getId(), task); + } + @Override public boolean testConnection(final TaskRepository repository) { @@ -446,7 +457,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe myTasks.clear(); for (LocalTaskImpl task : config.tasks) { if (!task.isClosed()) { - myTasks.put(task.getId(), task); + addTask(task); } } @@ -555,7 +566,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe LocalTaskImpl defaultTask = myTasks.get(LocalTaskImpl.DEFAULT_TASK_ID); if (defaultTask == null) { defaultTask = createDefaultTask(); - myTasks.put(defaultTask.getId(), defaultTask); + addTask(defaultTask); } // make sure the task is associated with default changelist LocalChangeList defaultList = myChangeListManager.findChangeList(LocalChangeList.DEFAULT_NAME); @@ -577,9 +588,9 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe if (!infos.contains(info)) { String name = localChangeList.getName(); String id = extractId(name); - LocalTask existing = id == null ? myTasks.get(name) : myTasks.get(id); + LocalTaskImpl existing = id == null ? myTasks.get(name) : myTasks.get(id); if (existing != null) { - ((LocalTaskImpl)existing).getChangeLists().add(info); + existing.getChangeLists().add(info); } else { LocalTaskImpl task; if (id == null) { @@ -590,7 +601,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe task.setIssue(true); } task.getChangeLists().add(info); - myTasks.put(task.getId(), task); + addTask(task); } } }