more immutable collections: mark transitive callees of ContainerUtil.filter() as Unmodifiable to help uncover "immutable is passed where mutable is expected" bugs via "data flow problems" inspection, fix some found bugs

GitOrigin-RevId: c9b57bd0bd8fadcbaf7cca373c2aefbf562ecd4b
This commit is contained in:
Alexey Kudravtsev
2024-11-18 16:57:58 +00:00
committed by intellij-monorepo-bot
parent 9a178ef101
commit 6cb319cbbc
111 changed files with 236 additions and 69 deletions
@@ -11,6 +11,7 @@ import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.graph.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;
import org.jetbrains.jps.model.java.JavaSourceRootType;
import java.util.*;
@@ -22,6 +23,7 @@ public final class ModuleCompilerUtil {
return ModuleRootManager.getInstance(module).getDependencies();
}
@Unmodifiable
public static @NotNull List<Chunk<ModuleSourceSet>> getCyclicDependencies(@NotNull Project project, @NotNull List<? extends Module> modules) {
Collection<Chunk<ModuleSourceSet>> chunks = computeSourceSetCycles(new DefaultModulesProvider(project));
final Set<Module> modulesSet = new HashSet<>(modules);
@@ -99,6 +101,7 @@ public final class ModuleCompilerUtil {
return true;
}
@Unmodifiable
private static List<Chunk<ModuleSourceSet>> removeSingleElementChunks(Collection<? extends Chunk<ModuleSourceSet>> chunks) {
return ContainerUtil.filter(chunks, chunk -> chunk.getNodes().size() > 1);
}
@@ -106,6 +109,7 @@ public final class ModuleCompilerUtil {
/**
* Remove cycles in tests included in cycles between production parts
*/
@Unmodifiable
private static @NotNull List<Chunk<ModuleSourceSet>> filterDuplicates(@NotNull Collection<? extends Chunk<ModuleSourceSet>> sourceSetCycles) {
final List<Set<Module>> productionCycles = new ArrayList<>();