Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarin Wright2009-04-20 18:21:15 +0000
committerDarin Wright2009-04-20 18:21:15 +0000
commit530ffd9a06fe8932585383f60b3c1d657823aba5 (patch)
tree10440946c5b55a8455c50c49df9792f1dd4fe472
parenta4f2ffba3675dbb23a9a0611b52cdf7ef45aa11b (diff)
downloadeclipse.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
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java9
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java2
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java32
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);

Back to the top