Source:
private void scheduleReloadJob(final String trigger) { if (reloadJob != null) reloadJob.cancel(); if (!checkRepository()) return; reloadJob = new Job(getReloadJobName()) { @Override protected IStatus run(IProgressMonitor monitor) { waitForWorkspaceLock(); if (monitor.isCanceled()) return Status.CANCEL_STATUS; lock.lock(); try { long startTime = System.currentTimeMillis(); IndexDiff result = calcIndexDiff(monitor, getName()); if (monitor.isCanceled()) return Status.CANCEL_STATUS; indexDiffData = new IndexDiffData(result); if (GitTraceLocation.INDEXDIFFCACHE.isActive()) { long time = System.currentTimeMillis() - startTime; StringBuilder message = new StringBuilder( getTraceMessage(time)); GitTraceLocation.getTrace().trace( GitTraceLocation.INDEXDIFFCACHE.getLocation(), message.append(indexDiffData.toString()) .toString()); } notifyListeners(); return Status.OK_STATUS; } catch (RuntimeException e) { if (GitTraceLocation.INDEXDIFFCACHE.isActive()) { GitTraceLocation.getTrace().trace( GitTraceLocation.INDEXDIFFCACHE.getLocation(), "Calculating IndexDiff failed", e); } scheduleReloadJob("Recalculation due to Exception in reload job"); return Status.OK_STATUS; } finally { lock.unlock(); } } private String getTraceMessage(long time) { return NLS .bind("Updated IndexDiffData in {0} ms\nReason: {1}\nRepository: {2}\n", new Object[] { new Long(time), trigger, repository.getWorkTree().getName() }); } @Override public boolean belongsTo(Object family) { if (family.equals(JobFamilies.INDEX_DIFF_CACHE_UPDATE)) return true; return super.belongsTo(family); } }; reloadJob.schedule(); }

Target:
private void scheduleReloadJob(final String trigger) { if (reloadJob != null) reloadJob.cancel(); if (!checkRepository()) return; reloadJob = new Job(getReloadJobName()) { @Override protected IStatus run(IProgressMonitor monitor) { waitForWorkspaceLock(); if (monitor.isCanceled()) return Status.CANCEL_STATUS; lock.lock(); try { long startTime = System.currentTimeMillis(); IndexDiff result = calcIndexDiff(monitor, getName()); if (monitor.isCanceled()) return Status.CANCEL_STATUS; indexDiffData = new IndexDiffData(result); if (GitTraceLocation.INDEXDIFFCACHE.isActive()) { long time = System.currentTimeMillis() - startTime; StringBuilder message = new StringBuilder( getTraceMessage(time)); GitTraceLocation.getTrace().trace( GitTraceLocation.INDEXDIFFCACHE.getLocation(), message.append(indexDiffData.toString()) .toString()); } notifyListeners(); return Status.OK_STATUS; } catch (RuntimeException e) { if (GitTraceLocation.INDEXDIFFCACHE.isActive()) { GitTraceLocation.getTrace().trace( GitTraceLocation.INDEXDIFFCACHE.getLocation(), "Calculating IndexDiff failed", e); } scheduleReloadJob("Recalculation due to Exception in reload job"); return Status.OK_STATUS; } finally { lock.unlock(); } } private String getTraceMessage(long time) { return NLS .bind("\nUpdated IndexDiffData in {0} ms\nReason: {1}\nRepository: {2}\n", new Object[] { new Long(time), trigger, repository.getWorkTree().getName() }); } @Override public boolean belongsTo(Object family) { if (family.equals(JobFamilies.INDEX_DIFF_CACHE_UPDATE)) return true; return super.belongsTo(family); } }; reloadJob.schedule(); }