mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-05 07:15:39 +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;
|
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.AbstractTreeViewer;
|
||||||
import org.eclipse.jface.viewers.ITreeContentProvider;
|
import org.eclipse.jface.viewers.ITreeContentProvider;
|
||||||
import org.eclipse.rse.ui.view.IContextObject;
|
import org.eclipse.rse.ui.view.IContextObject;
|
||||||
import org.eclipse.ui.progress.DeferredTreeContentManager;
|
import org.eclipse.ui.progress.DeferredTreeContentManager;
|
||||||
import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
|
import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
|
||||||
|
import org.eclipse.ui.progress.PendingUpdateAdapter;
|
||||||
|
|
||||||
public class SystemDeferredTreeContentManager extends
|
public class SystemDeferredTreeContentManager extends
|
||||||
DeferredTreeContentManager {
|
DeferredTreeContentManager {
|
||||||
|
|
||||||
|
private List _pendingQueries;
|
||||||
|
|
||||||
public SystemDeferredTreeContentManager(ITreeContentProvider provider,
|
public SystemDeferredTreeContentManager(ITreeContentProvider provider,
|
||||||
AbstractTreeViewer viewer)
|
AbstractTreeViewer viewer)
|
||||||
{
|
{
|
||||||
super(provider, viewer);
|
super(provider, viewer);
|
||||||
// TODO Auto-generated constructor stub
|
_pendingQueries = new ArrayList();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -47,4 +54,36 @@ public class SystemDeferredTreeContentManager extends
|
||||||
return super.getAdapter(element);
|
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