Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 95273 Details for
Bug 200235
[api] guard against circular dependencies (sub-tasks)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
patch
clipboard.txt (text/plain), 13.29 KB, created by
Shawn Minto
on 2008-04-08 17:25:33 EDT
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Shawn Minto
Created:
2008-04-08 17:25:33 EDT
Size:
13.29 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylyn.tasks.core >Index: src/org/eclipse/mylyn/tasks/core/AbstractTaskContainer.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTaskContainer.java,v >retrieving revision 1.34 >diff -u -r1.34 AbstractTaskContainer.java >--- src/org/eclipse/mylyn/tasks/core/AbstractTaskContainer.java 28 Mar 2008 20:29:21 -0000 1.34 >+++ src/org/eclipse/mylyn/tasks/core/AbstractTaskContainer.java 8 Apr 2008 21:23:03 -0000 >@@ -13,7 +13,6 @@ > import java.util.concurrent.CopyOnWriteArraySet; > > import org.eclipse.core.runtime.PlatformObject; >-import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; > import org.eclipse.mylyn.tasks.core.AbstractTask.PriorityLevel; > > /** >@@ -97,16 +96,22 @@ > * TODO: review policy > */ > public boolean contains(String handle) { >- return containsHelper(getChildrenInternal(), handle, 0); >+ return containsHelper(getChildrenInternal(), handle, new HashSet<AbstractTaskContainer>()); > } > >- private boolean containsHelper(Set<AbstractTask> children, String handle, int depth) { >- if (depth < ITasksCoreConstants.MAX_SUBTASK_DEPTH && children != null && !children.isEmpty()) { >+ private boolean containsHelper(Set<AbstractTask> children, String handle, >+ Set<AbstractTaskContainer> visitedContainers) { >+ if (children != null && !children.isEmpty()) { > for (AbstractTask child : children) { >+ if (visitedContainers.contains(child)) { >+ continue; >+ } >+ visitedContainers.add(child); >+ > if (child != null > && handle != null > && (handle.equals(child.getHandleIdentifier()) || containsHelper(child.getChildrenInternal(), >- handle, depth + 1))) { >+ handle, visitedContainers))) { > return true; > } > } >Index: src/org/eclipse/mylyn/tasks/core/TaskList.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskList.java,v >retrieving revision 1.81 >diff -u -r1.81 TaskList.java >--- src/org/eclipse/mylyn/tasks/core/TaskList.java 1 Mar 2008 21:38:35 -0000 1.81 >+++ src/org/eclipse/mylyn/tasks/core/TaskList.java 8 Apr 2008 21:23:03 -0000 >@@ -65,13 +65,14 @@ > * @since 2.2 > */ > private void addOrphan(AbstractTask task, Set<TaskContainerDelta> delta) { >- addOrphan(task, delta, 0); >+ addOrphan(task, delta, new HashSet<AbstractTaskContainer>()); > } > > /** > * @since 2.2 > */ >- private void addOrphan(AbstractTask task, Set<TaskContainerDelta> delta, int depth) { >+ private void addOrphan(AbstractTask task, Set<TaskContainerDelta> delta, >+ Set<AbstractTaskContainer> visitedContainers) { > if (!task.getParentContainers().isEmpty()) { > // Current policy is not to archive/orphan if the task exists in some other container > return; >@@ -101,9 +102,13 @@ > //StatusHandler.log("Orphan container not found for: " + task.getRepositoryUrl(), this); > } > >- if (depth < ITasksCoreConstants.MAX_SUBTASK_DEPTH && !task.isEmpty()) { >+ if (!task.isEmpty()) { > for (AbstractTask child : task.getChildren()) { >- addOrphan(child, delta, depth + 1); >+ if (visitedContainers.contains(child)) { >+ continue; >+ } >+ visitedContainers.add(child); >+ addOrphan(child, delta, visitedContainers); > } > } > >@@ -113,13 +118,13 @@ > * @since 2.2 > */ > private void removeOrphan(AbstractTask task, Set<TaskContainerDelta> delta) { >- removeOrphan(task, delta, 0); >+ removeOrphan(task, delta, new HashSet<AbstractTaskContainer>()); > } > > /** > * @since 2.2 > */ >- private void removeOrphan(AbstractTask task, Set<TaskContainerDelta> delta, int depth) { >+ private void removeOrphan(AbstractTask task, Set<TaskContainerDelta> delta, Set<AbstractTaskContainer> visitedTasks) { > UnmatchedTaskContainer orphans = repositoryOrphansMap.get(task.getRepositoryUrl()); > if (orphans != null) { > if (orphans.contains(task.getHandleIdentifier())) { >@@ -128,9 +133,13 @@ > delta.add(new TaskContainerDelta(orphans, TaskContainerDelta.Kind.CHANGED)); > } > >- if (depth < ITasksCoreConstants.MAX_SUBTASK_DEPTH && !task.isEmpty()) { >+ if (!task.isEmpty()) { > for (AbstractTask child : task.getChildren()) { >- removeOrphan(child, delta, depth + 1); >+ if (visitedTasks.contains(child)) { >+ continue; >+ } >+ visitedTasks.add(child); >+ removeOrphan(child, delta, visitedTasks); > } > } > >Index: src/org/eclipse/mylyn/internal/tasks/core/ITasksCoreConstants.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ITasksCoreConstants.java,v >retrieving revision 1.3 >diff -u -r1.3 ITasksCoreConstants.java >--- src/org/eclipse/mylyn/internal/tasks/core/ITasksCoreConstants.java 1 Mar 2008 21:38:35 -0000 1.3 >+++ src/org/eclipse/mylyn/internal/tasks/core/ITasksCoreConstants.java 8 Apr 2008 21:23:03 -0000 >@@ -13,8 +13,6 @@ > */ > public interface ITasksCoreConstants { > >- public static final int MAX_SUBTASK_DEPTH = 10; >- > public static final String ID_PLUGIN = "org.eclipse.mylyn.tasks.core"; > > } >#P org.eclipse.mylyn.tasks.tests >Index: src/org/eclipse/mylyn/tasks/tests/AbstractTaskContainerTest.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AbstractTaskContainerTest.java,v >retrieving revision 1.3 >diff -u -r1.3 AbstractTaskContainerTest.java >--- src/org/eclipse/mylyn/tasks/tests/AbstractTaskContainerTest.java 2 Apr 2008 07:23:21 -0000 1.3 >+++ src/org/eclipse/mylyn/tasks/tests/AbstractTaskContainerTest.java 8 Apr 2008 21:23:04 -0000 >@@ -18,12 +18,16 @@ > MockTask task1 = new MockTask("1"); > MockTask task2 = new MockTask("2"); > MockTask task3 = new MockTask("3"); >+ MockTask task4 = new MockTask("4"); > > task1.internalAddChild(task2); > task2.internalAddChild(task3); > task3.internalAddChild(task1); >+ task3.internalAddChild(task4); > >- assertFalse(task1.contains("abc")); >+ assertTrue(task1.contains(task4.getHandleIdentifier())); >+ assertTrue(task3.contains(task4.getHandleIdentifier())); >+ assertFalse(task3.contains("abc")); > } > > } >#P org.eclipse.mylyn.context.ui >Index: src/org/eclipse/mylyn/internal/context/ui/TaskListInterestFilter.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.context.ui/src/org/eclipse/mylyn/internal/context/ui/TaskListInterestFilter.java,v >retrieving revision 1.63 >diff -u -r1.63 TaskListInterestFilter.java >--- src/org/eclipse/mylyn/internal/context/ui/TaskListInterestFilter.java 1 Apr 2008 03:03:54 -0000 1.63 >+++ src/org/eclipse/mylyn/internal/context/ui/TaskListInterestFilter.java 8 Apr 2008 21:23:05 -0000 >@@ -9,12 +9,12 @@ > package org.eclipse.mylyn.internal.context.ui; > > import java.util.Calendar; >+import java.util.HashSet; > import java.util.Set; > > import org.eclipse.core.runtime.IStatus; > import org.eclipse.core.runtime.Status; > import org.eclipse.mylyn.context.ui.ContextUiPlugin; >-import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; > import org.eclipse.mylyn.internal.tasks.core.LocalRepositoryConnector; > import org.eclipse.mylyn.internal.tasks.core.ScheduledTaskContainer; > import org.eclipse.mylyn.internal.tasks.ui.AbstractTaskListFilter; >@@ -59,7 +59,7 @@ > } > > for (AbstractTask task : children) { >- if (shouldAlwaysShow(child, task, ITasksCoreConstants.MAX_SUBTASK_DEPTH)) { >+ if (shouldAlwaysShow(child, task, new HashSet<AbstractTaskContainer>())) { > return true; > } > } >@@ -85,10 +85,10 @@ > > // TODO: make meta-context more explicit > protected boolean isInteresting(Object parent, AbstractTask task) { >- return shouldAlwaysShow(parent, task, ITasksCoreConstants.MAX_SUBTASK_DEPTH); >+ return shouldAlwaysShow(parent, task, new HashSet<AbstractTaskContainer>()); > } > >- public boolean shouldAlwaysShow(Object parent, AbstractTask task, int depth) { >+ public boolean shouldAlwaysShow(Object parent, AbstractTask task, Set<AbstractTaskContainer> visitedContainers) { > > return task.isActive() > || TasksUiPlugin.getTaskActivityManager().isCompletedToday(task) >@@ -96,20 +96,24 @@ > || !task.isCompleted() > && (LocalRepositoryConnector.DEFAULT_SUMMARY.equals(task.getSummary()) > || shouldShowInFocusedWorkweekDateContainer(parent, task) >- || TasksUiPlugin.getTaskActivityManager().isOverdue(task) || isInterestingForThisWeek(parent, task) || hasInterestingSubTasks( >- parent, task, depth)); >- } >- >- private boolean hasInterestingSubTasks(Object parent, AbstractTask task, int depth) { >- if (depth > 0) { >- if (!TasksUiPlugin.getDefault().groupSubtasks(task)) { >- return false; >- } >- if (task.getChildren() != null && task.getChildren().size() > 0) { >- for (AbstractTask subTask : task.getChildren()) { >- if (shouldAlwaysShow(parent, subTask, depth - 1)) { >- return true; >- } >+ || TasksUiPlugin.getTaskActivityManager().isOverdue(task) >+ || isInterestingForThisWeek(parent, task) || hasInterestingSubTasks(parent, task, >+ visitedContainers)); >+ } >+ >+ private boolean hasInterestingSubTasks(Object parent, AbstractTask task, >+ Set<AbstractTaskContainer> visitedContainers) { >+ if (!TasksUiPlugin.getDefault().groupSubtasks(task)) { >+ return false; >+ } >+ if (task.getChildren() != null && task.getChildren().size() > 0) { >+ for (AbstractTask subTask : task.getChildren()) { >+ if (visitedContainers.contains(subTask)) { >+ continue; >+ } >+ visitedContainers.add(subTask); >+ if (shouldAlwaysShow(parent, subTask, visitedContainers)) { >+ return true; > } > } > } >#P org.eclipse.mylyn.tasks.ui >Index: src/org/eclipse/mylyn/internal/tasks/ui/AbstractTaskListFilter.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/AbstractTaskListFilter.java,v >retrieving revision 1.12 >diff -u -r1.12 AbstractTaskListFilter.java >--- src/org/eclipse/mylyn/internal/tasks/ui/AbstractTaskListFilter.java 14 Dec 2007 02:16:28 -0000 1.12 >+++ src/org/eclipse/mylyn/internal/tasks/ui/AbstractTaskListFilter.java 8 Apr 2008 21:23:05 -0000 >@@ -7,9 +7,9 @@ > *******************************************************************************/ > package org.eclipse.mylyn.internal.tasks.ui; > >+import java.util.HashSet; > import java.util.Set; > >-import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; > import org.eclipse.mylyn.tasks.core.AbstractTask; > import org.eclipse.mylyn.tasks.core.AbstractTaskContainer; > import org.eclipse.mylyn.tasks.core.AbstractTask.RepositoryTaskSyncState; >@@ -30,26 +30,32 @@ > * TODO: Move to an internal utility class > */ > public static boolean hasDescendantIncoming(AbstractTaskContainer container) { >- return hasDescendantIncoming(container, ITasksCoreConstants.MAX_SUBTASK_DEPTH); >+ return hasDescendantIncoming(container, new HashSet<AbstractTaskContainer>()); > } > > public static boolean hasIncompleteDescendant(AbstractTaskContainer container) { >- return hasIncompleteDescendant(container, ITasksCoreConstants.MAX_SUBTASK_DEPTH); >+ return hasIncompleteDescendant(container, new HashSet<AbstractTaskContainer>()); > } > >- private static boolean hasDescendantIncoming(AbstractTaskContainer container, int depth) { >+ private static boolean hasDescendantIncoming(AbstractTaskContainer container, >+ Set<AbstractTaskContainer> visitedContainers) { > Set<AbstractTask> children = container.getChildren(); >- if (children == null || depth <= 0) { >+ if (children == null) { > return false; > } > > for (AbstractTask task : children) { >+ if (visitedContainers.contains(task)) { >+ continue; >+ } >+ visitedContainers.add(task); >+ > if (task != null) { > AbstractTask containedRepositoryTask = task; > if (containedRepositoryTask.getSynchronizationState() == RepositoryTaskSyncState.INCOMING) { > return true; > } else if (TasksUiPlugin.getDefault().groupSubtasks(container) >- && hasDescendantIncoming(task, depth - 1)) { >+ && hasDescendantIncoming(task, visitedContainers)) { > return true; > } > } >@@ -57,18 +63,23 @@ > return false; > } > >- private static boolean hasIncompleteDescendant(AbstractTaskContainer container, int depth) { >+ private static boolean hasIncompleteDescendant(AbstractTaskContainer container, >+ Set<AbstractTaskContainer> visitedContainers) { > Set<AbstractTask> children = container.getChildren(); >- if (children == null || depth <= 0) { >+ if (children == null) { > return false; > } > > for (AbstractTask task : children) { >+ if (visitedContainers.contains(task)) { >+ continue; >+ } >+ visitedContainers.add(task); > if (task != null) { > AbstractTask containedRepositoryTask = task; > if (!containedRepositoryTask.isCompleted()) { > return true; >- } else if (hasIncompleteDescendant(task, depth - 1)) { >+ } else if (hasIncompleteDescendant(task, visitedContainers)) { > return true; > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 200235
: 95273 |
95274