diff options
27 files changed, 181 insertions, 164 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java index 0f2c387102..f7a9e0734a 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java @@ -22,6 +22,7 @@ import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; @@ -138,18 +139,18 @@ public final class ActionInputHelper { } /** - * Instantiates a concrete TreeFileArtifact with the given parent Artifact and path - * relative to that Artifact. + * Instantiates a concrete TreeFileArtifact with the given parent Artifact and path relative to + * that Artifact. */ public static TreeFileArtifact treeFileArtifact( - Artifact parent, PathFragment relativePath) { + SpecialArtifact parent, PathFragment relativePath) { Preconditions.checkState(parent.isTreeArtifact(), "Given parent %s must be a TreeArtifact", parent); return new TreeFileArtifact(parent, relativePath); } public static TreeFileArtifact treeFileArtifact( - Artifact parent, PathFragment relativePath, ArtifactOwner artifactOwner) { + SpecialArtifact parent, PathFragment relativePath, ArtifactOwner artifactOwner) { Preconditions.checkState(parent.isTreeArtifact(), "Given parent %s must be a TreeArtifact", parent); return new TreeFileArtifact( @@ -159,16 +160,16 @@ public final class ActionInputHelper { } /** - * Instantiates a concrete TreeFileArtifact with the given parent Artifact and path - * relative to that Artifact. + * Instantiates a concrete TreeFileArtifact with the given parent Artifact and path relative to + * that Artifact. */ - public static TreeFileArtifact treeFileArtifact(Artifact parent, String relativePath) { + public static TreeFileArtifact treeFileArtifact(SpecialArtifact parent, String relativePath) { return treeFileArtifact(parent, PathFragment.create(relativePath)); } /** Returns an Iterable of TreeFileArtifacts with the given parent and parent relative paths. */ public static Iterable<TreeFileArtifact> asTreeFileArtifacts( - final Artifact parent, Iterable<? extends PathFragment> parentRelativePaths) { + final SpecialArtifact parent, Iterable<? extends PathFragment> parentRelativePaths) { Preconditions.checkState(parent.isTreeArtifact(), "Given parent %s must be a TreeArtifact", parent); return Iterables.transform( @@ -177,7 +178,7 @@ public final class ActionInputHelper { /** Returns a Set of TreeFileArtifacts with the given parent and parent-relative paths. */ public static Set<TreeFileArtifact> asTreeFileArtifacts( - final Artifact parent, Set<? extends PathFragment> parentRelativePaths) { + final SpecialArtifact parent, Set<? extends PathFragment> parentRelativePaths) { Preconditions.checkState(parent.isTreeArtifact(), "Given parent %s must be a TreeArtifact", parent); 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 6993478742..395f5dfde8 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 @@ -536,11 +536,10 @@ public class Artifact @Immutable @AutoCodec(dependency = FileSystemProvider.class) public static final class TreeFileArtifact extends Artifact { - public static final InjectingObjectCodec<TreeFileArtifact, FileSystemProvider> CODEC = new Artifact_TreeFileArtifact_AutoCodec(); - private final Artifact parentTreeArtifact; + private final SpecialArtifact parentTreeArtifact; private final PathFragment parentRelativePath; /** @@ -548,7 +547,7 @@ public class Artifact * TreeArtifact. The {@link ArtifactOwner} of the TreeFileArtifact is the {@link ArtifactOwner} * of the parent TreeArtifact. */ - TreeFileArtifact(Artifact parent, PathFragment parentRelativePath) { + TreeFileArtifact(SpecialArtifact parent, PathFragment parentRelativePath) { this(parent, parentRelativePath, parent.getArtifactOwner()); } @@ -558,7 +557,7 @@ public class Artifact */ @AutoCodec.Instantiator TreeFileArtifact( - Artifact parentTreeArtifact, PathFragment parentRelativePath, ArtifactOwner owner) { + SpecialArtifact parentTreeArtifact, PathFragment parentRelativePath, ArtifactOwner owner) { super( parentTreeArtifact.getPath().getRelative(parentRelativePath), parentTreeArtifact.getRoot(), diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java index 098a04e05a..e417853ce1 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java @@ -21,6 +21,7 @@ import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.ActionRegistry; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.ArtifactRoot; import com.google.devtools.build.lib.actions.MiddlemanFactory; import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoKey; @@ -82,7 +83,7 @@ public interface AnalysisEnvironment extends ActionRegistry { * creating it if necessary, and setting the root of that artifact to {@code root}. The artifact * will be a TreeArtifact. */ - Artifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root); + SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root); /** * Returns the artifact for the derived file {@code rootRelativePath}, creating it if necessary, diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java index 94cc572bda..d41125096f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java @@ -21,6 +21,7 @@ import com.google.common.collect.Lists; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.ArtifactFactory; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.ArtifactRoot; @@ -241,11 +242,12 @@ public class CachingAnalysisEnvironment implements AnalysisEnvironment { } @Override - public Artifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { + public SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { Preconditions.checkState(enabled); - return trackArtifactAndOrigin( - artifactFactory.getTreeArtifact(rootRelativePath, root, getOwner()), - extendedSanityChecks ? new Throwable() : null); + return (SpecialArtifact) + trackArtifactAndOrigin( + artifactFactory.getTreeArtifact(rootRelativePath, root, getOwner()), + extendedSanityChecks ? new Throwable() : null); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index 0749eac2af..73fb629874 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -37,6 +37,7 @@ import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.ActionRegistry; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.ArtifactRoot; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.PrerequisiteValidator; @@ -683,7 +684,7 @@ public final class RuleContext extends TargetContext * thus ensuring that it doesn't clash with other artifacts generated by other rules using this * method. */ - public Artifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { + public SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { Preconditions.checkState(rootRelativePath.startsWith(getPackageDirectory()), "Output artifact '%s' not under package directory '%s' for target '%s'", rootRelativePath, getPackageDirectory(), getLabel()); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java index 5ba555fcd3..fb5eafda48 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.ActionResult; import com.google.devtools.build.lib.actions.Actions; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact; import com.google.devtools.build.lib.actions.ArtifactPrefixConflictException; import com.google.devtools.build.lib.actions.BaseSpawn; @@ -75,7 +76,7 @@ public final class PopulateTreeArtifactAction extends AbstractAction { private final Artifact archive; private final Artifact archiveManifest; - private final Artifact outputTreeArtifact; + private final SpecialArtifact outputTreeArtifact; private final FilesToRunProvider zipper; /** @@ -92,7 +93,7 @@ public final class PopulateTreeArtifactAction extends AbstractAction { ActionOwner owner, Artifact archive, Artifact archiveManifest, - Artifact treeArtifactToPopulate, + SpecialArtifact treeArtifactToPopulate, FilesToRunProvider zipper) { super( owner, @@ -114,7 +115,7 @@ public final class PopulateTreeArtifactAction extends AbstractAction { } private static class PopulateTreeArtifactSpawn extends BaseSpawn { - private final Artifact treeArtifact; + private final SpecialArtifact treeArtifact; private final Iterable<PathFragment> entriesToExtract; // The output TreeFileArtifacts are created lazily outside of the contructor because potentially @@ -122,7 +123,7 @@ public final class PopulateTreeArtifactAction extends AbstractAction { private Collection<TreeFileArtifact> outputTreeFileArtifacts; PopulateTreeArtifactSpawn( - Artifact treeArtifact, + SpecialArtifact treeArtifact, Iterable<PathFragment> entriesToExtract, Iterable<String> commandLine, RunfilesSupplier runfilesSupplier, diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java index b6150b9d5c..1b944d44e8 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java @@ -21,6 +21,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionInputHelper; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.analysis.FilesToRunProvider; @@ -33,8 +34,8 @@ import java.util.Map; * An {@link ActionTemplate} that expands into {@link SpawnAction}s at execution time. */ public final class SpawnActionTemplate implements ActionTemplate<SpawnAction> { - private final Artifact inputTreeArtifact; - private final Artifact outputTreeArtifact; + private final SpecialArtifact inputTreeArtifact; + private final SpecialArtifact outputTreeArtifact; private final NestedSet<Artifact> commonInputs; private final NestedSet<Artifact> allInputs; private final NestedSet<Artifact> commonTools; @@ -64,8 +65,8 @@ public final class SpawnActionTemplate implements ActionTemplate<SpawnAction> { private SpawnActionTemplate( ActionOwner actionOwner, - Artifact inputTreeArtifact, - Artifact outputTreeArtifact, + SpecialArtifact inputTreeArtifact, + SpecialArtifact outputTreeArtifact, NestedSet<Artifact> commonInputs, NestedSet<Artifact> commonTools, OutputPathMapper outputPathMapper, @@ -229,19 +230,19 @@ public final class SpawnActionTemplate implements ActionTemplate<SpawnAction> { private CustomCommandLine commandLineTemplate; private PathFragment executable; - private final Artifact inputTreeArtifact; - private final Artifact outputTreeArtifact; + private final SpecialArtifact inputTreeArtifact; + private final SpecialArtifact outputTreeArtifact; private final NestedSetBuilder<Artifact> inputsBuilder = NestedSetBuilder.stableOrder(); private final NestedSetBuilder<Artifact> toolsBuilder = NestedSetBuilder.stableOrder(); private final SpawnAction.Builder spawnActionBuilder; /** * Creates a {@link SpawnActionTemplate} builder. - * + * * @param inputTreeArtifact the required input TreeArtifact. * @param outputTreeArtifact the required output TreeArtifact. */ - public Builder(Artifact inputTreeArtifact, Artifact outputTreeArtifact) { + public Builder(SpecialArtifact inputTreeArtifact, SpecialArtifact outputTreeArtifact) { Preconditions.checkState( inputTreeArtifact.isTreeArtifact() && outputTreeArtifact.isTreeArtifact(), "Either %s or %s is not a TreeArtifact", diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index e27b478866..fca322d84d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.FailAction; import com.google.devtools.build.lib.actions.ParameterFile; import com.google.devtools.build.lib.analysis.ConfiguredTarget; @@ -1027,7 +1028,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { createDexMergerAction( ruleContext, multidex ? "minimal" : "off", dexArchives, classesDex, mainDexList, dexopts); } else { - Artifact shardsToMerge = + SpecialArtifact shardsToMerge = createSharderAction( ruleContext, dexArchives, @@ -1114,13 +1115,13 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { * * @return Tree artifact containing dex archives to merge into exactly one .dex file each */ - private static Artifact createSharderAction( + private static SpecialArtifact createSharderAction( RuleContext ruleContext, ImmutableList<Artifact> dexArchives, @Nullable Artifact mainDexList, boolean minimalMainDex, @Nullable Artifact inclusionFilterJar) { - Artifact outputTree = + SpecialArtifact outputTree = ruleContext.getTreeArtifact( ruleContext.getUniqueDirectory("dexsplits"), ruleContext.getBinOrGenfilesDirectory()); @@ -1168,8 +1169,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { * @return Tree artifact containing zips with final dex files named for inclusion in an APK. */ private static Artifact createTemplatedMergerActions( - RuleContext ruleContext, Artifact inputTree, Collection<String> dexopts) { - Artifact outputTree = + RuleContext ruleContext, SpecialArtifact inputTree, Collection<String> dexopts) { + SpecialArtifact outputTree = ruleContext.getTreeArtifact( ruleContext.getUniqueDirectory("dexfiles"), ruleContext.getBinOrGenfilesDirectory()); SpawnActionTemplate.Builder dexmerger = diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java index baeac86ce0..a3f6cc0d86 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionException; import com.google.devtools.build.lib.actions.ActionInputHelper; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.analysis.actions.ActionTemplate; @@ -38,8 +39,8 @@ import java.util.List; */ public final class CppCompileActionTemplate implements ActionTemplate<CppCompileAction> { private final CppCompileActionBuilder cppCompileActionBuilder; - private final Artifact sourceTreeArtifact; - private final Artifact outputTreeArtifact; + private final SpecialArtifact sourceTreeArtifact; + private final SpecialArtifact outputTreeArtifact; private final CcToolchainProvider toolchain; private final Iterable<ArtifactCategory> categories; private final ActionOwner actionOwner; @@ -48,6 +49,7 @@ public final class CppCompileActionTemplate implements ActionTemplate<CppCompile /** * Creates an CppCompileActionTemplate. + * * @param sourceTreeArtifact the TreeArtifact that contains source files to compile. * @param outputTreeArtifact the TreeArtifact that contains compilation outputs. * @param cppCompileActionBuilder An almost completely configured {@link CppCompileActionBuilder} @@ -59,8 +61,8 @@ public final class CppCompileActionTemplate implements ActionTemplate<CppCompile * @param actionOwner the owner of this {@link ActionTemplate}. */ CppCompileActionTemplate( - Artifact sourceTreeArtifact, - Artifact outputTreeArtifact, + SpecialArtifact sourceTreeArtifact, + SpecialArtifact outputTreeArtifact, CppCompileActionBuilder cppCompileActionBuilder, CcToolchainProvider toolchain, Iterable<ArtifactCategory> categories, diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java index c9f96cfca0..5f56c9f1d7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java @@ -25,6 +25,7 @@ import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.MiddlemanFactory; import com.google.devtools.build.lib.actions.ParameterFile; import com.google.devtools.build.lib.analysis.AnalysisUtils; @@ -965,7 +966,7 @@ public class CppHelper { } /** Returns the corresponding compiled TreeArtifact given the source TreeArtifact. */ - public static Artifact getCompileOutputTreeArtifact( + public static SpecialArtifact getCompileOutputTreeArtifact( RuleContext ruleContext, Artifact sourceTreeArtifact, boolean usePic) { PathFragment objectDir = getObjDirectory(ruleContext.getLabel(), usePic); PathFragment rootRelativePath = sourceTreeArtifact.getRootRelativePath(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java index 7691c2e770..8f84a7a3e5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.FailAction; import com.google.devtools.build.lib.analysis.AnalysisEnvironment; import com.google.devtools.build.lib.analysis.RuleContext; @@ -1146,8 +1147,8 @@ public final class CppModel { CppCompileActionBuilder builder, Iterable<ArtifactCategory> outputCategories, boolean usePic) { - Artifact sourceArtifact = source.getSource(); - Artifact outputFiles = + SpecialArtifact sourceArtifact = (SpecialArtifact) source.getSource(); + SpecialArtifact outputFiles = CppHelper.getCompileOutputTreeArtifact(ruleContext, sourceArtifact, usePic); // TODO(rduan): Dotd file output is not supported yet. builder.setOutputs(outputFiles, /* dotdFile= */ null); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java index bf635c9e1d..c8098064aa 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java @@ -23,6 +23,7 @@ import com.google.common.io.BaseEncoding; import com.google.devtools.build.lib.actions.ActionInput; import com.google.devtools.build.lib.actions.ActionInputHelper; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact; import com.google.devtools.build.lib.actions.cache.Md5Digest; import com.google.devtools.build.lib.actions.cache.Metadata; @@ -192,7 +193,7 @@ public class ActionMetadataHandler implements MetadataHandler { checkInconsistentData(artifact, oldValue, value); return metadataFromValue(value); } else if (artifact.isTreeArtifact()) { - TreeArtifactValue setValue = getTreeArtifactValue(artifact); + TreeArtifactValue setValue = getTreeArtifactValue((SpecialArtifact) artifact); if (setValue != null && setValue != TreeArtifactValue.MISSING_TREE_ARTIFACT) { return setValue.getMetadata(); } @@ -290,7 +291,7 @@ public class ActionMetadataHandler implements MetadataHandler { return contents; } - private TreeArtifactValue getTreeArtifactValue(Artifact artifact) throws IOException { + private TreeArtifactValue getTreeArtifactValue(SpecialArtifact artifact) throws IOException { TreeArtifactValue value = outputTreeArtifactData.get(artifact); if (value != null) { return value; @@ -384,7 +385,7 @@ public class ActionMetadataHandler implements MetadataHandler { return TreeArtifactValue.create(values); } - private TreeArtifactValue constructTreeArtifactValueFromFilesystem(Artifact artifact) + private TreeArtifactValue constructTreeArtifactValueFromFilesystem(SpecialArtifact artifact) throws IOException { Preconditions.checkState(artifact.isTreeArtifact(), artifact); @@ -600,7 +601,7 @@ public class ActionMetadataHandler implements MetadataHandler { } } - private void setTreeReadOnlyAndExecutable(Artifact parent, PathFragment subpath) + private void setTreeReadOnlyAndExecutable(SpecialArtifact parent, PathFragment subpath) throws IOException { Path path = parent.getPath().getRelative(subpath); if (path.isDirectory()) { diff --git a/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java b/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java index 9e4b9389bc..085415cf34 100644 --- a/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java +++ b/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java @@ -899,8 +899,8 @@ public class CustomCommandLineTest { @Test public void testTreeFileArtifactExecPathArgs() { - Artifact treeArtifactOne = createTreeArtifact("myArtifact/treeArtifact1"); - Artifact treeArtifactTwo = createTreeArtifact("myArtifact/treeArtifact2"); + SpecialArtifact treeArtifactOne = createTreeArtifact("myArtifact/treeArtifact1"); + SpecialArtifact treeArtifactTwo = createTreeArtifact("myArtifact/treeArtifact2"); CustomCommandLine commandLineTemplate = builder() @@ -981,7 +981,7 @@ public class CustomCommandLineTest { } } - private Artifact createTreeArtifact(String rootRelativePath) { + private SpecialArtifact createTreeArtifact(String rootRelativePath) { PathFragment relpath = PathFragment.create(rootRelativePath); return new SpecialArtifact( rootDir.getRoot().getRelative(relpath), @@ -992,7 +992,7 @@ public class CustomCommandLineTest { } private TreeFileArtifact createTreeFileArtifact( - Artifact inputTreeArtifact, String parentRelativePath) { + SpecialArtifact inputTreeArtifact, String parentRelativePath) { return ActionInputHelper.treeFileArtifact( inputTreeArtifact, PathFragment.create(parentRelativePath)); diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java index 4792caf480..74af54a41c 100644 --- a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java +++ b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java @@ -40,6 +40,7 @@ import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.ActionResult; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.ArtifactResolver; @@ -597,7 +598,7 @@ public final class ActionsTestUtil { } public static SpawnActionTemplate createDummySpawnActionTemplate( - Artifact inputTreeArtifact, Artifact outputTreeArtifact) { + SpecialArtifact inputTreeArtifact, SpecialArtifact outputTreeArtifact) { return new SpawnActionTemplate.Builder(inputTreeArtifact, outputTreeArtifact) .setCommandLineTemplate(CustomCommandLine.builder().build()) .setExecutable(PathFragment.create("bin/executable")) diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/ParamFileWriteActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/ParamFileWriteActionTest.java index 5f85b94faa..4c9d2dda5c 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/actions/ParamFileWriteActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/ParamFileWriteActionTest.java @@ -52,7 +52,7 @@ import org.junit.runners.JUnit4; public class ParamFileWriteActionTest extends BuildViewTestCase { private ArtifactRoot rootDir; private Artifact outputArtifact; - private Artifact treeArtifact; + private SpecialArtifact treeArtifact; @Before public void createArtifacts() throws Exception { @@ -108,7 +108,7 @@ public class ParamFileWriteActionTest extends BuildViewTestCase { + "out/artifact/myTreeFileArtifact/artifacts/treeFileArtifact2"); } - private Artifact createTreeArtifact(String rootRelativePath) { + private SpecialArtifact createTreeArtifact(String rootRelativePath) { PathFragment relpath = PathFragment.create(rootRelativePath); return new SpecialArtifact( rootDir.getRoot().getRelative(relpath), @@ -119,7 +119,7 @@ public class ParamFileWriteActionTest extends BuildViewTestCase { } private TreeFileArtifact createTreeFileArtifact( - Artifact inputTreeArtifact, String parentRelativePath) { + SpecialArtifact inputTreeArtifact, String parentRelativePath) { return ActionInputHelper.treeFileArtifact( inputTreeArtifact, PathFragment.create(parentRelativePath)); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactActionTest.java index a22868beee..345aa97ab8 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactActionTest.java @@ -266,8 +266,8 @@ public class PopulateTreeArtifactActionTest extends BuildViewTestCase { public void testComputeKey() throws Exception { final Artifact archiveA = getSourceArtifact("myArchiveA.zip"); final Artifact archiveB = getSourceArtifact("myArchiveB.zip"); - final Artifact treeArtifactToPopulateA = createTreeArtifact("testA/archive_member"); - final Artifact treeArtifactToPopulateB = createTreeArtifact("testB/archive_member"); + final SpecialArtifact treeArtifactToPopulateA = createTreeArtifact("testA/archive_member"); + final SpecialArtifact treeArtifactToPopulateB = createTreeArtifact("testB/archive_member"); final Artifact archiveManifestA = getSourceArtifact("archiveManifestA.txt"); final Artifact archiveManifestB = getSourceArtifact("archiveManifestB.txt"); final FilesToRunProvider zipperA = FilesToRunProvider.fromSingleExecutableArtifact( @@ -282,7 +282,7 @@ public class PopulateTreeArtifactActionTest extends BuildViewTestCase { public Action generate(ImmutableSet<KeyAttributes> attributesToFlip) { Artifact archive = attributesToFlip.contains(KeyAttributes.ARCHIVE) ? archiveA : archiveB; - Artifact treeArtifactToPopulate = + SpecialArtifact treeArtifactToPopulate = attributesToFlip.contains(KeyAttributes.TREE_ARTIFACT) ? treeArtifactToPopulateA : treeArtifactToPopulateB; @@ -306,7 +306,7 @@ public class PopulateTreeArtifactActionTest extends BuildViewTestCase { private PopulateTreeArtifactAction createPopulateTreeArtifactAction() throws Exception { Artifact archive = getSourceArtifact("myArchive.zip"); - Artifact treeArtifactToPopulate = createTreeArtifact("test/archive_member"); + SpecialArtifact treeArtifactToPopulate = createTreeArtifact("test/archive_member"); Artifact archiveManifest = getSourceArtifact("archiveManifest.txt"); FilesToRunProvider unzip = FilesToRunProvider.fromSingleExecutableArtifact( getSourceArtifact("unzipBinary")); @@ -343,7 +343,7 @@ public class PopulateTreeArtifactActionTest extends BuildViewTestCase { null); } - private Artifact createTreeArtifact(String rootRelativePath) { + private SpecialArtifact createTreeArtifact(String rootRelativePath) { PathFragment relpath = PathFragment.create(rootRelativePath); return new SpecialArtifact( root.getRoot().getRelative(relpath), diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplateTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplateTest.java index 3001b3b66f..ad03fe7ef9 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplateTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplateTest.java @@ -66,8 +66,8 @@ public class SpawnActionTemplateTest { @Test public void testCommonToolsAndInputs() { - Artifact inputTreeArtifact = createInputTreeArtifact(); - Artifact outputTreeArtifact = createOutputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact outputTreeArtifact = createOutputTreeArtifact(); Artifact commonInput = createDerivedArtifact("common/input"); Artifact commonTool = createDerivedArtifact("common/tool"); Artifact executable = createDerivedArtifact("bin/cp"); @@ -90,8 +90,8 @@ public class SpawnActionTemplateTest { @Test public void testBuilder_outputPathMapperRequired() { - Artifact inputTreeArtifact = createInputTreeArtifact(); - Artifact outputTreeArtifact = createOutputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact outputTreeArtifact = createOutputTreeArtifact(); SpawnActionTemplate.Builder builder = builder(inputTreeArtifact, outputTreeArtifact) .setExecutionInfo(ImmutableMap.<String, String>of("local", "")) .setExecutable(PathFragment.create("/bin/cp")) @@ -107,8 +107,8 @@ public class SpawnActionTemplateTest { @Test public void testBuilder_executableRequired() { - Artifact inputTreeArtifact = createInputTreeArtifact(); - Artifact outputTreeArtifact = createOutputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact outputTreeArtifact = createOutputTreeArtifact(); SpawnActionTemplate.Builder builder = builder(inputTreeArtifact, outputTreeArtifact) .setExecutionInfo(ImmutableMap.<String, String>of("local", "")) .setOutputPathMapper(IDENTITY_MAPPER) @@ -124,8 +124,8 @@ public class SpawnActionTemplateTest { @Test public void testBuilder_commandlineTemplateRequired() { - Artifact inputTreeArtifact = createInputTreeArtifact(); - Artifact outputTreeArtifact = createOutputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact outputTreeArtifact = createOutputTreeArtifact(); SpawnActionTemplate.Builder builder = builder(inputTreeArtifact, outputTreeArtifact) .setExecutionInfo(ImmutableMap.<String, String>of("local", "")) .setOutputPathMapper(IDENTITY_MAPPER) @@ -141,8 +141,8 @@ public class SpawnActionTemplateTest { @Test public void testExpandedAction_inputAndOutputTreeFileArtifacts() throws Exception { SpawnActionTemplate actionTemplate = createSimpleSpawnActionTemplate(); - Artifact inputTreeArtifact = createInputTreeArtifact(); - Artifact outputTreeArtifact = createOutputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact outputTreeArtifact = createOutputTreeArtifact(); Iterable<TreeFileArtifact> inputTreeFileArtifacts = createInputTreeFileArtifacts(inputTreeArtifact); @@ -167,8 +167,8 @@ public class SpawnActionTemplateTest { @Test public void testExpandedAction_commonToolsAndInputs() throws Exception { - Artifact inputTreeArtifact = createInputTreeArtifact(); - Artifact outputTreeArtifact = createOutputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact outputTreeArtifact = createOutputTreeArtifact(); Artifact commonInput = createDerivedArtifact("common/input"); Artifact commonTool = createDerivedArtifact("common/tool"); Artifact executable = createDerivedArtifact("bin/cp"); @@ -201,8 +201,8 @@ public class SpawnActionTemplateTest { @Test public void testExpandedAction_arguments() throws Exception { SpawnActionTemplate actionTemplate = createSimpleSpawnActionTemplate(); - Artifact inputTreeArtifact = createInputTreeArtifact(); - Artifact outputTreeArtifact = createOutputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact outputTreeArtifact = createOutputTreeArtifact(); Iterable<TreeFileArtifact> inputTreeFileArtifacts = createInputTreeFileArtifacts(inputTreeArtifact); @@ -228,7 +228,7 @@ public class SpawnActionTemplateTest { @Test public void testExpandedAction_executionInfoAndEnvironment() throws Exception { SpawnActionTemplate actionTemplate = createSimpleSpawnActionTemplate(); - Artifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); Iterable<TreeFileArtifact> inputTreeFileArtifacts = createInputTreeFileArtifacts(inputTreeArtifact); @@ -247,8 +247,8 @@ public class SpawnActionTemplateTest { @Test public void testExpandedAction_illegalOutputPath() throws Exception { - Artifact inputTreeArtifact = createInputTreeArtifact(); - Artifact outputTreeArtifact = createOutputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact outputTreeArtifact = createOutputTreeArtifact(); Iterable<TreeFileArtifact> inputTreeFileArtifacts = createInputTreeFileArtifacts(inputTreeArtifact); @@ -294,14 +294,14 @@ public class SpawnActionTemplateTest { } } - private SpawnActionTemplate.Builder builder(Artifact inputTreeArtifact, - Artifact outputTreeArtifact) { + private SpawnActionTemplate.Builder builder( + SpecialArtifact inputTreeArtifact, SpecialArtifact outputTreeArtifact) { return new SpawnActionTemplate.Builder(inputTreeArtifact, outputTreeArtifact); } private SpawnActionTemplate createSimpleSpawnActionTemplate() { - Artifact inputTreeArtifact = createInputTreeArtifact(); - Artifact outputTreeArtifact = createOutputTreeArtifact(); + SpecialArtifact inputTreeArtifact = createInputTreeArtifact(); + SpecialArtifact outputTreeArtifact = createOutputTreeArtifact(); return builder(inputTreeArtifact, outputTreeArtifact) .setExecutionInfo(ImmutableMap.<String, String>of("local", "")) @@ -314,15 +314,15 @@ public class SpawnActionTemplateTest { .build(ActionsTestUtil.NULL_ACTION_OWNER); } - private Artifact createInputTreeArtifact() { + private SpecialArtifact createInputTreeArtifact() { return createTreeArtifact("my/inputTree"); } - private Artifact createOutputTreeArtifact() { + private SpecialArtifact createOutputTreeArtifact() { return createTreeArtifact("my/outputTree"); } - private Artifact createTreeArtifact(String rootRelativePath) { + private SpecialArtifact createTreeArtifact(String rootRelativePath) { PathFragment relpath = PathFragment.create(rootRelativePath); return new SpecialArtifact( root.getRoot().getRelative(relpath), @@ -344,7 +344,8 @@ public class SpawnActionTemplateTest { .build(); } - private Iterable<TreeFileArtifact> createInputTreeFileArtifacts(Artifact inputTreeArtifact) { + private Iterable<TreeFileArtifact> createInputTreeFileArtifacts( + SpecialArtifact inputTreeArtifact) { return ActionInputHelper.asTreeFileArtifacts( inputTreeArtifact, ImmutableList.of( diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java index 2f7ad5b7c3..dc15b84842 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.ActionResult; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.ArtifactFactory; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.ArtifactRoot; @@ -130,7 +131,7 @@ public final class AnalysisTestUtil { } @Override - public Artifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { + public SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { return null; } @@ -331,7 +332,7 @@ public final class AnalysisTestUtil { } @Override - public Artifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { + public SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { return null; } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java index 38738a2899..8d89ee08dc 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.actions.ActionGraph; import com.google.devtools.build.lib.actions.ActionInput; import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.ArtifactRoot; import com.google.devtools.build.lib.actions.CommandLineExpansionException; @@ -1714,7 +1715,7 @@ public abstract class BuildViewTestCase extends FoundationTestCase { } @Override - public Artifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { + public SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) { throw new UnsupportedOperationException(); } diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java index a6bda43c08..db56bd53d6 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java @@ -668,7 +668,7 @@ public class CppLinkActionTest extends BuildViewTestCase { assertError("the need whole archive flag must be false for static links", builder); } - private Artifact createTreeArtifact(String name) { + private SpecialArtifact createTreeArtifact(String name) { FileSystem fs = scratch.getFileSystem(); Path execRoot = fs.getPath(TestUtils.tmpDir()); PathFragment execPath = PathFragment.create("out").getRelative(name); @@ -691,7 +691,7 @@ public class CppLinkActionTest extends BuildViewTestCase { @Test public void testLinksTreeArtifactLibraries() throws Exception { - Artifact testTreeArtifact = createTreeArtifact("library_directory"); + SpecialArtifact testTreeArtifact = createTreeArtifact("library_directory"); TreeFileArtifact library0 = ActionInputHelper.treeFileArtifact(testTreeArtifact, "library0.o"); TreeFileArtifact library1 = ActionInputHelper.treeFileArtifact(testTreeArtifact, "library1.o"); @@ -738,7 +738,7 @@ public class CppLinkActionTest extends BuildViewTestCase { LinkTargetType.ALWAYS_LINK_STATIC_LIBRARY, LinkTargetType.ALWAYS_LINK_PIC_STATIC_LIBRARY); - Artifact testTreeArtifact = createTreeArtifact("library_directory"); + SpecialArtifact testTreeArtifact = createTreeArtifact("library_directory"); TreeFileArtifact library0 = ActionInputHelper.treeFileArtifact(testTreeArtifact, "library0.o"); TreeFileArtifact library1 = ActionInputHelper.treeFileArtifact(testTreeArtifact, "library1.o"); diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java index e3937d4efd..a2df8b5030 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionInputHelper; import com.google.devtools.build.lib.actions.ActionInputPrefetcher; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.CommandAction; @@ -936,9 +937,9 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest { // Therefore we need to fake some files inside them to test the action template in this // analysis-time test. TreeFileArtifact oneSourceFileFromGenJar = - ActionInputHelper.treeFileArtifact(sourceFilesFromGenJar, "children1.m"); + ActionInputHelper.treeFileArtifact((SpecialArtifact) sourceFilesFromGenJar, "children1.m"); TreeFileArtifact oneObjFileFromGenJar = - ActionInputHelper.treeFileArtifact(objectFilesFromGenJar, "children1.o"); + ActionInputHelper.treeFileArtifact((SpecialArtifact) objectFilesFromGenJar, "children1.o"); Iterable<CommandAction> compileActions = getActionsForInputsOfGeneratingActionTemplate( objectFilesFromGenJar, oneSourceFileFromGenJar); diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java index 85e4ff53af..09cb47d7c2 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.rules.objc; import com.google.devtools.build.lib.actions.ActionInputHelper; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander; +import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; @@ -34,8 +35,8 @@ public class J2ObjcLibraryTest extends ObjcRuleTestCase { new ArtifactExpander() { @Override public void expand(Artifact artifact, Collection<? super Artifact> output) { - output.add(ActionInputHelper.treeFileArtifact(artifact, "children1")); - output.add(ActionInputHelper.treeFileArtifact(artifact, "children2")); + output.add(ActionInputHelper.treeFileArtifact((SpecialArtifact) artifact, "children1")); + output.add(ActionInputHelper.treeFileArtifact((SpecialArtifact) artifact, "children2")); } }; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunctionTest.java index b6a834ef55..147b8b2a0c 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunctionTest.java @@ -96,9 +96,9 @@ public final class ActionTemplateExpansionFunctionTest extends FoundationTestCas @Test public void testActionTemplateExpansionFunction() throws Exception { - Artifact inputTreeArtifact = createAndPopulateTreeArtifact( - "inputTreeArtifact", "child0", "child1", "child2"); - Artifact outputTreeArtifact = createTreeArtifact("outputTreeArtifact"); + SpecialArtifact inputTreeArtifact = + createAndPopulateTreeArtifact("inputTreeArtifact", "child0", "child1", "child2"); + SpecialArtifact outputTreeArtifact = createTreeArtifact("outputTreeArtifact"); SpawnActionTemplate spawnActionTemplate = ActionsTestUtil.createDummySpawnActionTemplate( inputTreeArtifact, outputTreeArtifact); @@ -120,10 +120,9 @@ public final class ActionTemplateExpansionFunctionTest extends FoundationTestCas @Test public void testThrowsOnActionConflict() throws Exception { - Artifact inputTreeArtifact = createAndPopulateTreeArtifact( - "inputTreeArtifact", "child0", "child1", "child2"); - Artifact outputTreeArtifact = createTreeArtifact("outputTreeArtifact"); - + SpecialArtifact inputTreeArtifact = + createAndPopulateTreeArtifact("inputTreeArtifact", "child0", "child1", "child2"); + SpecialArtifact outputTreeArtifact = createTreeArtifact("outputTreeArtifact"); OutputPathMapper mapper = new OutputPathMapper() { @Override @@ -148,9 +147,9 @@ public final class ActionTemplateExpansionFunctionTest extends FoundationTestCas @Test public void testThrowsOnArtifactPrefixConflict() throws Exception { - Artifact inputTreeArtifact = createAndPopulateTreeArtifact( - "inputTreeArtifact", "child0", "child1", "child2"); - Artifact outputTreeArtifact = createTreeArtifact("outputTreeArtifact"); + SpecialArtifact inputTreeArtifact = + createAndPopulateTreeArtifact("inputTreeArtifact", "child0", "child1", "child2"); + SpecialArtifact outputTreeArtifact = createTreeArtifact("outputTreeArtifact"); OutputPathMapper mapper = new OutputPathMapper() { private int i = 0; @@ -205,7 +204,7 @@ public final class ActionTemplateExpansionFunctionTest extends FoundationTestCas return actionList.build(); } - private Artifact createTreeArtifact(String path) { + private SpecialArtifact createTreeArtifact(String path) { PathFragment execPath = PathFragment.create("out").getRelative(path); Path fullPath = rootDirectory.getRelative(execPath); return new SpecialArtifact( @@ -216,9 +215,9 @@ public final class ActionTemplateExpansionFunctionTest extends FoundationTestCas SpecialArtifactType.TREE); } - private Artifact createAndPopulateTreeArtifact(String path, String... childRelativePaths) + private SpecialArtifact createAndPopulateTreeArtifact(String path, String... childRelativePaths) throws Exception { - Artifact treeArtifact = createTreeArtifact(path); + SpecialArtifact treeArtifact = createTreeArtifact(path); Map<TreeFileArtifact, FileArtifactValue> treeFileArtifactMap = new LinkedHashMap<>(); for (String childRelativePath : childRelativePaths) { diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java index bd8f78eb47..1699fc25fc 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java @@ -178,7 +178,7 @@ public class ArtifactFunctionTest extends ArtifactFunctionTestCase { @Test public void testActionTreeArtifactOutput() throws Throwable { - Artifact artifact = createDerivedTreeArtifactWithAction("treeArtifact"); + SpecialArtifact artifact = createDerivedTreeArtifactWithAction("treeArtifact"); TreeFileArtifact treeFileArtifact1 = createFakeTreeFileArtifact(artifact, "child1", "hello1"); TreeFileArtifact treeFileArtifact2 = createFakeTreeFileArtifact(artifact, "child2", "hello2"); @@ -192,13 +192,12 @@ public class ArtifactFunctionTest extends ArtifactFunctionTestCase { @Test public void testSpawnActionTemplate() throws Throwable { // artifact1 is a tree artifact generated by normal action. - Artifact artifact1 = createDerivedTreeArtifactWithAction("treeArtifact1"); + SpecialArtifact artifact1 = createDerivedTreeArtifactWithAction("treeArtifact1"); createFakeTreeFileArtifact(artifact1, "child1", "hello1"); createFakeTreeFileArtifact(artifact1, "child2", "hello2"); - // artifact2 is a tree artifact generated by action template. - Artifact artifact2 = createDerivedTreeArtifactOnly("treeArtifact2"); + SpecialArtifact artifact2 = createDerivedTreeArtifactOnly("treeArtifact2"); TreeFileArtifact treeFileArtifact1 = createFakeTreeFileArtifact(artifact2, "child1", "hello1"); TreeFileArtifact treeFileArtifact2 = createFakeTreeFileArtifact(artifact2, "child2", "hello2"); @@ -215,19 +214,19 @@ public class ArtifactFunctionTest extends ArtifactFunctionTestCase { @Test public void testConsecutiveSpawnActionTemplates() throws Throwable { // artifact1 is a tree artifact generated by normal action. - Artifact artifact1 = createDerivedTreeArtifactWithAction("treeArtifact1"); + SpecialArtifact artifact1 = createDerivedTreeArtifactWithAction("treeArtifact1"); createFakeTreeFileArtifact(artifact1, "child1", "hello1"); createFakeTreeFileArtifact(artifact1, "child2", "hello2"); // artifact2 is a tree artifact generated by action template. - Artifact artifact2 = createDerivedTreeArtifactOnly("treeArtifact2"); + SpecialArtifact artifact2 = createDerivedTreeArtifactOnly("treeArtifact2"); createFakeTreeFileArtifact(artifact2, "child1", "hello1"); createFakeTreeFileArtifact(artifact2, "child2", "hello2"); actions.add( ActionsTestUtil.createDummySpawnActionTemplate(artifact1, artifact2)); // artifact3 is a tree artifact generated by action template. - Artifact artifact3 = createDerivedTreeArtifactOnly("treeArtifact3"); + SpecialArtifact artifact3 = createDerivedTreeArtifactOnly("treeArtifact3"); TreeFileArtifact treeFileArtifact1 = createFakeTreeFileArtifact(artifact3, "child1", "hello1"); TreeFileArtifact treeFileArtifact2 = createFakeTreeFileArtifact(artifact3, "child2", "hello2"); actions.add( @@ -270,13 +269,13 @@ public class ArtifactFunctionTest extends ArtifactFunctionTestCase { fullPath, middlemanRoot, middlemanRoot.getExecPath().getRelative(path), ALL_OWNER); } - private Artifact createDerivedTreeArtifactWithAction(String path) { - Artifact treeArtifact = createDerivedTreeArtifactOnly(path); + private SpecialArtifact createDerivedTreeArtifactWithAction(String path) { + SpecialArtifact treeArtifact = createDerivedTreeArtifactOnly(path); actions.add(new DummyAction(ImmutableList.<Artifact>of(), treeArtifact)); return treeArtifact; } - private Artifact createDerivedTreeArtifactOnly(String path) { + private SpecialArtifact createDerivedTreeArtifactOnly(String path) { PathFragment execPath = PathFragment.create("out").getRelative(path); Path fullPath = root.getRelative(execPath); return new SpecialArtifact( @@ -287,8 +286,8 @@ public class ArtifactFunctionTest extends ArtifactFunctionTestCase { SpecialArtifactType.TREE); } - private TreeFileArtifact createFakeTreeFileArtifact(Artifact treeArtifact, - String parentRelativePath, String content) throws Exception { + private TreeFileArtifact createFakeTreeFileArtifact( + SpecialArtifact treeArtifact, String parentRelativePath, String content) throws Exception { TreeFileArtifact treeFileArtifact = ActionInputHelper.treeFileArtifact( treeArtifact, PathFragment.create(parentRelativePath)); Path path = treeFileArtifact.getPath(); @@ -361,9 +360,9 @@ public class ArtifactFunctionTest extends ArtifactFunctionTestCase { try { if (output.isTreeArtifact()) { TreeFileArtifact treeFileArtifact1 = ActionInputHelper.treeFileArtifact( - output, PathFragment.create("child1")); + (SpecialArtifact) output, PathFragment.create("child1")); TreeFileArtifact treeFileArtifact2 = ActionInputHelper.treeFileArtifact( - output, PathFragment.create("child2")); + (SpecialArtifact) output, PathFragment.create("child2")); TreeArtifactValue treeArtifactValue = TreeArtifactValue.create(ImmutableMap.of( treeFileArtifact1, FileArtifactValue.create(treeFileArtifact1), treeFileArtifact2, FileArtifactValue.create(treeFileArtifact2))); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java index d33c259caa..f7a989a4ae 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java @@ -419,25 +419,25 @@ public class FilesystemValueCheckerTest { // To decouple FileSystemValueTester checking from Action execution, we inject TreeArtifact // contents into ActionExecutionValues. - Artifact out1 = createTreeArtifact("one"); + SpecialArtifact out1 = createTreeArtifact("one"); TreeFileArtifact file11 = treeFileArtifact(out1, "fizz"); FileSystemUtils.createDirectoryAndParents(out1.getPath()); FileSystemUtils.writeContentAsLatin1(file11.getPath(), "buzz"); - Artifact out2 = createTreeArtifact("two"); + SpecialArtifact out2 = createTreeArtifact("two"); FileSystemUtils.createDirectoryAndParents(out2.getPath().getChild("subdir")); TreeFileArtifact file21 = treeFileArtifact(out2, "moony"); TreeFileArtifact file22 = treeFileArtifact(out2, "subdir/wormtail"); FileSystemUtils.writeContentAsLatin1(file21.getPath(), "padfoot"); FileSystemUtils.writeContentAsLatin1(file22.getPath(), "prongs"); - Artifact outEmpty = createTreeArtifact("empty"); + SpecialArtifact outEmpty = createTreeArtifact("empty"); FileSystemUtils.createDirectoryAndParents(outEmpty.getPath()); - Artifact outUnchanging = createTreeArtifact("untouched"); + SpecialArtifact outUnchanging = createTreeArtifact("untouched"); FileSystemUtils.createDirectoryAndParents(outUnchanging.getPath()); - Artifact last = createTreeArtifact("zzzzzzzzzz"); + SpecialArtifact last = createTreeArtifact("zzzzzzzzzz"); FileSystemUtils.createDirectoryAndParents(last.getPath()); SkyKey actionLookupKey = @@ -614,7 +614,7 @@ public class FilesystemValueCheckerTest { outputPath.getRelative(relPath), ArtifactRoot.asDerivedRoot(fs.getPath("/"), outputPath)); } - private Artifact createTreeArtifact(String relPath) throws IOException { + private SpecialArtifact createTreeArtifact(String relPath) throws IOException { Path outputDir = fs.getPath("/bin"); Path outputPath = outputDir.getRelative(relPath); outputDir.createDirectory(); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java index 675030c84f..30b6c4caf8 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java @@ -93,12 +93,12 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { Artifact in; - Artifact outOne; + SpecialArtifact outOne; TreeFileArtifact outOneFileOne; TreeFileArtifact outOneFileTwo; Button buttonOne = new Button(); - Artifact outTwo; + SpecialArtifact outTwo; TreeFileArtifact outTwoFileOne; TreeFileArtifact outTwoFileTwo; Button buttonTwo = new Button(); @@ -187,10 +187,10 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { /** Unchanged TreeArtifact outputs should not cause reexecution. */ @Test public void testCacheCheckingForTreeArtifactsDoesNotCauseReexecution() throws Exception { - Artifact outOne = createTreeArtifact("outputOne"); + SpecialArtifact outOne = createTreeArtifact("outputOne"); Button buttonOne = new Button(); - Artifact outTwo = createTreeArtifact("outputTwo"); + SpecialArtifact outTwo = createTreeArtifact("outputTwo"); Button buttonTwo = new Button(); TouchingTestAction actionOne = new TouchingTestAction( @@ -482,7 +482,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { @Test public void testOutputsAreReadOnlyAndExecutable() throws Exception { - final Artifact out = createTreeArtifact("output"); + final SpecialArtifact out = createTreeArtifact("output"); TreeArtifactTestAction action = new TreeArtifactTestAction(out) { @@ -515,7 +515,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { @Test public void testValidRelativeSymlinkAccepted() throws Exception { - final Artifact out = createTreeArtifact("output"); + final SpecialArtifact out = createTreeArtifact("output"); TreeArtifactTestAction action = new TreeArtifactTestAction(out) { @@ -545,7 +545,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { reporter.removeHandler(failFastHandler); reporter.addHandler(storingEventHandler); - final Artifact out = createTreeArtifact("output"); + final SpecialArtifact out = createTreeArtifact("output"); TreeArtifactTestAction action = new TreeArtifactTestAction(out) { @@ -585,7 +585,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { reporter.removeHandler(failFastHandler); reporter.addHandler(storingEventHandler); - final Artifact out = createTreeArtifact("output"); + final SpecialArtifact out = createTreeArtifact("output"); TreeArtifactTestAction action = new TreeArtifactTestAction(out) { @@ -621,7 +621,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { public void testAbsoluteSymlinkAccepted() throws Exception { scratch.overwriteFile("/random/pointer"); - final Artifact out = createTreeArtifact("output"); + final SpecialArtifact out = createTreeArtifact("output"); TreeArtifactTestAction action = new TreeArtifactTestAction(out) { @@ -651,7 +651,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { reporter.removeHandler(failFastHandler); reporter.addHandler(storingEventHandler); - final Artifact out = createTreeArtifact("output"); + final SpecialArtifact out = createTreeArtifact("output"); TreeArtifactTestAction action = new TreeArtifactTestAction(out) { @@ -729,7 +729,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { @Test public void testExpandedActionsBuildInActionTemplate() throws Throwable { // artifact1 is a tree artifact generated by a TouchingTestAction. - Artifact artifact1 = createTreeArtifact("treeArtifact1"); + SpecialArtifact artifact1 = createTreeArtifact("treeArtifact1"); TreeFileArtifact treeFileArtifactA = ActionInputHelper.treeFileArtifact( artifact1, PathFragment.create("child1")); TreeFileArtifact treeFileArtifactB = ActionInputHelper.treeFileArtifact( @@ -737,7 +737,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { registerAction(new TouchingTestAction(treeFileArtifactA, treeFileArtifactB)); // artifact2 is a tree artifact generated by an action template. - Artifact artifact2 = createTreeArtifact("treeArtifact2"); + SpecialArtifact artifact2 = createTreeArtifact("treeArtifact2"); SpawnActionTemplate actionTemplate = ActionsTestUtil.createDummySpawnActionTemplate( artifact1, artifact2); registerAction(actionTemplate); @@ -769,7 +769,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { reporter.removeHandler(failFastHandler); // artifact1 is a tree artifact generated by a TouchingTestAction. - Artifact artifact1 = createTreeArtifact("treeArtifact1"); + SpecialArtifact artifact1 = createTreeArtifact("treeArtifact1"); TreeFileArtifact treeFileArtifactA = ActionInputHelper.treeFileArtifact( artifact1, PathFragment.create("child1")); TreeFileArtifact treeFileArtifactB = ActionInputHelper.treeFileArtifact( @@ -777,7 +777,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { registerAction(new TouchingTestAction(treeFileArtifactA, treeFileArtifactB)); // artifact2 is a tree artifact generated by an action template. - Artifact artifact2 = createTreeArtifact("treeArtifact2"); + SpecialArtifact artifact2 = createTreeArtifact("treeArtifact2"); SpawnActionTemplate actionTemplate = ActionsTestUtil.createDummySpawnActionTemplate( artifact1, artifact2); registerAction(actionTemplate); @@ -816,7 +816,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { reporter.removeHandler(failFastHandler); // artifact1 is a tree artifact generated by a TouchingTestAction. - Artifact artifact1 = createTreeArtifact("treeArtifact1"); + SpecialArtifact artifact1 = createTreeArtifact("treeArtifact1"); TreeFileArtifact treeFileArtifactA = ActionInputHelper.treeFileArtifact( artifact1, PathFragment.create("child1")); TreeFileArtifact treeFileArtifactB = ActionInputHelper.treeFileArtifact( @@ -824,7 +824,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { registerAction(new TouchingTestAction(treeFileArtifactA, treeFileArtifactB)); // artifact2 is a tree artifact generated by an action template. - Artifact artifact2 = createTreeArtifact("treeArtifact2"); + SpecialArtifact artifact2 = createTreeArtifact("treeArtifact2"); SpawnActionTemplate actionTemplate = ActionsTestUtil.createDummySpawnActionTemplate( artifact1, artifact2); registerAction(actionTemplate); @@ -863,7 +863,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { reporter.removeHandler(failFastHandler); // artifact1 is a tree artifact generated by a TouchingTestAction. - Artifact artifact1 = createTreeArtifact("treeArtifact1"); + SpecialArtifact artifact1 = createTreeArtifact("treeArtifact1"); TreeFileArtifact treeFileArtifactA = ActionInputHelper.treeFileArtifact( artifact1, PathFragment.create("child1")); TreeFileArtifact treeFileArtifactB = ActionInputHelper.treeFileArtifact( @@ -871,7 +871,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { registerAction(new TouchingTestAction(treeFileArtifactA, treeFileArtifactB)); // artifact2 is a tree artifact generated by an action template. - Artifact artifact2 = createTreeArtifact("treeArtifact2"); + SpecialArtifact artifact2 = createTreeArtifact("treeArtifact2"); SpawnActionTemplate actionTemplate = ActionsTestUtil.createDummySpawnActionTemplate( artifact1, artifact2); registerAction(actionTemplate); @@ -909,12 +909,12 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { reporter.removeHandler(failFastHandler); // artifact1 is created by a action that throws. - Artifact artifact1 = createTreeArtifact("treeArtifact1"); + SpecialArtifact artifact1 = createTreeArtifact("treeArtifact1"); registerAction( new ThrowingDummyAction(ImmutableList.<Artifact>of(), ImmutableList.of(artifact1))); // artifact2 is a tree artifact generated by an action template. - Artifact artifact2 = createTreeArtifact("treeArtifact2"); + SpecialArtifact artifact2 = createTreeArtifact("treeArtifact2"); SpawnActionTemplate actionTemplate = ActionsTestUtil.createDummySpawnActionTemplate( artifact1, artifact2); registerAction(actionTemplate); @@ -930,11 +930,11 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { @Test public void testEmptyInputAndOutputTreeArtifactInActionTemplate() throws Throwable { // artifact1 is an empty tree artifact which is generated by a single no-op dummy action. - Artifact artifact1 = createTreeArtifact("treeArtifact1"); + SpecialArtifact artifact1 = createTreeArtifact("treeArtifact1"); registerAction(new NoOpDummyAction(ImmutableList.<Artifact>of(), ImmutableList.of(artifact1))); // artifact2 is a tree artifact generated by an action template that takes artifact1 as input. - Artifact artifact2 = createTreeArtifact("treeArtifact2"); + SpecialArtifact artifact2 = createTreeArtifact("treeArtifact2"); SpawnActionTemplate actionTemplate = ActionsTestUtil.createDummySpawnActionTemplate( artifact1, artifact2); registerAction(actionTemplate); @@ -955,7 +955,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { final Iterable<TreeFileArtifact> inputFiles; final Iterable<TreeFileArtifact> outputFiles; - TreeArtifactTestAction(final Artifact output, final String... subOutputs) { + TreeArtifactTestAction(final SpecialArtifact output, final String... subOutputs) { this(Runnables.doNothing(), null, ImmutableList.<TreeFileArtifact>of(), @@ -1064,9 +1064,9 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { } /** Checks there's exactly one output, and returns it. */ - Artifact getSoleOutput() { + SpecialArtifact getSoleOutput() { Iterator<Artifact> it = getOutputs().iterator(); - Artifact r = it.next(); + SpecialArtifact r = (SpecialArtifact) it.next(); Preconditions.checkNotNull(r); Preconditions.checkState(!it.hasNext()); Preconditions.checkState(r.equals(getPrimaryOutput())); @@ -1078,7 +1078,8 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { treeFileArtifact(getSoleOutput(), PathFragment.create(outputName))); } - static List<TreeFileArtifact> asTreeFileArtifacts(final Artifact parent, String... files) { + static List<TreeFileArtifact> asTreeFileArtifacts( + final SpecialArtifact parent, String... files) { return Lists.transform( Arrays.asList(files), new Function<String, TreeFileArtifact>() { @@ -1097,7 +1098,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { super(Runnables.doNothing(), outputPaths); } - TouchingTestAction(Runnable effect, Artifact output, String... outputPaths) { + TouchingTestAction(Runnable effect, SpecialArtifact output, String... outputPaths) { super(effect, asTreeFileArtifacts(output, outputPaths)); } @@ -1145,7 +1146,8 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { /** Copies the given TreeFileArtifact inputs to the given outputs, in respective order. */ private static class CopyTreeAction extends TreeArtifactTestAction { - CopyTreeAction(Runnable effect, Artifact input, Artifact output, String... sourcesAndDests) { + CopyTreeAction( + Runnable effect, SpecialArtifact input, SpecialArtifact output, String... sourcesAndDests) { super(effect, input, asTreeFileArtifacts(input, sourcesAndDests), output, asTreeFileArtifacts(output, sourcesAndDests)); } @@ -1186,7 +1188,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { } } - private Artifact createTreeArtifact(String name) { + private SpecialArtifact createTreeArtifact(String name) { FileSystem fs = scratch.getFileSystem(); Path execRoot = fs.getPath(TestUtils.tmpDir()); PathFragment execPath = PathFragment.create("out").getRelative(name); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java index 4e3b242b5d..96bc4bed65 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java @@ -85,13 +85,12 @@ public class TreeArtifactMetadataTest extends ArtifactFunctionTestCase { } private TreeArtifactValue doTestTreeArtifacts(Iterable<PathFragment> children) throws Exception { - Artifact output = createTreeArtifact("output"); + SpecialArtifact output = createTreeArtifact("output"); return doTestTreeArtifacts(output, children); } - private TreeArtifactValue doTestTreeArtifacts(Artifact tree, - Iterable<PathFragment> children) - throws Exception { + private TreeArtifactValue doTestTreeArtifacts( + SpecialArtifact tree, Iterable<PathFragment> children) throws Exception { TreeArtifactValue value = evaluateTreeArtifact(tree, children); assertThat(value.getChildPaths()).containsExactlyElementsIn(ImmutableSet.copyOf(children)); assertThat(value.getChildren()).containsExactlyElementsIn( @@ -200,10 +199,10 @@ public class TreeArtifactMetadataTest extends ArtifactFunctionTestCase { writeFile(path, contents); } - private Artifact createTreeArtifact(String path) throws IOException { + private SpecialArtifact createTreeArtifact(String path) throws IOException { PathFragment execPath = PathFragment.create("out").getRelative(path); Path fullPath = root.getRelative(execPath); - Artifact output = + SpecialArtifact output = new SpecialArtifact( fullPath, ArtifactRoot.asDerivedRoot(root, root.getRelative("out")), @@ -254,7 +253,7 @@ public class TreeArtifactMetadataTest extends ArtifactFunctionTestCase { ActionLookupValue actionLookupValue = (ActionLookupValue) env.getValue(actionLookupData.getActionLookupNode()); Action action = actionLookupValue.getAction(actionLookupData.getActionIndex()); - Artifact output = Iterables.getOnlyElement(action.getOutputs()); + SpecialArtifact output = (SpecialArtifact) Iterables.getOnlyElement(action.getOutputs()); for (PathFragment subpath : testTreeArtifactContents) { try { TreeFileArtifact suboutput = ActionInputHelper.treeFileArtifact(output, subpath); |