From a634057bc9bb10f5a930f8b6e1a521e48919beaa Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Sat, 20 Jul 2024 12:38:39 +0200 Subject: [PATCH] reuse targets cache GitOrigin-RevId: 313bd158e0e3e81ee7dbc9af60ce8506fd1754bf --- .../jps/builders/java/JavaBuilderUtil.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/java/JavaBuilderUtil.java b/jps/jps-builders/src/org/jetbrains/jps/builders/java/JavaBuilderUtil.java index 7820138a1cec..22325fe8b57e 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/builders/java/JavaBuilderUtil.java +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/java/JavaBuilderUtil.java @@ -668,9 +668,10 @@ public final class JavaBuilderUtil { } private static final class ModulesBasedFileFilter implements Mappings.DependentFilesFilter { + private static final Key, Set>>> TARGETS_CACHE_KEY = Key.create("__recursive_target-deps_cache__"); private final CompileContext myContext; private final Set> myChunkTargets; - private final Map, Set>> myCache = new HashMap<>(); + private final Map, Set>> myCache; private final BuildRootIndex myBuildRootIndex; private final BuildTargetIndex myBuildTargetIndex; @@ -679,6 +680,11 @@ public final class JavaBuilderUtil { myChunkTargets = chunk.getTargets(); myBuildRootIndex = context.getProjectDescriptor().getBuildRootIndex(); myBuildTargetIndex = context.getProjectDescriptor().getBuildTargetIndex(); + Map, Set>> cache = TARGETS_CACHE_KEY.get(context); + if (cache == null) { + TARGETS_CACHE_KEY.set(context, cache = new HashMap<>()); + } + myCache = cache; } @Override @@ -691,16 +697,15 @@ public final class JavaBuilderUtil { if (myChunkTargets.contains(targetOfFile)) { return true; } - Set> targetOfFileWithDependencies = myCache.get(targetOfFile); - if (targetOfFileWithDependencies == null) { - targetOfFileWithDependencies = Iterators.collect(Iterators.recurseDepth(targetOfFile, new Iterators.Function, Iterable>>() { + Set> targetOfFileWithDependencies = myCache.computeIfAbsent( + targetOfFile, + trg -> Iterators.collect(Iterators.recurseDepth(trg, new Iterators.Function, Iterable>>() { @Override public Iterable> fun(BuildTarget t) { return myBuildTargetIndex.getDependencies(t, myContext); } - }, false), new LinkedHashSet<>()); - myCache.put(targetOfFile, targetOfFileWithDependencies); - } + }, false), new HashSet<>()) + ); return ContainerUtil.intersects(targetOfFileWithDependencies, myChunkTargets); }