diff options
author | Darin Wright | 2009-04-20 18:21:15 +0000 |
---|---|---|
committer | Darin Wright | 2009-04-20 18:21:15 +0000 |
commit | 530ffd9a06fe8932585383f60b3c1d657823aba5 (patch) | |
tree | 10440946c5b55a8455c50c49df9792f1dd4fe472 | |
parent | a4f2ffba3675dbb23a9a0611b52cdf7ef45aa11b (diff) | |
download | eclipse.platform.debug-530ffd9a06fe8932585383f60b3c1d657823aba5.tar.gz eclipse.platform.debug-530ffd9a06fe8932585383f60b3c1d657823aba5.tar.xz eclipse.platform.debug-530ffd9a06fe8932585383f60b3c1d657823aba5.zip |
Bug 212798 - Thread collapsed unexpectedly as threads are terminated
3 files changed, 33 insertions, 10 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java index 8fc6419a9..cbe7d1cdb 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java @@ -57,10 +57,13 @@ public class ChildrenUpdate extends ViewerUpdateMonitor implements IChildrenUpda int viewIndex = provider.modelToViewIndex(elementPath, modelIndex); if (provider.shouldFilter(elementPath, element)) { if (provider.addFilteredIndex(elementPath, modelIndex, element)) { - if (ModelContentProvider.DEBUG_CONTENT_PROVIDER && (ModelContentProvider.DEBUG_PRESENTATION_ID == null || ModelContentProvider.DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("REMOVE(" + getElement() + ", modelIndex: " + modelIndex + " viewIndex: " + viewIndex + ", " + element + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + if (viewer.getChildElement(elementPath, viewIndex) == null) { + // only remove the element if currently unmapped + if (ModelContentProvider.DEBUG_CONTENT_PROVIDER && (ModelContentProvider.DEBUG_PRESENTATION_ID == null || ModelContentProvider.DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { + System.out.println("REMOVE(" + getElement() + ", modelIndex: " + modelIndex + " viewIndex: " + viewIndex + ", " + element + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + } + viewer.remove(elementPath, viewIndex); } - viewer.remove(elementPath, viewIndex); } } else { if (provider.isFiltered(elementPath, modelIndex)) { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java index 742911188..10d404cad 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java @@ -2153,7 +2153,7 @@ public class InternalTreeModelViewer extends TreeViewer } public Object getChildElement(TreePath path, int index) { - TreeItem childItem = ((Tree)getControl()).getItem(index); + TreeItem childItem = null; if (path.getSegmentCount() == 0) { Tree tree = (Tree)getControl(); try { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java index 22649dfa2..42bf815d2 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java @@ -81,17 +81,37 @@ public class TreeModelContentProvider extends ModelContentProvider implements IT * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#handleAdd(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta) */ protected void handleAdd(IModelDelta delta) { - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("handleAdd(" + delta.getElement() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ - } IModelDelta parentDelta = delta.getParentDelta(); TreePath parentPath = getViewerTreePath(parentDelta); + Object element = delta.getElement(); int count = parentDelta.getChildCount(); if (count > 0) { setModelChildCount(parentPath, count); int viewCount = modelToViewChildCount(parentPath, count); - getViewer().setChildCount(parentPath, viewCount); + int modelIndex = count - 1; + int viewIndex = viewCount - 1; + if (shouldFilter(parentPath, element)) { + addFilteredIndex(parentPath, modelIndex, element); + if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { + System.out.println("[filtered] handleAdd(" + delta.getElement() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ + } + } else { + if (isFiltered(parentPath, modelIndex)) { + clearFilteredChild(parentPath, modelIndex); + } + if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { + System.out.println("handleAdd(" + delta.getElement() + ") viewIndex: " + viewCount + " modelIndex: " + modelIndex); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + getViewer().setChildCount(parentPath, viewCount); + getViewer().replace(parentPath, viewIndex, element); + TreePath childPath = parentPath.createChildPath(element); + updateHasChildren(childPath); + doRestore(childPath, modelIndex, false, false); + } } else { + if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { + System.out.println("handleAdd(" + delta.getElement() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ + } doUpdateChildCount(getViewerTreePath(delta.getParentDelta())); } } @@ -247,7 +267,7 @@ public class TreeModelContentProvider extends ModelContentProvider implements IT clearFilters(parentPath); } viewIndex = treeViewer.findElementIndex(parentPath, element); - if (viewIndex > 0) { + if (viewIndex >= 0) { modelIndex = viewToModelIndex(parentPath, viewIndex); } else { unmappedIndex = treeViewer.findElementIndex(parentPath, null); @@ -269,7 +289,7 @@ public class TreeModelContentProvider extends ModelContentProvider implements IT // did not find the element, but found an unmapped item. // remove the unmapped item in it's place and update filters if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println(" - (not found) remove(" + parentPath.getLastSegment() + ", viewIndex: " + viewIndex + " modelIndex: " + modelIndex); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + System.out.println(" - (not found) remove(" + parentPath.getLastSegment() + ", viewIndex: " + viewIndex + " modelIndex: " + modelIndex + " unmapped index: " + unmappedIndex); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } modelIndex = viewToModelIndex(parentPath, unmappedIndex); rescheduleUpdates(parentPath, modelIndex); |