aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2018-02-05 09:33:15 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-05 09:35:15 -0800
commitac09f0a1b39092aa92cd86ffe51b30488e3ae312 (patch)
tree5da2c93a53102c82258a2637b9e853c7bfb2dd2c /src/main/java
parent98f703b46e08b6795af609b6f453ce3884f28a28 (diff)
Add type assertion that TreeFileArtifact's parentTreeArtifact member is a
SpecialArtifact. PiperOrigin-RevId: 184539696
Diffstat (limited to 'src/main/java')
-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
12 files changed, 59 insertions, 47 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()) {