Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wiebe2004-09-03 22:49:32 +0000
committerChris Wiebe2004-09-03 22:49:32 +0000
commit64fef090e5f9c5e31bf61768b06ec23701541a47 (patch)
tree855ac5666eb3eb98cafee4ff4cf4a45aefa9cfe7 /core/org.eclipse.cdt.ui
parente68659eac5647f43aa1a6f014c89ce46cf617c31 (diff)
downloadorg.eclipse.cdt-64fef090e5f9c5e31bf61768b06ec23701541a47.tar.gz
org.eclipse.cdt-64fef090e5f9c5e31bf61768b06ec23701541a47.tar.xz
org.eclipse.cdt-64fef090e5f9c5e31bf61768b06ec23701541a47.zip
2004-09-03 Chris Wiebe
add support for IDeferredWorkbenchAdapter * src/org/eclipse/cdt/internal/ui/CElementAdapterFactory.java * src/org/eclipse/cdt/internal/ui/DeferredCWorkbenchAdapter.java
Diffstat (limited to 'core/org.eclipse.cdt.ui')
-rw-r--r--core/org.eclipse.cdt.ui/ChangeLog6
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CElementAdapterFactory.java5
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/DeferredCWorkbenchAdapter.java86
3 files changed, 97 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog
index cc997293f12..9b5cb1ebb63 100644
--- a/core/org.eclipse.cdt.ui/ChangeLog
+++ b/core/org.eclipse.cdt.ui/ChangeLog
@@ -1,3 +1,9 @@
+2004-09-03 Chris Wiebe
+
+ add support for IDeferredWorkbenchAdapter
+ * src/org/eclipse/cdt/internal/ui/CElementAdapterFactory.java
+ * src/org/eclipse/cdt/internal/ui/DeferredCWorkbenchAdapter.java
+
2004-09-03 Alain Magloire
The Binaries were not showing children.
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CElementAdapterFactory.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CElementAdapterFactory.java
index 15cfe78d981..d1be286e292 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CElementAdapterFactory.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CElementAdapterFactory.java
@@ -13,6 +13,7 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
import org.eclipse.ui.views.properties.FilePropertySource;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.ResourcePropertySource;
@@ -26,11 +27,13 @@ public class CElementAdapterFactory implements IAdapterFactory {
IPropertySource.class,
IResource.class,
IWorkbenchAdapter.class,
+ IDeferredWorkbenchAdapter.class,
IProject.class,
IWorkspaceRoot.class
};
private static CWorkbenchAdapter fgCWorkbenchAdapter= new CWorkbenchAdapter();
+ private static DeferredCWorkbenchAdapter fgDeferredCWorkbenchAdapter= new DeferredCWorkbenchAdapter();
/**
* @see CElementAdapterFactory#getAdapterList
@@ -69,6 +72,8 @@ public class CElementAdapterFactory implements IAdapterFactory {
return res.getProject();
} else if (IResource.class.equals(key)) {
return celem.getResource();
+ } else if (IDeferredWorkbenchAdapter.class.equals(key)) {
+ return fgDeferredCWorkbenchAdapter;
} else if (IWorkbenchAdapter.class.equals(key)) {
return fgCWorkbenchAdapter;
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/DeferredCWorkbenchAdapter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/DeferredCWorkbenchAdapter.java
new file mode 100644
index 00000000000..4d3eab57668
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/DeferredCWorkbenchAdapter.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * QNX Software Systems - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui;
+
+import org.eclipse.cdt.core.model.IParent;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
+import org.eclipse.ui.progress.IElementCollector;
+
+public class DeferredCWorkbenchAdapter extends CWorkbenchAdapter
+ implements IDeferredWorkbenchAdapter {
+
+ private static boolean fSerializeFetching = false;
+ private static boolean fBatchFetchedChildren = true;
+
+ final ISchedulingRule mutexRule = new ISchedulingRule() {
+ public boolean isConflicting(ISchedulingRule rule) {
+ return rule == mutexRule;
+ }
+ public boolean contains(ISchedulingRule rule) {
+ return rule == mutexRule;
+ }
+ };
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.progress.IDeferredWorkbenchAdapter#fetchDeferredChildren(java.lang.Object,
+ * org.eclipse.jface.progress.IElementCollector,
+ * org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void fetchDeferredChildren(Object object, IElementCollector collector, IProgressMonitor monitor) {
+ if (object instanceof IParent) {
+ if (fBatchFetchedChildren) {
+ Object[] children = getChildren(object);
+ if (children.length > 0)
+ collector.add(children, monitor);
+ } else {
+ // TODO right now there is no advantage to this
+ // over the batched case above, but in the future
+ // we could have another method of progressively
+ // iterating over an ICElement's children
+ Object[] children = getChildren(object);
+ for (int i = 0; i < children.length; i++) {
+ if (monitor.isCanceled()) {
+ return;
+ }
+ collector.add(children[i], monitor);
+ }
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.progress.IDeferredWorkbenchAdapter#isContainer()
+ */
+ public boolean isContainer() {
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.progress.IDeferredWorkbenchAdapter#getRule(java.lang.Object)
+ */
+ public ISchedulingRule getRule(final Object object) {
+ if (fSerializeFetching) {
+ // only one ICElement parent can fetch children at a time
+ return mutexRule;
+ } else {
+ // allow several ICElement parents to fetch children concurrently
+ return null;
+ }
+ }
+}

Back to the top