private synchronized void readCache()

in src/main/java/org/apache/maven/plugins/toolchain/jdk/ToolchainDiscoverer.java [182:209]


    private synchronized void readCache() {
        if (cache == null) {
            try {
                cache = new ConcurrentHashMap<>();
                cacheModified = false;
                Path cacheFile = getCacheFile();
                if (Files.isRegularFile(cacheFile)) {
                    try (Reader r = Files.newBufferedReader(cacheFile)) {
                        PersistedToolchains pt = new MavenToolchainsXpp3Reader().read(r, false);
                        cache = pt.getToolchains().stream()
                                // Remove stale entries
                                .filter(tc -> {
                                    // If the bin/java executable is not available anymore, remove this TC
                                    if (!hasJavaC(getJdkHome(tc))) {
                                        cacheModified = true;
                                        return false;
                                    } else {
                                        return true;
                                    }
                                })
                                .collect(Collectors.toConcurrentMap(this::getJdkHome, Function.identity()));
                    }
                }
            } catch (IOException | XmlPullParserException e) {
                log.debug("Error reading toolchains cache: " + e, e);
            }
        }
    }