Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarin Wright2002-09-30 14:23:08 +0000
committerDarin Wright2002-09-30 14:23:08 +0000
commit454ea9b35b41b78a7dbae6cc24853ab3ea46000f (patch)
tree2addd3919beae6fb6e8b1182458be63a5cbf83d0 /org.eclipse.debug.core/core/org/eclipse
parent043d7c3ceb4c1c63bdb8869a27e7b144be6bc3ba (diff)
downloadeclipse.platform.debug-454ea9b35b41b78a7dbae6cc24853ab3ea46000f.tar.gz
eclipse.platform.debug-454ea9b35b41b78a7dbae6cc24853ab3ea46000f.tar.xz
eclipse.platform.debug-454ea9b35b41b78a7dbae6cc24853ab3ea46000f.zip
bug 1576
Diffstat (limited to 'org.eclipse.debug.core/core/org/eclipse')
-rw-r--r--org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionManager.java55
-rw-r--r--org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionsListener.java52
-rw-r--r--org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java166
3 files changed, 218 insertions, 55 deletions
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionManager.java
index 55443ac86..8c32599a0 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionManager.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionManager.java
@@ -1,9 +1,11 @@
package org.eclipse.debug.core;
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
+/**********************************************************************
+Copyright (c) 2000, 2002 IBM Corp. All rights reserved.
+This file is 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
+**********************************************************************/
import org.eclipse.debug.core.model.IExpression;
@@ -15,13 +17,14 @@ import org.eclipse.debug.core.model.IExpression;
* <p>
* Clients interested in expression change notification may
* register with the expression manager - see
- * <code>IExpressionListener</code>.
+ * <code>IExpressionListener</code> and <code>IExpressionsListener</code>.
* </p>
* <p>
* This interface is not intended to be implemented by clients.
* </p>
- * @see IExpression
- * @see IExpressionListener
+ * @see org.eclipse.debug.core.model.IExpression
+ * @see org.eclipse.debug.core.IExpressionListener
+ * @see org.eclipse.debug.core.IExpressionsListener
* @since 2.0
*/
public interface IExpressionManager {
@@ -33,6 +36,16 @@ public interface IExpressionManager {
* @param expression the expression to add
*/
public void addExpression(IExpression expression);
+
+ /**
+ * Adds the given expressions to the collection of registered expressions
+ * in the workspace and notifies all registered listeners. Has no effect
+ * on expressions already registered.
+ *
+ * @param expressions the expressions to add
+ * @since 2.1
+ */
+ public void addExpressions(IExpression[] expressions);
/**
* Returns a collection of all registered expressions,
@@ -66,6 +79,16 @@ public interface IExpressionManager {
* @param expression the expression to remove
*/
public void removeExpression(IExpression expression);
+
+ /**
+ * Removes the given expressions from the collection of registered expressions
+ * in the workspace and notifies all registered listeners. Has no effect
+ * on expressions not already registered.
+ *
+ * @param expressions the expressions to remove
+ * @since 2.1
+ */
+ public void removeExpressions(IExpression[] expressions);
/**
* Adds the given listener to the collection of registered expression listeners.
@@ -83,6 +106,24 @@ public interface IExpressionManager {
*/
public void removeExpressionListener(IExpressionListener listener);
+ /**
+ * Adds the given listener to the collection of registered expression listeners.
+ * Has no effect if an identical listener is already registered.
+ *
+ * @param listener the listener to add
+ * @since 2.1
+ */
+ public void addExpressionListener(IExpressionsListener listener);
+
+ /**
+ * Removes the given listener from the collection of registered expression listeners.
+ * Has no effect if an identical listener is not already registered.
+ *
+ * @param listener the listener to remove
+ * @since 2.1
+ */
+ public void removeExpressionListener(IExpressionsListener listener);
+
}
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionsListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionsListener.java
new file mode 100644
index 000000000..5a8ab2090
--- /dev/null
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionsListener.java
@@ -0,0 +1,52 @@
+package org.eclipse.debug.core;
+
+/**********************************************************************
+Copyright (c) 2000, 2002 IBM Corp. All rights reserved.
+This file is 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
+**********************************************************************/
+
+import org.eclipse.debug.core.model.IExpression;
+
+/**
+ * An expression listener is notified of expression additions,
+ * removals, and changes. Listeners register and deregister with the
+ * expression manager.
+ * <p>
+ * This interface is analagous to <code>IExpressionListener</code>, except
+ * notifications are batched for more than when expression when possible.
+ * </p>
+ * <p>
+ * Clients may implement this interface.
+ * </p>
+ * @see IExpressionManager
+ * @since 2.1
+ */
+
+public interface IExpressionsListener {
+
+ /**
+ * Notifies this listener that the given expressions have been added
+ * to the expression manager.
+ *
+ * @param expressions the added expressions
+ */
+ public void expressionsAdded(IExpression[] expressions);
+ /**
+ * Notifies this listener that the given expressions has been removed
+ * from the expression manager.
+ *
+ * @param expressions the removed expressions
+ */
+ public void expressionsRemoved(IExpression[] expressions);
+
+ /**
+ * Notifies this listener that the given expressions have
+ * changed.
+ *
+ * @param expressions the changed expressions
+ */
+ public void expressionsChanged(IExpression[] expressions);
+
+} \ No newline at end of file
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java
index 711d65dde..7b57c83f0 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java
@@ -1,12 +1,15 @@
package org.eclipse.debug.internal.core;
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
+/**********************************************************************
+Copyright (c) 2000, 2002 IBM Corp. All rights reserved.
+This file is 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
+**********************************************************************/
import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
import java.util.Vector;
import org.eclipse.debug.core.DebugEvent;
@@ -14,6 +17,7 @@ import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.IExpressionListener;
import org.eclipse.debug.core.IExpressionManager;
+import org.eclipse.debug.core.IExpressionsListener;
import org.eclipse.debug.core.model.IExpression;
/**
@@ -38,14 +42,38 @@ public class ExpressionManager implements IExpressionManager, IDebugEventSetList
private ListenerList fListeners = new ListenerList(2);
/**
- * @see IExpressionManager#addExpression(IExpression, String)
+ * List of (multi) expressions listeners
+ */
+ private ListenerList fExpressionsListeners = new ListenerList(2);
+
+ // Constants for add/remove/change notification
+ private static final int ADDED = 1;
+ private static final int CHANGED = 2;
+ private static final int REMOVED = 3;
+
+ /**
+ * @see IExpressionManager#addExpression(IExpression)
*/
public void addExpression(IExpression expression) {
- if (getExpressions0().indexOf(expression) == -1) {
- getExpressions0().add(expression);
- fireExpressionAdded(expression);
- }
+ addExpressions(new IExpression[]{expression});
}
+
+ /**
+ * @see IExpressionManager#addExpressions(IExpression[])
+ */
+ public void addExpressions(IExpression[] expressions) {
+ List added = new ArrayList(expressions.length);
+ for (int i = 0; i < expressions.length; i++) {
+ IExpression expression = expressions[i];
+ if (getExpressions0().indexOf(expression) == -1) {
+ added.add(expression);
+ getExpressions0().add(expression);
+ }
+ }
+ if (!added.isEmpty()) {
+ fireUpdate((IExpression[])added.toArray(new IExpression[added.size()]), ADDED);
+ }
+ }
/**
* @see IExpressionManager#getExpressions()
@@ -78,14 +106,26 @@ public class ExpressionManager implements IExpressionManager, IDebugEventSetList
* @see IExpressionManager#removeExpression(IExpression)
*/
public void removeExpression(IExpression expression) {
- if (getExpressions0().indexOf(expression) >= 0) {
- getExpressions0().remove(expression);
- expression.dispose();
- fireExpressionRemoved(expression);
- }
+ removeExpressions(new IExpression[] {expression});
}
/**
+ * @see IExpressionManager#removeExpressions(IExpression[])
+ */
+ public void removeExpressions(IExpression[] expressions) {
+ List removed = new ArrayList(expressions.length);
+ for (int i = 0; i < expressions.length; i++) {
+ IExpression expression = expressions[i];
+ if (getExpressions0().remove(expression)) {
+ removed.add(expression);
+ }
+ }
+ if (!removed.isEmpty()) {
+ fireUpdate((IExpression[])removed.toArray(new IExpression[removed.size()]), REMOVED);
+ }
+ }
+
+ /**
* @see IExpressionManager#addExpressionListener(IExpressionListener)
*/
public void addExpressionListener(IExpressionListener listener) {
@@ -128,56 +168,72 @@ public class ExpressionManager implements IExpressionManager, IDebugEventSetList
*/
public void handleDebugEvents(DebugEvent[] events) {
for (int i = 0; i < events.length; i++) {
+ List changed = null;
DebugEvent event = events[i];
if (event.getSource() instanceof IExpression) {
switch (event.getKind()) {
case DebugEvent.CHANGE:
- fireExpressionChanged((IExpression)event.getSource());
+ if (changed == null) {
+ changed = new ArrayList(1);
+ }
+ changed.add(event.getSource());
break;
default:
break;
}
}
+ if (changed != null) {
+ IExpression[] array = (IExpression[])changed.toArray(new IExpression[changed.size()]);
+ fireUpdate(array, CHANGED);
+ }
}
}
-
- /**
- * Notifies listeners that the given expression has been
- * added.
- *
- * @param expression the newly added expression
- */
- protected void fireExpressionAdded(IExpression expression) {
- Object[] listeners = fListeners.getListeners();
- for (int i = 0; i < listeners.length; i++) {
- ((IExpressionListener)listeners[i]).expressionAdded(expression);
- }
- }
-
+
/**
- * Notifies listeners that the given expression has been
- * removed.
+ * Notifies listeners of the adds/removes/changes
*
- * @param expression the removed expression
+ * @param breakpoints associated breakpoints
+ * @param deltas or <code>null</code>
+ * @param update type of change
*/
- protected void fireExpressionRemoved(IExpression expression) {
- Object[] listeners = fListeners.getListeners();
- for (int i = 0; i < listeners.length; i++) {
- ((IExpressionListener)listeners[i]).expressionRemoved(expression);
+ private void fireUpdate(IExpression[] expressions, int update) {
+ // single listeners
+ Object[] copiedListeners= fListeners.getListeners();
+ for (int i= 0; i < copiedListeners.length; i++) {
+ IExpressionListener listener = (IExpressionListener)copiedListeners[i];
+ for (int j = 0; j < expressions.length; j++) {
+ IExpression expression = expressions[j];
+ switch (update) {
+ case ADDED:
+ listener.expressionAdded(expression);
+ break;
+ case REMOVED:
+ listener.expressionRemoved(expression);
+ break;
+ case CHANGED:
+ listener.expressionChanged(expression);
+ break;
+ }
+ }
}
+
+ // multi listeners
+ copiedListeners = fExpressionsListeners.getListeners();
+ for (int i= 0; i < copiedListeners.length; i++) {
+ IExpressionsListener listener = (IExpressionsListener)copiedListeners[i];
+ switch (update) {
+ case ADDED:
+ listener.expressionsAdded(expressions);
+ break;
+ case REMOVED:
+ listener.expressionsRemoved(expressions);
+ break;
+ case CHANGED:
+ listener.expressionsChanged(expressions);
+ break;
+ }
+ }
}
-
- /**
- * Notifies listeners that the given expression has changed.
- *
- * @param expression the changed expression
- */
- protected void fireExpressionChanged(IExpression expression) {
- Object[] listeners = fListeners.getListeners();
- for (int i = 0; i < listeners.length; i++) {
- ((IExpressionListener)listeners[i]).expressionChanged(expression);
- }
- }
/**
* @see IExpressionManager#hasExpressions()
@@ -186,4 +242,18 @@ public class ExpressionManager implements IExpressionManager, IDebugEventSetList
return !getExpressions0().isEmpty();
}
+ /**
+ * @see org.eclipse.debug.core.IExpressionManager#addExpressionListener(org.eclipse.debug.core.IExpressionsListener)
+ */
+ public void addExpressionListener(IExpressionsListener listener) {
+ fExpressionsListeners.add(listener);
+ }
+
+ /**
+ * @see org.eclipse.debug.core.IExpressionManager#removeExpressionListener(org.eclipse.debug.core.IExpressionsListener)
+ */
+ public void removeExpressionListener(IExpressionsListener listener) {
+ fExpressionsListeners.remove(listener);
+ }
+
}

Back to the top