String (@NotNull List<Detector> detectors) { String path = null; boolean fireEvent = false; synchronized (DETECTED_EXECUTABLE_LOCK) { for (Detector detector : detectors) { DetectedPath detectedPath = detector.getPath(); if (detectedPath == null) { detector.runDetection(); fireEvent = true; detectedPath = detector.getPath(); } if (detectedPath != null && detectedPath.path != null) { path = detectedPath.path; break; } } } if (fireEvent) { ApplicationManager.getApplication().getMessageBus().syncPublisher(GitExecutableManager.TOPIC).executableChanged(); } if (path != null) return path; return getDefaultExecutable(); }