diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/RequestMonitor.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/RequestMonitor.java index 43023f9dc7e..e34362d581e 100644 --- a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/RequestMonitor.java +++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/RequestMonitor.java @@ -110,13 +110,20 @@ public class RequestMonitor extends DsfExecutable { private boolean fCanceled = false; private boolean fDone = false; - /** - * Constructor with an optional parent monitor. - * @param executor This executor will be used to invoke the runnable that - * will allow processing the completion code of this request monitor. - * @param parentRequestMonitor The optional parent request monitor to be invoked by - * default when this request completes. Parameter may be null. - */ + /** + * Constructor with an optional parent monitor. + * + * @param executor + * This executor will be used to invoke the runnable that will + * allow processing the completion code of this request monitor. + * I.e., the runnable will call {@link #handleCompleted()}. + * @param parentRequestMonitor + * An optional parent request monitor. By default, our completion + * handlers invoke the parent monitor's done method, + * thus allowing monitors to be daisy chained. If this request is + * unsuccessful, its status is set into the parent monitor. + * Parameter may be null. + */ public RequestMonitor(Executor executor, RequestMonitor parentRequestMonitor) { fExecutor = executor; fParentRequestMonitor = parentRequestMonitor; @@ -262,14 +269,32 @@ public class RequestMonitor extends DsfExecutable { public boolean isSuccess() { return !isCanceled() && getStatus().getSeverity() <= IStatus.INFO; } - - /** - * Default handler for the completion of a request. The implementation - * calls {@link #handleSuccess()} if the request succeeded, and calls - * {@link #handleFailure()} or cancel otherwise. - *
- * Note: Sub-classes may override this method. - */ + + /** + * First tier handler for the completion of the request. By default, the + * {@link #done()} method drives this method on the executor specified at + * construction time. By default, this handler merely calls a more + * specialized handler, which in turn may call an even more specialized + * handler, and so on, thus giving a subclass the ability to + * compartmentalize its completion logic by overriding specific handlers. + * All handlers are named handleXxxxx. More specifically, the + * base implementation calls {@link #handleSuccess()} if the request + * succeeded, and calls {@link #handleFailure()} otherwise.
+ * + * The complete hierarchy of handlers is as follows:
+ *
+	 * + handleCompleted 
+	 *   - handleSuccess 
+	 *   + handleFailure 
+	 *     - handleCancel
+	 *     + handleErrororWarning 
+	 *       - handleError 
+	 *       - handleWarning
+	 * 
+ * + *

+ * Note: Sub-classes may override this method. + */ @ConfinedToDsfExecutor("fExecutor") protected void handleCompleted() { if (isSuccess()) {