reuse targets cache

GitOrigin-RevId: 313bd158e0e3e81ee7dbc9af60ce8506fd1754bf
This commit is contained in:
Eugene Zhuravlev
2024-07-20 12:38:39 +02:00
committed by intellij-monorepo-bot
parent afb0ea3fe8
commit a634057bc9

View File

@@ -668,9 +668,10 @@ public final class JavaBuilderUtil {
} }
private static final class ModulesBasedFileFilter implements Mappings.DependentFilesFilter { private static final class ModulesBasedFileFilter implements Mappings.DependentFilesFilter {
private static final Key<Map<BuildTarget<?>, Set<BuildTarget<?>>>> TARGETS_CACHE_KEY = Key.create("__recursive_target-deps_cache__");
private final CompileContext myContext; private final CompileContext myContext;
private final Set<? extends BuildTarget<?>> myChunkTargets; private final Set<? extends BuildTarget<?>> myChunkTargets;
private final Map<BuildTarget<?>, Set<BuildTarget<?>>> myCache = new HashMap<>(); private final Map<BuildTarget<?>, Set<BuildTarget<?>>> myCache;
private final BuildRootIndex myBuildRootIndex; private final BuildRootIndex myBuildRootIndex;
private final BuildTargetIndex myBuildTargetIndex; private final BuildTargetIndex myBuildTargetIndex;
@@ -679,6 +680,11 @@ public final class JavaBuilderUtil {
myChunkTargets = chunk.getTargets(); myChunkTargets = chunk.getTargets();
myBuildRootIndex = context.getProjectDescriptor().getBuildRootIndex(); myBuildRootIndex = context.getProjectDescriptor().getBuildRootIndex();
myBuildTargetIndex = context.getProjectDescriptor().getBuildTargetIndex(); myBuildTargetIndex = context.getProjectDescriptor().getBuildTargetIndex();
Map<BuildTarget<?>, Set<BuildTarget<?>>> cache = TARGETS_CACHE_KEY.get(context);
if (cache == null) {
TARGETS_CACHE_KEY.set(context, cache = new HashMap<>());
}
myCache = cache;
} }
@Override @Override
@@ -691,16 +697,15 @@ public final class JavaBuilderUtil {
if (myChunkTargets.contains(targetOfFile)) { if (myChunkTargets.contains(targetOfFile)) {
return true; return true;
} }
Set<BuildTarget<?>> targetOfFileWithDependencies = myCache.get(targetOfFile); Set<BuildTarget<?>> targetOfFileWithDependencies = myCache.computeIfAbsent(
if (targetOfFileWithDependencies == null) { targetOfFile,
targetOfFileWithDependencies = Iterators.collect(Iterators.recurseDepth(targetOfFile, new Iterators.Function<BuildTarget<?>, Iterable<? extends BuildTarget<?>>>() { trg -> Iterators.collect(Iterators.recurseDepth(trg, new Iterators.Function<BuildTarget<?>, Iterable<? extends BuildTarget<?>>>() {
@Override @Override
public Iterable<? extends BuildTarget<?>> fun(BuildTarget<?> t) { public Iterable<? extends BuildTarget<?>> fun(BuildTarget<?> t) {
return myBuildTargetIndex.getDependencies(t, myContext); return myBuildTargetIndex.getDependencies(t, myContext);
} }
}, false), new LinkedHashSet<>()); }, false), new HashSet<>())
myCache.put(targetOfFile, targetOfFileWithDependencies); );
}
return ContainerUtil.intersects(targetOfFileWithDependencies, myChunkTargets); return ContainerUtil.intersects(targetOfFileWithDependencies, myChunkTargets);
} }