Job updateJob = worker.workExecute(files);  if (updateJob != null) updateJob.schedule();
monitor.subTask("preparing"); Project findbugsProject = FindBugsWorker.workPrepare(files);   FindBugsWorker.UpdateJob updateJob = null; try { monitor.subTask("waiting to detect"); manager.beginRule(findbugsExecuteMutex, monitor); monitor.subTask("detecting"); updateJob = worker.workExecute(findbugsProject); } finally { manager.endRule(findbugsExecuteMutex); }  monitor.subTask("updating"); if (updateJob != null) {  updateJob.update(); }
	private void work(final IResource resource) {		try {			final Collection files = filesInResource(resource);			Job runFindBugs = new Job("Finding bugs in "+resource.getName()+"...") {				@Override				protected IStatus run(IProgressMonitor monitor) {					FindBugsWorker worker =						new FindBugsWorker(resource.getProject(), monitor);					try {						// this job will run with the mutex scheduling rule						Job updateJob = worker.workExecute(files);						// updateJob will run without a scheduling rule						if (updateJob != null) updateJob.schedule();					} catch (CoreException e) {						e.printStackTrace();						return Status.CANCEL_STATUS;					}					return Status.OK_STATUS;				}			};			runFindBugs.setRule(findbugsExecuteMutex);			runFindBugs.setUser(true);			runFindBugs.schedule();		} catch (CoreException e1) {			// TODO Auto-generated catch block			e1.printStackTrace();		}	}