Source:
<code>protected boolean executeAnalysis(final IProgressMonitor monitor) throws TmfAnalysisException { Object workerObj = getParameter(PARAM_WORKER); if (workerObj == null) { return false; } if (!(workerObj instanceof IGraphWorker)) { throw new IllegalStateException("Worker parameter must be an IGraphWorker"); } IGraphWorker worker = (IGraphWorker) workerObj; TmfGraphBuilderModule graphModule = fGraphModule; graphModule.schedule(); SubMonitor subMonitor = SubMonitor.convert(monitor, 10); subMonitor.setTaskName(NLS.bind(Messages.CriticalPathModule_waitingForGraph, graphModule.getName())); if (!graphModule.waitForCompletion(subMonitor)) { Activator.getInstance().logInfo("Critical path execution: graph building was cancelled. Results may not be accurate."); return false; } <START> subMonitor.worked(8); <END> TmfGraph graph = graphModule.getGraph(); if (graph == null) { throw new TmfAnalysisException("Critical Path analysis: graph " + graphModule.getName() + " is null"); } TmfVertex head = graph.getHead(worker); if (head == null) { fCriticalPath = new TmfGraph(); return true; } subMonitor.worked(1); ICriticalPathAlgorithm cp = getAlgorithm(graph); try { fCriticalPath = cp.compute(head, null); return true; } catch (CriticalPathAlgorithmException e) { Activator.getInstance().logError(NonNullUtils.nullToEmptyString(e.getMessage()), e); } subMonitor.done(); return false; }</code><technical_language>I a smooth progress reported this monitor: pass result of subMonitor.split(8) a 'parent monitor' TmfGraphBuilderModule (new API I guess) scheduling module. in builder module request, convert monitors (this split received in constructor) report work progresses. If do this, replace lines 87 99 split(1). Calling split() work of previous split() is done (no matter receiver it)</technical_language>

Target:
protected boolean executeAnalysis(final IProgressMonitor monitor) throws TmfAnalysisException { Object workerObj = getParameter(PARAM_WORKER); if (workerObj == null) { return false; } if (!(workerObj instanceof IGraphWorker)) { throw new IllegalStateException("Worker parameter must be an IGraphWorker"); } IGraphWorker worker = (IGraphWorker) workerObj; TmfGraphBuilderModule graphModule = fGraphModule; graphModule.schedule(); SubMonitor subMonitor = SubMonitor.convert(monitor, 10); subMonitor.setTaskName(NLS.bind(Messages.CriticalPathModule_waitingForGraph, graphModule.getName())); if (!graphModule.waitForCompletion(subMonitor)) { Activator.getInstance().logInfo("Critical path execution: graph building was cancelled. Results may not be accurate."); return false; } subMonitor.worked(8); TmfGraph graph = graphModule.getGraph(); if (graph == null) { throw new TmfAnalysisException("Critical Path analysis: graph " + graphModule.getName() + " is null"); } TmfVertex head = graph.getHead(worker); if (head == null) { fCriticalPath = new TmfGraph(); return true; } subMonitor.worked(1); ICriticalPathAlgorithm cp = getAlgorithm(graph); try { fCriticalPath = cp.compute(head, null); subMonitor.done(); return true; } catch (CriticalPathAlgorithmException e) { Activator.getInstance().logError(NonNullUtils.nullToEmptyString(e.getMessage()), e); } subMonitor.done(); return false; }