aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/Artifact.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/actions/ParamFileWriteActionTest.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactActionTest.java10
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplateTest.java51
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunctionTest.java25
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java27
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java12
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java60
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java13
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);