Rename MiddlemanExpander to ArtifactExpander, and refactor it to yield ArtifactFiles.
--
MOS_MIGRATED_REVID=114166208
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 23e2a4c..2a70002 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
@@ -76,7 +76,7 @@
* This is a legacy facility and should not be used by any new rule implementations.
* In particular, the file system cache integrity checks fail for directories.
* <li>An 'aggregating middleman' special Artifact, which may be expanded using a
- * {@link MiddlemanExpander} at Action execution time. This is used by a handful of rules to save
+ * {@link ArtifactExpander} at Action execution time. This is used by a handful of rules to save
* memory.
* <li>A 'constant metadata' special Artifact. These represent real files, changes to which are
* ignored by the build system. They are useful for files which change frequently but do not affect
@@ -116,14 +116,15 @@
};
/** An object that can expand middleman artifacts. */
- public interface MiddlemanExpander {
+ public interface ArtifactExpander {
/**
- * Expands the middleman artifact "mm", and populates "output" with the result.
+ * Expands the given artifact, and populates "output" with the result.
*
- * <p>{@code mm.isMiddlemanArtifact()} must be true. Only aggregating middlemen are expanded.
+ * <p>{@code artifact.isMiddlemanArtifact() || artifact.isTreeArtifact()} must be true.
+ * Only aggregating middlemen and tree artifacts are expanded.
*/
- void expand(Artifact mm, Collection<? super Artifact> output);
+ void expand(Artifact artifact, Collection<? super ArtifactFile> output);
}
public static final ImmutableList<Artifact> NO_ARTIFACTS = ImmutableList.of();
@@ -639,8 +640,8 @@
* {@link MiddlemanType#AGGREGATING_MIDDLEMAN} middleman actions expanded once.
*/
public static void addExpandedArtifacts(Iterable<Artifact> artifacts,
- Collection<? super Artifact> output, MiddlemanExpander middlemanExpander) {
- addExpandedArtifacts(artifacts, output, Functions.<Artifact>identity(), middlemanExpander);
+ Collection<? super ArtifactFile> output, ArtifactExpander artifactExpander) {
+ addExpandedArtifacts(artifacts, output, Functions.<ArtifactFile>identity(), artifactExpander);
}
/**
@@ -652,9 +653,9 @@
@VisibleForTesting
public static void addExpandedExecPathStrings(Iterable<Artifact> artifacts,
Collection<String> output,
- MiddlemanExpander middlemanExpander) {
+ ArtifactExpander artifactExpander) {
addExpandedArtifacts(artifacts, output, ActionInputHelper.EXEC_PATH_STRING_FORMATTER,
- middlemanExpander);
+ artifactExpander);
}
/**
@@ -664,8 +665,8 @@
* once.
*/
public static void addExpandedExecPaths(Iterable<Artifact> artifacts,
- Collection<PathFragment> output, MiddlemanExpander middlemanExpander) {
- addExpandedArtifacts(artifacts, output, EXEC_PATH_FORMATTER, middlemanExpander);
+ Collection<PathFragment> output, ArtifactExpander artifactExpander) {
+ addExpandedArtifacts(artifacts, output, EXEC_PATH_FORMATTER, artifactExpander);
}
/**
@@ -673,27 +674,29 @@
* outputFormatter and adds them to a given collection. Middleman artifacts
* are expanded once.
*/
- private static <E> void addExpandedArtifacts(Iterable<Artifact> artifacts,
+ private static <E> void addExpandedArtifacts(Iterable<? extends Artifact> artifacts,
Collection<? super E> output,
- Function<? super Artifact, E> outputFormatter,
- MiddlemanExpander middlemanExpander) {
+ Function<? super ArtifactFile, E> outputFormatter,
+ ArtifactExpander artifactExpander) {
for (Artifact artifact : artifacts) {
- if (artifact.isMiddlemanArtifact()) {
- expandMiddlemanArtifact(artifact, output, outputFormatter, middlemanExpander);
+ if (artifact.isMiddlemanArtifact() || artifact.isTreeArtifact()) {
+ expandArtifact(artifact, output, outputFormatter, artifactExpander);
} else {
output.add(outputFormatter.apply(artifact));
}
}
}
- private static <E> void expandMiddlemanArtifact(Artifact middleman,
- Collection<? super E> output,
- Function<? super Artifact, E> outputFormatter,
- MiddlemanExpander middlemanExpander) {
- Preconditions.checkArgument(middleman.isMiddlemanArtifact());
- List<Artifact> artifacts = new ArrayList<>();
- middlemanExpander.expand(middleman, artifacts);
- addExpandedArtifacts(artifacts, output, outputFormatter, middlemanExpander);
+ private static <E> void expandArtifact(Artifact middleman,
+ Collection<? super E> output,
+ Function<? super ArtifactFile, E> outputFormatter,
+ ArtifactExpander artifactExpander) {
+ Preconditions.checkArgument(middleman.isMiddlemanArtifact() || middleman.isTreeArtifact());
+ List<ArtifactFile> artifacts = new ArrayList<>();
+ artifactExpander.expand(middleman, artifacts);
+ for (ArtifactFile artifact : artifacts) {
+ output.add(outputFormatter.apply(artifact));
+ }
}
/**
@@ -702,9 +705,9 @@
* returned list is mutable.
*/
public static List<String> asExpandedExecPathStrings(Iterable<Artifact> artifacts,
- MiddlemanExpander middlemanExpander) {
+ ArtifactExpander artifactExpander) {
List<String> result = new ArrayList<>();
- addExpandedExecPathStrings(artifacts, result, middlemanExpander);
+ addExpandedExecPathStrings(artifacts, result, artifactExpander);
return result;
}
@@ -714,9 +717,9 @@
* returned list is mutable.
*/
public static List<PathFragment> asExpandedExecPaths(Iterable<Artifact> artifacts,
- MiddlemanExpander middlemanExpander) {
+ ArtifactExpander artifactExpander) {
List<PathFragment> result = new ArrayList<>();
- addExpandedExecPaths(artifacts, result, middlemanExpander);
+ addExpandedExecPaths(artifacts, result, artifactExpander);
return result;
}