Make maps for filesets immutable in `ActionExecutionMap.ContinuationState`. The maps for filesets in `ActionExecutionMap.ContinuationState` are never changed after the initial assignement. Change them to be immutable to make it clear they do not get modified. PiperOrigin-RevId: 320618218
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java index 9a1ed8f..5d657f4 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -740,7 +740,7 @@ ImmutableMap<Artifact, ImmutableList<FilesetOutputSymlink>> expandedFilesets; if (state.topLevelFilesets == null || state.topLevelFilesets.isEmpty()) { - expandedFilesets = ImmutableMap.copyOf(state.filesetsInsideRunfiles); + expandedFilesets = state.filesetsInsideRunfiles; } else { Map<Artifact, ImmutableList<FilesetOutputSymlink>> filesetsMap = new HashMap<>(state.filesetsInsideRunfiles); @@ -891,7 +891,7 @@ : SkyframeActionExecutor.ProgressEventBehavior.EMIT, Collections.unmodifiableMap(state.expandedArtifacts), expandedFilesets, - ImmutableMap.copyOf(state.topLevelFilesets), + state.topLevelFilesets, state.actionFileSystem, skyframeDepsResult, env.getListener(), @@ -1104,19 +1104,20 @@ /** Artifact expansion mapping for Runfiles tree and tree artifacts. */ private final Map<Artifact, Collection<Artifact>> expandedArtifacts; /** Artifact expansion mapping for Filesets embedded in Runfiles. */ - private final Map<Artifact, ImmutableList<FilesetOutputSymlink>> filesetsInsideRunfiles; + private final ImmutableMap<Artifact, ImmutableList<FilesetOutputSymlink>> + filesetsInsideRunfiles; /** Artifact expansion mapping for top level filesets. */ - private final Map<Artifact, ImmutableList<FilesetOutputSymlink>> topLevelFilesets; + private final ImmutableMap<Artifact, ImmutableList<FilesetOutputSymlink>> topLevelFilesets; - public CheckInputResults( + CheckInputResults( ActionInputMap actionInputMap, Map<Artifact, Collection<Artifact>> expandedArtifacts, Map<Artifact, ImmutableList<FilesetOutputSymlink>> filesetsInsideRunfiles, Map<Artifact, ImmutableList<FilesetOutputSymlink>> topLevelFilesets) { this.actionInputMap = actionInputMap; this.expandedArtifacts = expandedArtifacts; - this.filesetsInsideRunfiles = filesetsInsideRunfiles; - this.topLevelFilesets = topLevelFilesets; + this.filesetsInsideRunfiles = ImmutableMap.copyOf(filesetsInsideRunfiles); + this.topLevelFilesets = ImmutableMap.copyOf(topLevelFilesets); } } @@ -1423,7 +1424,7 @@ return handleMissingFile(input, missingValue.getException().getMessage(), labelInCaseOfBug); } - static LabelCause handleMissingFile( + private static LabelCause handleMissingFile( Artifact input, String missingMessage, Label labelInCaseOfBug) { Label inputLabel = input.getOwner(); if (inputLabel == null) { @@ -1496,8 +1497,8 @@ ActionInputMap inputArtifactData = null; Map<Artifact, Collection<Artifact>> expandedArtifacts = null; - Map<Artifact, ImmutableList<FilesetOutputSymlink>> filesetsInsideRunfiles = null; - Map<Artifact, ImmutableList<FilesetOutputSymlink>> topLevelFilesets = null; + ImmutableMap<Artifact, ImmutableList<FilesetOutputSymlink>> filesetsInsideRunfiles = null; + ImmutableMap<Artifact, ImmutableList<FilesetOutputSymlink>> topLevelFilesets = null; Token token = null; NestedSet<Artifact> discoveredInputs = null; FileSystem actionFileSystem = null;