TestResult (@NotNull GitExecutable executable) { return ProgressIndicatorUtils.computeWithLockAndCheckingCanceled(LOCK, 50, TimeUnit.MILLISECONDS, () -> { TestResult result = myTestMap.get(executable); long currentLastModificationDate = 0L; try { currentLastModificationDate = getModificationTime(executable); if (result == null || result.getFileLastModifiedTimestamp() != currentLastModificationDate) { result = new TestResult(testOrAbort(executable), currentLastModificationDate); myTestMap.put(executable, result); } } catch (ProcessCanceledException pce) { throw pce; } catch (Exception e) { result = new TestResult(e, currentLastModificationDate); myTestMap.put(executable, result); } return result; }); }