1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 23:05:47 +02:00

[182574] prevent duplicate deferred queries to avoid empty list scenario.

This commit is contained in:
David McKnight 2007-04-18 17:34:00 +00:00
parent 878dd51257
commit 5923ec7386

View file

@ -13,20 +13,27 @@
********************************************************************************/
package org.eclipse.rse.ui.operations;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.rse.ui.view.IContextObject;
import org.eclipse.ui.progress.DeferredTreeContentManager;
import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
import org.eclipse.ui.progress.PendingUpdateAdapter;
public class SystemDeferredTreeContentManager extends
DeferredTreeContentManager {
private List _pendingQueries;
public SystemDeferredTreeContentManager(ITreeContentProvider provider,
AbstractTreeViewer viewer)
{
super(provider, viewer);
// TODO Auto-generated constructor stub
_pendingQueries = new ArrayList();
}
/**
@ -47,4 +54,36 @@ public class SystemDeferredTreeContentManager extends
return super.getAdapter(element);
}
/**
* Returns the child elements of the given element, or in the case of a
* deferred element, returns a placeholder. If a deferred element is used, a
* job is created to fetch the children in the background.
*
* @param parent
* The parent object.
* @return Object[] or <code>null</code> if parent is not an instance of
* IDeferredWorkbenchAdapter.
*/
public Object[] getChildren(final Object parent) {
IDeferredWorkbenchAdapter element = getAdapter(parent);
if (element == null) {
return null;
}
PendingUpdateAdapter placeholder = createPendingUpdateAdapter();
if (!_pendingQueries.contains(parent))
{
startFetchingDeferredChildren(parent, element, placeholder);
_pendingQueries.add(parent);
return new Object[] { placeholder };
}
return null;
}
protected void addChildren(final Object parent, final Object[] children,
IProgressMonitor monitor)
{
super.addChildren(parent, children, monitor);
_pendingQueries.remove(parent);
}
}