diff options
2 files changed, 10 insertions, 7 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java index 2ae966587..b0fa3fa91 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java @@ -34,7 +34,8 @@ public abstract class QueriedElement extends ProvElement { // that want to eliminate duplicates from the parent hierarchy. // This cache is *not* used as a general purpose child cache. private Collection<?> cachedChildren; - + private static final Object[] EMPTY= new Object[0]; + protected QueriedElement(Object parent) { super(parent); } @@ -158,6 +159,8 @@ public abstract class QueriedElement extends ProvElement { } public Object[] getCachedChildren() { + if (cachedChildren == null) + return EMPTY; return cachedChildren.toArray(); } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/DeferredQueryContentProvider.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/DeferredQueryContentProvider.java index 1e77c1fa6..485e635e8 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/DeferredQueryContentProvider.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/DeferredQueryContentProvider.java @@ -14,8 +14,7 @@ package org.eclipse.equinox.internal.p2.ui.viewers; import java.util.HashMap; import java.util.HashSet; import org.eclipse.core.runtime.ListenerList; -import org.eclipse.equinox.internal.p2.ui.model.QueriedElement; -import org.eclipse.equinox.internal.p2.ui.model.RemoteQueriedElement; +import org.eclipse.equinox.internal.p2.ui.model.*; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.Viewer; @@ -109,12 +108,13 @@ public class DeferredQueryContentProvider extends ProvElementContentProvider { // We rely on the assumption that the queryable is the most expensive // thing to get vs. the query itself being expensive. // (loading a repo vs. querying a repo afterward) - if (element.hasQueryable()) + if (manager != null && !synchronous && (element instanceof MetadataRepositoryElement || element instanceof MetadataRepositories)) { + if (element.getCachedChildren().length == 0) + return manager.getChildren(element); return element.getChildren(element); - - if (manager != null && !synchronous) { - return manager.getChildren(parent); } + if (element.hasQueryable()) + return element.getChildren(element); } return super.getChildren(parent); } |