Set<String> (@NotNull WinRegistryService registryService) { final Set<String> result = new HashSet<>(); /* Check https://www.python.org/dev/peps/pep-0514/ for windows registry layout to understand this method */ for (final String regRoot : REG_ROOTS) { for (final Map.Entry<String, String> entry : REGISTRY_MAP.entrySet()) { final String productId = entry.getKey(); final String exePath = entry.getValue(); final String companiesPath = String.format("%s\\SOFTWARE\\%s", regRoot, productId); final String companiesPathWow = String.format("%s\\SOFTWARE\\Wow6432Node\\%s", regRoot, productId); for (final String path : new String[]{companiesPath, companiesPathWow}) { final List<String> companies = registryService.listBranches(path); for (final String company : companies) { final String pathToCompany = path + '\\' + company; final List<String> versions = registryService.listBranches(pathToCompany); for (final String version : versions) { final String folder = registryService.getDefaultKey(pathToCompany + '\\' + version + "\\InstallPath"); if (folder != null) { final File interpreter = new File(folder, exePath); if (interpreter.exists()) { result.add(FileUtil.toSystemDependentName(interpreter.getPath())); } } } } } } } return result; }