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:
parent
878dd51257
commit
5923ec7386
1 changed files with 40 additions and 1 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue