diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/actions/Artifact.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/actions/Artifact.java | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java index e48740b3a3..fb4f1edb37 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java +++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java @@ -55,6 +55,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.Objects; import javax.annotation.Nullable; @@ -172,6 +173,35 @@ public class Artifact } } + /** Implementation of {@link ArtifactExpander} */ + public static class ArtifactExpanderImpl implements ArtifactExpander { + private final Map<Artifact, Collection<Artifact>> expandedInputs; + private final Map<Artifact, ImmutableList<FilesetOutputSymlink>> expandedFilesets; + + public ArtifactExpanderImpl( + Map<Artifact, Collection<Artifact>> expandedInputMiddlemen, + Map<Artifact, ImmutableList<FilesetOutputSymlink>> expandedFilesets) { + this.expandedInputs = expandedInputMiddlemen; + this.expandedFilesets = expandedFilesets; + } + + @Override + public void expand(Artifact artifact, Collection<? super Artifact> output) { + Preconditions.checkState( + artifact.isMiddlemanArtifact() || artifact.isTreeArtifact(), artifact); + Collection<Artifact> result = expandedInputs.get(artifact); + if (result != null) { + output.addAll(result); + } + } + + @Override + public ImmutableList<FilesetOutputSymlink> getFileset(Artifact artifact) { + Preconditions.checkState(artifact.isFileset()); + return Preconditions.checkNotNull(expandedFilesets.get(artifact)); + } + } + public static final ImmutableList<Artifact> NO_ARTIFACTS = ImmutableList.of(); /** A Predicate that evaluates to true if the Artifact is not a middleman artifact. */ |