Bug 125536 - selection not revealed when item not populated
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/viewers/AsynchronousModel.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/viewers/AsynchronousModel.java
index 64a6bf6..5af01f3 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/viewers/AsynchronousModel.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/viewers/AsynchronousModel.java
@@ -110,18 +110,16 @@
*
* @param element element to install an update policy for
*/
- public void installModelProxy(Object element) {
- synchronized (fModelProxies) {
- if (!fModelProxies.containsKey(element)) {
- IModelProxyFactoryAdapter modelProxyFactory = getModelProxyFactoryAdapter(element);
- if (modelProxyFactory != null) {
- IModelProxy proxy = modelProxyFactory.createModelProxy(element, getPresentationContext());
- if (proxy != null) {
- proxy.init(getPresentationContext());
- fModelProxies.put(element, proxy);
- getViewer().modelProxyAdded(proxy);
- proxy.installed();
- }
+ public synchronized void installModelProxy(Object element) {
+ if (!fModelProxies.containsKey(element)) {
+ IModelProxyFactoryAdapter modelProxyFactory = getModelProxyFactoryAdapter(element);
+ if (modelProxyFactory != null) {
+ IModelProxy proxy = modelProxyFactory.createModelProxy(element, getPresentationContext());
+ if (proxy != null) {
+ proxy.init(getPresentationContext());
+ fModelProxies.put(element, proxy);
+ getViewer().modelProxyAdded(proxy);
+ proxy.installed();
}
}
}
@@ -132,13 +130,11 @@
*
* @param element
*/
- protected void disposeModelProxy(Object element) {
- synchronized (fModelProxies) {
- IModelProxy proxy = (IModelProxy) fModelProxies.remove(element);
- if (proxy != null) {
- getViewer().modelProxyRemoved(proxy);
- proxy.dispose();
- }
+ protected synchronized void disposeModelProxy(Object element) {
+ IModelProxy proxy = (IModelProxy) fModelProxies.remove(element);
+ if (proxy != null) {
+ getViewer().modelProxyRemoved(proxy);
+ proxy.dispose();
}
}
@@ -209,6 +205,11 @@
if (nodes == null) {
fElementToNodes.put(element, new ModelNode[] { node});
} else {
+ for (int i = 0; i < nodes.length; i++) {
+ if (nodes[i] == node) {
+ return;
+ }
+ }
ModelNode[] old = nodes;
ModelNode[] newNodes = new ModelNode[old.length + 1];
System.arraycopy(old, 0, newNodes, 0, old.length);
@@ -486,6 +487,7 @@
* @param kids list of model elements
*/
protected void setChildren(final ModelNode parentNode, List kids) {
+
final Object[] children = filter(parentNode.getElement(), kids.toArray());
final AsynchronousModelViewer viewer = getViewer();
ViewerSorter sorter = viewer.getSorter();
@@ -529,8 +531,8 @@
Object nextChild = children[i];
if (!prevNode.getElement().equals(nextChild)) {
unmapNode(prevNode);
- mapElement(nextChild, prevNode);
}
+ mapElement(nextChild, prevNode);
}
}
// create new children
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/viewers/AsynchronousTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/viewers/AsynchronousTreeModelViewer.java
index fdd6d56..a3ef4bb 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/viewers/AsynchronousTreeModelViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/viewers/AsynchronousTreeModelViewer.java
@@ -425,10 +425,13 @@
* @param node
*/
protected void nodeContainerChanged(ModelNode node) {
- Widget widget = node.getWidget();
+ Widget widget = node.getWidget();
if (widget != null && !widget.isDisposed()) {
if (isVisible(widget)) {
boolean expanded = true;
+ if (node.isContainer() && getItemCount(widget) == 0) {
+ setItemCount(widget, 1);
+ }
if (widget instanceof TreeItem) {
expanded = ((TreeItem)widget).getExpanded();
}
@@ -440,6 +443,13 @@
attemptExpansion();
attemptSelection(false);
}
+
+ protected int getItemCount(Widget widget) {
+ if (widget instanceof TreeItem) {
+ return ((TreeItem) widget).getItemCount();
+ }
+ return ((Tree) widget).getItemCount();
+ }
protected void doUpdateItem(Widget item, Object element, boolean fullMap) {
super.doUpdateItem(item, element, fullMap);