Change signatures to DerivedArtifact, and get Labels from non-Artifact sources when possible. In tests, try to get artifacts directly from the actual configured target, rather than creating fresh ones. This change should be a prod functional no-op, just changing signatures. Split out from the follow-up to reduce the diff. PiperOrigin-RevId: 250527865
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java index 379962f..51c994f 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java +++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
@@ -136,7 +136,7 @@ Iterable<Artifact> tools, Iterable<Artifact> inputs, RunfilesSupplier runfilesSupplier, - Iterable<Artifact> outputs, + Iterable<? extends Artifact> outputs, ActionEnvironment env) { Preconditions.checkNotNull(owner); this.owner = owner;
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 1b0bf61..2d2ffd7 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
@@ -142,14 +142,15 @@ * Instantiates a concrete TreeFileArtifact with the given parent Artifact and path relative to * that Artifact. */ - public static TreeFileArtifact treeFileArtifact(Artifact parent, PathFragment relativePath) { + public static TreeFileArtifact treeFileArtifact( + Artifact.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) { + Artifact.SpecialArtifact parent, PathFragment relativePath, ArtifactOwner artifactOwner) { Preconditions.checkState(parent.isTreeArtifact(), "Given parent %s must be a TreeArtifact", parent); return new TreeFileArtifact( @@ -162,13 +163,14 @@ * 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( + Artifact.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 Artifact.SpecialArtifact parent, Iterable<? extends PathFragment> parentRelativePaths) { Preconditions.checkState(parent.isTreeArtifact(), "Given parent %s must be a TreeArtifact", parent); return Iterables.transform( @@ -177,7 +179,7 @@ /** 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 Artifact.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/ActionRegistry.java b/src/main/java/com/google/devtools/build/lib/actions/ActionRegistry.java index df064e8..03f58e0 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ActionRegistry.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ActionRegistry.java
@@ -23,9 +23,6 @@ */ void registerAction(ActionAnalysisMetadata... actions); - /** - * Get the (Label and BuildConfiguration) of the ConfiguredTarget ultimately responsible for all - * these actions. - */ - ArtifactOwner getOwner(); + /** Get the key of the ConfiguredTarget/Aspect ultimately responsible for all these actions. */ + ActionLookupValue.ActionLookupKey getOwner(); }
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 b3801e7..673143b 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
@@ -277,7 +277,6 @@ } /** An artifact corresponding to a file in the output tree, generated by an {@link Action}. */ - @VisibleForTesting public static class DerivedArtifact extends Artifact { private final PathFragment rootRelativePath; @@ -304,10 +303,11 @@ } /** - * Returns the parent Artifact containing this Artifact. Artifacts without parents shall - * return null. + * Returns the parent Artifact containing this Artifact. Artifacts without parents shall return + * null. */ - @Nullable public Artifact getParent() { + @Nullable + public SpecialArtifact getParent() { return null; } @@ -360,7 +360,7 @@ * Returns the artifact owner. May be null. */ @Nullable public final Label getOwner() { - return owner.getLabel(); + return getOwnerLabel(); } /** @@ -409,6 +409,9 @@ * Returns true iff this is a source Artifact as determined by its path and root relationships. * Note that this will report all Artifacts in the output tree, including in the include symlink * tree, as non-source. + * + * <p>An {@link Artifact} is a {@link SourceArtifact} iff this returns true, and a {@link + * DerivedArtifact} otherwise. */ @Override public final boolean isSourceArtifact() { @@ -417,6 +420,8 @@ /** * Returns true iff this is a middleman Artifact as determined by its root. + * + * <p>If true, this artifact is necessarily a {@link DerivedArtifact}. */ public final boolean isMiddlemanArtifact() { return getRoot().isMiddlemanRoot(); @@ -424,6 +429,9 @@ /** * Returns true iff this is a TreeArtifact representing a directory tree containing Artifacts. + * + * <p>if true, this artifact is necessarily a {@link SpecialArtifact} with type {@link + * SpecialArtifactType#TREE}. */ public boolean isTreeArtifact() { return false; @@ -431,19 +439,25 @@ /** * Returns whether the artifact represents a Fileset. + * + * <p>if true, this artifact is necessarily a {@link SpecialArtifact} with type {@link + * SpecialArtifactType#FILESET}. */ public boolean isFileset() { return false; } + /** The disjunction of {@link #isTreeArtifact} and {@link #isFileset}. */ @Override public boolean isDirectory() { return isTreeArtifact() || isFileset(); } /** - * Returns true iff metadata cache must return constant metadata for the - * given artifact. + * Returns true iff metadata cache must return constant metadata for the given artifact. + * + * <p>If true, this artifact is necessarily a {@link SpecialArtifact} with type {@link + * SpecialArtifactType#CONSTANT_METADATA}. */ public boolean isConstantMetadata() { return false; @@ -496,12 +510,11 @@ /** * A special kind of artifact that either is a fileset or needs special metadata caching behavior. * - * <p>We subclass {@link Artifact} instead of storing the special attributes inside in order to - * save memory. The proportion of artifacts that are special is very small, and by not having to - * keep around the attribute for the rest we save some memory. + * <p>We subclass {@link DerivedArtifact} instead of storing the special attributes inside in + * order to save memory. The proportion of artifacts that are special is very small, and by not + * having to keep around the attribute for the rest we save some memory. */ @Immutable - @VisibleForTesting @AutoCodec public static final class SpecialArtifact extends DerivedArtifact { private final SpecialArtifactType type; @@ -535,7 +548,7 @@ @Override @Nullable - public Artifact getParent() { + public SpecialArtifact getParent() { return null; } @@ -559,14 +572,14 @@ * to support action inputs and outputs that are unpredictable at analysis time. TreeFileArtifacts * should not be created directly by any rules at analysis time. * - * <p>We subclass {@link Artifact} instead of storing the extra fields directly inside in order to - * save memory. The proportion of TreeFileArtifacts is very small, and by not having to keep - * around the extra fields for the rest we save some memory. + * <p>We subclass {@link DerivedArtifact} instead of storing the extra fields directly inside in + * order to save memory. The proportion of TreeFileArtifacts is very small, and by not having to + * keep around the extra fields for the rest we save some memory. */ @Immutable @AutoCodec public static final class TreeFileArtifact extends DerivedArtifact { - private final Artifact parentTreeArtifact; + private final SpecialArtifact parentTreeArtifact; private final PathFragment parentRelativePath; /** @@ -575,7 +588,7 @@ * of the parent TreeArtifact. */ @VisibleForTesting - public TreeFileArtifact(Artifact parent, PathFragment parentRelativePath) { + public TreeFileArtifact(SpecialArtifact parent, PathFragment parentRelativePath) { this(parent, parentRelativePath, parent.getArtifactOwner()); } @@ -585,7 +598,7 @@ */ @AutoCodec.Instantiator TreeFileArtifact( - Artifact parentTreeArtifact, PathFragment parentRelativePath, ArtifactOwner owner) { + SpecialArtifact parentTreeArtifact, PathFragment parentRelativePath, ArtifactOwner owner) { super( parentTreeArtifact.getRoot(), parentTreeArtifact.getExecPath().getRelative(parentRelativePath), @@ -608,7 +621,7 @@ } @Override - public Artifact getParent() { + public SpecialArtifact getParent() { return parentTreeArtifact; }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java index 25904dc..3cc5e3b 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
@@ -224,10 +224,11 @@ * computed as {@code root.getRelative(rootRelativePath).relativeTo(root.execRoot)}. */ // TODO(bazel-team): Don't allow root == execRootParent. - public Artifact getDerivedArtifact( + public Artifact.DerivedArtifact getDerivedArtifact( PathFragment rootRelativePath, ArtifactRoot root, ArtifactOwner owner) { validatePath(rootRelativePath, root); - return getArtifact(root, root.getExecPath().getRelative(rootRelativePath), owner, null); + return (Artifact.DerivedArtifact) + getArtifact(root, root.getExecPath().getRelative(rootRelativePath), owner, null); } /** @@ -238,11 +239,15 @@ * <p>The root must be below the execRootParent, and the execPath of the resulting Artifact is * computed as {@code root.getRelative(rootRelativePath).relativeTo(root.execRoot)}. */ - public Artifact getFilesetArtifact( + public Artifact.DerivedArtifact getFilesetArtifact( PathFragment rootRelativePath, ArtifactRoot root, ArtifactOwner owner) { validatePath(rootRelativePath, root); - return getArtifact( - root, root.getExecPath().getRelative(rootRelativePath), owner, SpecialArtifactType.FILESET); + return (Artifact.DerivedArtifact) + getArtifact( + root, + root.getExecPath().getRelative(rootRelativePath), + owner, + SpecialArtifactType.FILESET); } /** @@ -252,21 +257,26 @@ * <p>The root must be below the execRootParent, and the execPath of the resulting Artifact is * computed as {@code root.getRelative(rootRelativePath).relativeTo(root.execRoot)}. */ - public Artifact getTreeArtifact( + public Artifact.SpecialArtifact getTreeArtifact( PathFragment rootRelativePath, ArtifactRoot root, ArtifactOwner owner) { validatePath(rootRelativePath, root); - return getArtifact( - root, root.getExecPath().getRelative(rootRelativePath), owner, SpecialArtifactType.TREE); + return (Artifact.SpecialArtifact) + getArtifact( + root, + root.getExecPath().getRelative(rootRelativePath), + owner, + SpecialArtifactType.TREE); } - public Artifact getConstantMetadataArtifact( + public Artifact.DerivedArtifact getConstantMetadataArtifact( PathFragment rootRelativePath, ArtifactRoot root, ArtifactOwner owner) { validatePath(rootRelativePath, root); - return getArtifact( - root, - root.getExecPath().getRelative(rootRelativePath), - owner, - SpecialArtifactType.CONSTANT_METADATA); + return (Artifact.DerivedArtifact) + getArtifact( + root, + root.getExecPath().getRelative(rootRelativePath), + owner, + SpecialArtifactType.CONSTANT_METADATA); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BasicActionLookupValue.java b/src/main/java/com/google/devtools/build/lib/actions/BasicActionLookupValue.java index d99fbee..3b4a153 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/BasicActionLookupValue.java +++ b/src/main/java/com/google/devtools/build/lib/actions/BasicActionLookupValue.java
@@ -30,10 +30,6 @@ protected final ImmutableList<ActionAnalysisMetadata> actions; @VisibleForSerialization protected final ImmutableMap<Artifact, Integer> generatingActionIndex; - protected BasicActionLookupValue(ActionAnalysisMetadata action) { - this(Actions.GeneratingActions.fromSingleAction(action), /*nonceVersion=*/ null); - } - protected BasicActionLookupValue( ImmutableList<ActionAnalysisMetadata> actions, ImmutableMap<Artifact, Integer> generatingActionIndex,
diff --git a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java index 43a9e37..e726a31 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java +++ b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java
@@ -181,7 +181,7 @@ * <p>Note: there's no need to synchronize this method; the only use of a field is via a call to * another synchronized method (getArtifact()). */ - public Artifact createMiddlemanAllowMultiple( + public Artifact.DerivedArtifact createMiddlemanAllowMultiple( ActionRegistry registry, ActionOwner owner, PathFragment packageDirectory, @@ -192,19 +192,19 @@ PathFragment stampName = PathFragment.create("_middlemen/" + (purpose.startsWith(escapedPackageDirectory) ? purpose : (escapedPackageDirectory + purpose))); - Artifact stampFile = artifactFactory.getDerivedArtifact(stampName, middlemanDir, - actionRegistry.getOwner()); + Artifact.DerivedArtifact stampFile = + artifactFactory.getDerivedArtifact(stampName, middlemanDir, actionRegistry.getOwner()); MiddlemanAction.create( registry, owner, inputs, stampFile, purpose, MiddlemanType.AGGREGATING_MIDDLEMAN); return stampFile; } - private Artifact getStampFileArtifact( + private Artifact.DerivedArtifact getStampFileArtifact( String middlemanName, String purpose, ArtifactRoot middlemanDir) { String escapedFilename = Actions.escapedPath(middlemanName); PathFragment stampName = PathFragment.create("_middlemen/" + escapedFilename + "-" + purpose); - Artifact stampFile = artifactFactory.getDerivedArtifact(stampName, middlemanDir, - actionRegistry.getOwner()); + Artifact.DerivedArtifact stampFile = + artifactFactory.getDerivedArtifact(stampName, middlemanDir, actionRegistry.getOwner()); return stampFile; } }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataInjector.java b/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataInjector.java index 7f6abf6..78ed389 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataInjector.java +++ b/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataInjector.java
@@ -41,7 +41,8 @@ * @param children the metadata of the files stored in the directory. The paths must be relative * to the path of {@code output}. */ - void injectRemoteDirectory(Artifact output, Map<PathFragment, RemoteFileArtifactValue> children); + void injectRemoteDirectory( + Artifact.SpecialArtifact output, Map<PathFragment, RemoteFileArtifactValue> children); /** * Marks an {@link Artifact} as intentionally omitted.
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 a23e5fa..2f69670 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
@@ -64,7 +64,7 @@ * artifacts generated by two different rules to clash. To avoid this, use the artifact creation * method on {@link RuleContext} mentioned above. */ - Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root); + Artifact.DerivedArtifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root); /** * Returns an artifact for the derived file {@code rootRelativePath} whose changes do not cause a
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index 1556fc2..9e82277 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -658,8 +658,8 @@ } /** - * Returns a list of actions from 'provider' that were registered by an aspect from - * 'aspectClasses'. All actions in 'provider' are considered - both direct and transitive. + * Returns a list of artifacts from 'provider' that were registered by an aspect from + * 'aspectClasses'. All artifacts in 'provider' are considered - both direct and transitive. */ private ImmutableList<Artifact> filterTransitiveExtraActions( ExtraActionArtifactsProvider provider, Set<AspectClass> aspectClasses) {
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 a495377..d66dee7 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
@@ -20,10 +20,10 @@ 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.ActionLookupValue; 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; import com.google.devtools.build.lib.actions.MiddlemanFactory; import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoCollection; @@ -60,7 +60,7 @@ public class CachingAnalysisEnvironment implements AnalysisEnvironment { private final ArtifactFactory artifactFactory; - private final ArtifactOwner owner; + private final ActionLookupValue.ActionLookupKey owner; /** * If this is the system analysis environment, then errors and warnings are directly reported * to the global reporter, rather than stored, i.e., we don't track here whether there are any @@ -87,7 +87,7 @@ public CachingAnalysisEnvironment( ArtifactFactory artifactFactory, ActionKeyContext actionKeyContext, - ArtifactOwner owner, + ActionLookupValue.ActionLookupKey owner, boolean isSystemEnv, boolean extendedSanityChecks, boolean allowAnalysisFailures, @@ -240,7 +240,8 @@ * sealed (disable()). For performance reasons we only track the originating stacktrace when * running with --experimental_extended_sanity_checks. */ - private Artifact trackArtifactAndOrigin(Artifact a, @Nullable Throwable e) { + private Artifact.DerivedArtifact trackArtifactAndOrigin( + Artifact.DerivedArtifact a, @Nullable Throwable e) { if ((e != null) && !artifacts.containsKey(a)) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); @@ -252,7 +253,8 @@ } @Override - public Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root) { + public Artifact.DerivedArtifact getDerivedArtifact( + PathFragment rootRelativePath, ArtifactRoot root) { Preconditions.checkState(enabled); return trackArtifactAndOrigin( artifactFactory.getDerivedArtifact(rootRelativePath, root, getOwner()), @@ -269,7 +271,8 @@ } @Override - public Artifact getFilesetArtifact(PathFragment rootRelativePath, ArtifactRoot root) { + public Artifact.DerivedArtifact getFilesetArtifact( + PathFragment rootRelativePath, ArtifactRoot root) { Preconditions.checkState(enabled); return trackArtifactAndOrigin( artifactFactory.getFilesetArtifact(rootRelativePath, root, getOwner()), @@ -351,7 +354,7 @@ } @Override - public ArtifactOwner getOwner() { + public ActionLookupValue.ActionLookupKey getOwner() { return owner; } }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java index 1dd90cf..eedcc19 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java
@@ -28,12 +28,12 @@ public final class ExtraActionArtifactsProvider implements TransitiveInfoProvider { public static final ExtraActionArtifactsProvider EMPTY = new ExtraActionArtifactsProvider( - NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), - NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)); + NestedSetBuilder.emptySet(Order.STABLE_ORDER), + NestedSetBuilder.emptySet(Order.STABLE_ORDER)); public static ExtraActionArtifactsProvider create( - NestedSet<Artifact> extraActionArtifacts, - NestedSet<Artifact> transitiveExtraActionArtifacts) { + NestedSet<Artifact.DerivedArtifact> extraActionArtifacts, + NestedSet<Artifact.DerivedArtifact> transitiveExtraActionArtifacts) { if (extraActionArtifacts.isEmpty() && transitiveExtraActionArtifacts.isEmpty()) { return EMPTY; } @@ -42,8 +42,9 @@ public static ExtraActionArtifactsProvider merge( Iterable<ExtraActionArtifactsProvider> providers) { - NestedSetBuilder<Artifact> artifacts = NestedSetBuilder.stableOrder(); - NestedSetBuilder<Artifact> transitiveExtraActionArtifacts = NestedSetBuilder.stableOrder(); + NestedSetBuilder<Artifact.DerivedArtifact> artifacts = NestedSetBuilder.stableOrder(); + NestedSetBuilder<Artifact.DerivedArtifact> transitiveExtraActionArtifacts = + NestedSetBuilder.stableOrder(); for (ExtraActionArtifactsProvider provider : providers) { artifacts.addTransitive(provider.getExtraActionArtifacts()); @@ -54,28 +55,27 @@ } /** The outputs of the extra actions associated with this target. */ - private final NestedSet<Artifact> extraActionArtifacts; - private final NestedSet<Artifact> transitiveExtraActionArtifacts; + private final NestedSet<Artifact.DerivedArtifact> extraActionArtifacts; + + private final NestedSet<Artifact.DerivedArtifact> transitiveExtraActionArtifacts; /** Use {@link #create} instead. */ @AutoCodec.Instantiator @VisibleForSerialization ExtraActionArtifactsProvider( - NestedSet<Artifact> extraActionArtifacts, - NestedSet<Artifact> transitiveExtraActionArtifacts) { + NestedSet<Artifact.DerivedArtifact> extraActionArtifacts, + NestedSet<Artifact.DerivedArtifact> transitiveExtraActionArtifacts) { this.extraActionArtifacts = extraActionArtifacts; this.transitiveExtraActionArtifacts = transitiveExtraActionArtifacts; } - /** - * The outputs of the extra actions associated with this target. - */ - public NestedSet<Artifact> getExtraActionArtifacts() { + /** The outputs of the extra actions associated with this target. */ + public NestedSet<Artifact.DerivedArtifact> getExtraActionArtifacts() { return extraActionArtifacts; } /** The outputs of the extra actions in the whole transitive closure. */ - public NestedSet<Artifact> getTransitiveExtraActionArtifacts() { + public NestedSet<Artifact.DerivedArtifact> getTransitiveExtraActionArtifacts() { return transitiveExtraActionArtifacts; } }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java index e43ba87..a736555 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java
@@ -48,8 +48,8 @@ return ExtraActionArtifactsProvider.EMPTY; } - ImmutableList<Artifact> extraActionArtifacts = ImmutableList.of(); - NestedSetBuilder<Artifact> builder = NestedSetBuilder.stableOrder(); + ImmutableList<Artifact.DerivedArtifact> extraActionArtifacts = ImmutableList.of(); + NestedSetBuilder<Artifact.DerivedArtifact> builder = NestedSetBuilder.stableOrder(); List<Label> actionListenerLabels = configuration.getActionListeners(); if (!actionListenerLabels.isEmpty() @@ -79,7 +79,9 @@ } return ExtraActionArtifactsProvider.create( - NestedSetBuilder.<Artifact>stableOrder().addAll(extraActionArtifacts).build(), + NestedSetBuilder.<Artifact.DerivedArtifact>stableOrder() + .addAll(extraActionArtifacts) + .build(), builder.build()); }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java index f6f41de..922bd72 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java
@@ -33,7 +33,7 @@ final class ExtraActionsVisitor extends ActionGraphVisitor { private final RuleContext ruleContext; private final Multimap<String, ExtraActionSpec> mnemonicToExtraActionMap; - private final List<Artifact> extraArtifacts; + private final List<Artifact.DerivedArtifact> extraArtifacts; /** Creates a new visitor for the extra actions associated with the given target. */ public ExtraActionsVisitor(RuleContext ruleContext, @@ -63,8 +63,8 @@ } /** Retrieves the collected artifacts since this method was last called and clears the list. */ - public ImmutableList<Artifact> getAndResetExtraArtifacts() { - ImmutableList<Artifact> collected = ImmutableList.copyOf(extraArtifacts); + ImmutableList<Artifact.DerivedArtifact> getAndResetExtraArtifacts() { + ImmutableList<Artifact.DerivedArtifact> collected = ImmutableList.copyOf(extraArtifacts); extraArtifacts.clear(); return collected; }
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 76e3b42..7779744 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
@@ -40,7 +40,6 @@ 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.AliasProvider.TargetMode; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.PrerequisiteValidator; @@ -499,7 +498,7 @@ } @Override - public ArtifactOwner getOwner() { + public ActionLookupValue.ActionLookupKey getOwner() { return getAnalysisEnvironment().getOwner(); } @@ -657,22 +656,6 @@ * Creates an artifact in a directory that is unique to the package that contains the rule, thus * guaranteeing that it never clashes with artifacts created by rules in other packages. */ - public Artifact getPackageRelativeArtifact(String relative, ArtifactRoot root) { - return getPackageRelativeArtifact(PathFragment.create(relative), root); - } - - /** - * Creates an artifact in a directory that is unique to the package that contains the rule, thus - * guaranteeing that it never clashes with artifacts created by rules in other packages. - */ - public Artifact getPackageRelativeTreeArtifact(String relative, ArtifactRoot root) { - return getPackageRelativeTreeArtifact(PathFragment.create(relative), root); - } - - /** - * Creates an artifact in a directory that is unique to the package that contains the rule, thus - * guaranteeing that it never clashes with artifacts created by rules in other packages. - */ public Artifact getBinArtifact(String relative) { return getBinArtifact(PathFragment.create(relative)); } @@ -701,10 +684,19 @@ } @Override - public Artifact getPackageRelativeArtifact(PathFragment relative, ArtifactRoot root) { + public Artifact.DerivedArtifact getPackageRelativeArtifact( + PathFragment relative, ArtifactRoot root) { return getDerivedArtifact(getPackageDirectory().getRelative(relative), root); } + /** + * Creates an artifact in a directory that is unique to the package that contains the rule, thus + * guaranteeing that it never clashes with artifacts created by rules in other packages. + */ + public Artifact getPackageRelativeArtifact(String relative, ArtifactRoot root) { + return getPackageRelativeArtifact(PathFragment.create(relative), root); + } + @Override public PathFragment getPackageDirectory() { return getLabel().getPackageIdentifier().getSourceRoot(); @@ -718,7 +710,8 @@ * method. */ @Override - public Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root) { + public Artifact.DerivedArtifact getDerivedArtifact( + PathFragment rootRelativePath, ArtifactRoot root) { Preconditions.checkState(rootRelativePath.startsWith(getPackageDirectory()), "Output artifact '%s' not under package directory '%s' for target '%s'", rootRelativePath, getPackageDirectory(), getLabel()); @@ -1421,7 +1414,8 @@ } @Override - public final Artifact getRelatedArtifact(PathFragment pathFragment, String extension) { + public final Artifact.DerivedArtifact getRelatedArtifact( + PathFragment pathFragment, String extension) { PathFragment file = FileSystemUtils.replaceExtension(pathFragment, extension); return getDerivedArtifact(file, getConfiguration().getBinDirectory(rule.getRepository())); }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java index ff15303..4f1d5c5 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
@@ -156,7 +156,7 @@ } static void addArtifactsWithOwnerLabel( - Iterable<Artifact> artifacts, + Iterable<? extends Artifact> artifacts, @Nullable RegexFilter filter, Label ownerLabel, ArtifactsToOwnerLabels.Builder artifactsToOwnerLabelsBuilder) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java index 92d25f7..c9e600b 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
@@ -63,7 +63,7 @@ * thus ensuring that it doesn't clash with other artifacts generated by other rules using this * method. */ - Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root); + Artifact.DerivedArtifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root); /** * Creates a TreeArtifact under a given root with the given root-relative path. @@ -94,7 +94,7 @@ * Returns an artifact with a given file extension. All other path components are the same as in * {@code pathFragment}. */ - Artifact getRelatedArtifact(PathFragment pathFragment, String extension); + Artifact.DerivedArtifact getRelatedArtifact(PathFragment pathFragment, String extension); /** * Creates an artifact in a directory that is unique to the rule, thus guaranteeing that it never
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java index 4c33832..fcc15da 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -191,7 +191,7 @@ ActionOwner owner, Iterable<Artifact> tools, Iterable<Artifact> inputs, - Iterable<Artifact> outputs, + Iterable<? extends Artifact> outputs, Artifact primaryOutput, ResourceSet resourceSet, CommandLines commandLines,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java index 7f7396b..4762ba7 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java
@@ -67,7 +67,7 @@ ExtraAction( ImmutableSet<Artifact> extraActionInputs, RunfilesSupplier runfilesSupplier, - Collection<Artifact> outputs, + Collection<Artifact.DerivedArtifact> outputs, Action shadowedAction, boolean createDummyOutput, CommandLine argv,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionSpec.java b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionSpec.java index 9e4cdd2..5c17eff 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionSpec.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionSpec.java
@@ -78,12 +78,11 @@ return label; } - /** - * Adds an extra_action to the action graph based on the action to shadow. - */ - public Collection<Artifact> addExtraAction(RuleContext owningRule, Action actionToShadow) { - Collection<Artifact> extraActionOutputs = new LinkedHashSet<>(); - Collection<Artifact> protoOutputs = new ArrayList<>(); + /** Adds an extra_action to the action graph based on the action to shadow. */ + public Collection<Artifact.DerivedArtifact> addExtraAction( + RuleContext owningRule, Action actionToShadow) { + Collection<Artifact.DerivedArtifact> extraActionOutputs = new LinkedHashSet<>(); + Collection<Artifact.DerivedArtifact> protoOutputs = new ArrayList<>(); NestedSetBuilder<Artifact> extraActionInputs = NestedSetBuilder.stableOrder(); Label ownerLabel = owningRule.getLabel(); @@ -111,8 +110,8 @@ // We generate a file containing a protocol buffer describing the action that is being shadowed. // It is up to each action being shadowed to decide what contents to store here. - Artifact extraActionInfoFile = getExtraActionOutputArtifact( - owningRule, actionToShadow, "$(ACTION_ID).xa"); + Artifact.DerivedArtifact extraActionInfoFile = + getExtraActionOutputArtifact(owningRule, actionToShadow, "$(ACTION_ID).xa"); owningRule.registerAction(new ExtraActionInfoFileWriteAction( actionToShadow.getOwner(), extraActionInfoFile, actionToShadow)); extraActionInputs.add(extraActionInfoFile); @@ -152,7 +151,10 @@ commandMessage, label.getName())); - return ImmutableSet.<Artifact>builder().addAll(extraActionOutputs).addAll(protoOutputs).build(); + return ImmutableSet.<Artifact.DerivedArtifact>builder() + .addAll(extraActionOutputs) + .addAll(protoOutputs) + .build(); } /** @@ -177,22 +179,19 @@ } /** - * Creates an output artifact for the extra_action based on the output_template. - * The path will be in the following form: - * <output dir>/<target-configuration-specific-path>/extra_actions/<extra_action_label>/ + - * <configured_target_label>/<expanded_template> + * Creates an output artifact for the extra_action based on the output_template. The path will be + * in the following form: <output + * dir>/<target-configuration-specific-path>/extra_actions/<extra_action_label>/ + + * <configured_target_label>/<expanded_template> * - * The template can use the following variables: - * $(ACTION_ID): a unique id for the extra_action. + * <p>The template can use the following variables: $(ACTION_ID): a unique id for the + * extra_action. * - * Sample: - * extra_action: foo/bar:extra - * template: $(ACTION_ID).analysis - * target: foo/bar:main - * expands to: output/configuration/extra_actions/\ - * foo/bar/extra/foo/bar/4683026f7ac1dd1a873ccc8c3d764132.analysis + * <p>Sample: extra_action: foo/bar:extra template: $(ACTION_ID).analysis target: foo/bar:main + * expands to: output/configuration/extra_actions/\ + * foo/bar/extra/foo/bar/4683026f7ac1dd1a873ccc8c3d764132.analysis */ - private Artifact getExtraActionOutputArtifact( + private Artifact.DerivedArtifact getExtraActionOutputArtifact( RuleContext ruleContext, Action action, String template) { String actionId = getActionId(ruleContext.getActionKeyContext(), ruleContext.getActionOwner(), action); @@ -203,7 +202,7 @@ return getRootRelativePath(template, ruleContext); } - private Artifact getRootRelativePath(String template, RuleContext ruleContext) { + private Artifact.DerivedArtifact getRootRelativePath(String template, RuleContext ruleContext) { PathFragment extraActionPackageFragment = label.getPackageIdentifier().getSourceRoot(); PathFragment extraActionPrefix = extraActionPackageFragment.getRelative(label.getName()); PathFragment rootRelativePath = PathFragment.create("extra_actions")
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java index 35d4bbe..df30e48 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
@@ -22,9 +22,9 @@ import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; +import com.google.devtools.build.lib.actions.ActionLookupValue; import com.google.devtools.build.lib.actions.ActionRegistry; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.ArtifactRoot; import com.google.devtools.build.lib.actions.CommandLine; import com.google.devtools.build.lib.actions.CommandLineExpansionException; @@ -117,7 +117,7 @@ } @Override - public ArtifactOwner getOwner() { + public ActionLookupValue.ActionLookupKey getOwner() { return skylarkActionFactory .getActionConstructionContext() .getAnalysisEnvironment()
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java index 6e5a58e..c702722 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
@@ -321,7 +321,8 @@ Iterable<Artifact> inputs = inputsBuilder.build(); int shardRuns = (shards > 0 ? shards : 1); - List<Artifact> results = Lists.newArrayListWithCapacity(runsPerTest * shardRuns); + List<Artifact.DerivedArtifact> results = + Lists.newArrayListWithCapacity(runsPerTest * shardRuns); ImmutableList.Builder<Artifact> coverageArtifacts = ImmutableList.builder(); for (int run = 0; run < runsPerTest; run++) { @@ -337,14 +338,14 @@ testRunDir += PathFragment.SEPARATOR_CHAR; shardRunDir = shardRunDir.isEmpty() ? testRunDir : shardRunDir + "_" + testRunDir; } - Artifact testLog = + Artifact.DerivedArtifact testLog = ruleContext.getPackageRelativeArtifact( targetName.getRelative(shardRunDir + "test.log"), root); - Artifact cacheStatus = + Artifact.DerivedArtifact cacheStatus = ruleContext.getPackageRelativeArtifact( targetName.getRelative(shardRunDir + "test.cache_status"), root); - Artifact coverageArtifact = null; + Artifact.DerivedArtifact coverageArtifact = null; if (collectCodeCoverage) { coverageArtifact = ruleContext.getPackageRelativeArtifact( targetName.getRelative(shardRunDir + "coverage.dat"), root);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java index f356deb..cc64055 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
@@ -58,7 +58,8 @@ * @param target the configured target. Should belong to a test rule. * @return the test status artifacts */ - public static ImmutableList<Artifact> getTestStatusArtifacts(TransitiveInfoCollection target) { + public static ImmutableList<Artifact.DerivedArtifact> getTestStatusArtifacts( + TransitiveInfoCollection target) { return target.getProvider(TestProvider.class).getTestParams().getTestStatusArtifacts(); } @@ -70,16 +71,20 @@ private final int shards; private final TestTimeout timeout; private final String testRuleClass; - private final ImmutableList<Artifact> testStatusArtifacts; + private final ImmutableList<Artifact.DerivedArtifact> testStatusArtifacts; private final ImmutableList<Artifact> coverageArtifacts; private final FilesToRunProvider coverageReportGenerator; /** - * Don't call this directly. Instead use - * {@link com.google.devtools.build.lib.analysis.test.TestActionBuilder}. + * Don't call this directly. Instead use {@link + * com.google.devtools.build.lib.analysis.test.TestActionBuilder}. */ - TestParams(int runs, int shards, TestTimeout timeout, String testRuleClass, - ImmutableList<Artifact> testStatusArtifacts, + TestParams( + int runs, + int shards, + TestTimeout timeout, + String testRuleClass, + ImmutableList<Artifact.DerivedArtifact> testStatusArtifacts, ImmutableList<Artifact> coverageArtifacts, FilesToRunProvider coverageReportGenerator) { this.runs = runs; @@ -123,7 +128,7 @@ * Returns a list of test status artifacts that represent serialized test status protobuffers * produced by testing this target. */ - public ImmutableList<Artifact> getTestStatusArtifacts() { + public ImmutableList<Artifact.DerivedArtifact> getTestStatusArtifacts() { return testStatusArtifacts; }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/AbstractRemoteActionCache.java b/src/main/java/com/google/devtools/build/lib/remote/AbstractRemoteActionCache.java index 0adb4e4..1e9b650 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/AbstractRemoteActionCache.java +++ b/src/main/java/com/google/devtools/build/lib/remote/AbstractRemoteActionCache.java
@@ -463,7 +463,8 @@ /* locationIndex= */ 1); childMetadata.put(p, r); } - metadataInjector.injectRemoteDirectory(output, childMetadata.build()); + metadataInjector.injectRemoteDirectory( + (Artifact.SpecialArtifact) output, childMetadata.build()); } else { FileMetadata outputMetadata = metadata.file(execRoot.getRelative(output.getExecPathString())); if (outputMetadata == null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java index 5978cc3..6f8da8a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java
@@ -84,8 +84,7 @@ for (TransitiveInfoCollection target : assetTargets) { for (Artifact file : target.getProvider(FileProvider.class).getFilesToBuild()) { - PathFragment packageFragment = - file.getArtifactOwner().getLabel().getPackageIdentifier().getSourceRoot(); + PathFragment packageFragment = file.getOwnerLabel().getPackageIdentifier().getSourceRoot(); PathFragment packageRelativePath = file.getRootRelativePath().relativeTo(packageFragment); if (packageRelativePath.startsWith(assetsDir)) { PathFragment relativePath = packageRelativePath.relativeTo(assetsDir);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java index 9af441e..7f09d2e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
@@ -225,14 +225,13 @@ "'%s' (generated by '%s') is not in the same directory '%s' (derived from %s)." + " All resources must share a common directory.", file.getRootRelativePath(), - file.getArtifactOwner().getLabel(), + file.getOwnerLabel(), lastResourceDir, lastFile.getRootRelativePath())); throw new RuleErrorException(); } - PathFragment packageFragment = - file.getArtifactOwner().getLabel().getPackageIdentifier().getSourceRoot(); + PathFragment packageFragment = file.getOwnerLabel().getPackageIdentifier().getSourceRoot(); PathFragment packageRelativePath = file.getRootRelativePath().relativeTo(packageFragment); try { PathFragment path = file.getExecPath(); @@ -246,7 +245,7 @@ String.format( "'%s' (generated by '%s') is not under the directory '%s' (derived from %s).", file.getRootRelativePath(), - file.getArtifactOwner().getLabel(), + file.getOwnerLabel(), packageRelativePath, file.getRootRelativePath())); throw new RuleErrorException();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java index ab44ccc..ade3695 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
@@ -293,7 +293,7 @@ /** Simple container for a collection of headers and corresponding modules. */ public static class HeadersAndModules { public final Collection<Artifact> headers; - public final Collection<Artifact> modules; + public final Collection<Artifact.DerivedArtifact> modules; HeadersAndModules(int expectedHeaderCount) { headers = CompactHashSet.createWithExpectedSize(expectedHeaderCount); @@ -310,7 +310,7 @@ HeadersAndModules result = new HeadersAndModules(includes.size()); for (int c = 0; c < transitiveHeaderInfoList.size(); c++) { HeaderInfo transitiveHeaderInfo = transitiveHeaderInfoList.get(c); - Artifact module = transitiveHeaderInfo.getModule(usePic); + Artifact.DerivedArtifact module = transitiveHeaderInfo.getModule(usePic); // Not using range-based for loops here as often there is exactly one element in this list // and the amount of garbage created by SingletonImmutableList.iterator() is significant. for (int i = 0; i < transitiveHeaderInfo.modularHeaders.size(); i++) { @@ -726,16 +726,17 @@ * * @param headerModule The .pcm file generated for this library. */ - public Builder setHeaderModule(Artifact headerModule) { + Builder setHeaderModule(Artifact.DerivedArtifact headerModule) { this.headerInfoBuilder.setHeaderModule(headerModule); return this; } /** * Sets the C++ header module in pic mode. + * * @param picHeaderModule The .pic.pcm file generated for this library. */ - public Builder setPicHeaderModule(Artifact picHeaderModule) { + Builder setPicHeaderModule(Artifact.DerivedArtifact picHeaderModule) { this.headerInfoBuilder.setPicHeaderModule(picHeaderModule); return this; } @@ -843,8 +844,9 @@ * The modules built for this context. If null, then no module is being compiled for this * context. */ - private final Artifact headerModule; - private final Artifact picHeaderModule; + private final Artifact.DerivedArtifact headerModule; + + private final Artifact.DerivedArtifact picHeaderModule; /** All header files that are compiled into this module. */ private final ImmutableList<Artifact> modularHeaders; @@ -852,9 +854,9 @@ /** All header files that are contained in this module. */ private final ImmutableList<Artifact> textualHeaders; - public HeaderInfo( - Artifact headerModule, - Artifact picHeaderModule, + HeaderInfo( + Artifact.DerivedArtifact headerModule, + Artifact.DerivedArtifact picHeaderModule, ImmutableList<Artifact> modularHeaders, ImmutableList<Artifact> textualHeaders) { this.headerModule = headerModule; @@ -863,7 +865,7 @@ this.textualHeaders = textualHeaders; } - public Artifact getModule(boolean pic) { + Artifact.DerivedArtifact getModule(boolean pic) { return pic ? picHeaderModule : headerModule; } @@ -871,17 +873,17 @@ * Builder class for {@link HeaderInfo}. */ public static class Builder { - private Artifact headerModule = null; - private Artifact picHeaderModule = null; + private Artifact.DerivedArtifact headerModule = null; + private Artifact.DerivedArtifact picHeaderModule = null; private final Set<Artifact> modularHeaders = new HashSet<>(); private final Set<Artifact> textualHeaders = new HashSet<>(); - public Builder setHeaderModule(Artifact headerModule) { + Builder setHeaderModule(Artifact.DerivedArtifact headerModule) { this.headerModule = headerModule; return this; } - public Builder setPicHeaderModule(Artifact headerModule) { + Builder setPicHeaderModule(Artifact.DerivedArtifact headerModule) { this.picHeaderModule = headerModule; return this; }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java index e65f09b..dda017a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -1121,7 +1121,7 @@ } /** @return the no-PIC header module artifact for the current target. */ - private Artifact getHeaderModule(Artifact moduleMapArtifact) { + private Artifact.DerivedArtifact getHeaderModule(Artifact moduleMapArtifact) { PathFragment objectDir = CppHelper.getObjDirectory(label); PathFragment outputName = objectDir.getRelative(moduleMapArtifact.getRootRelativePath().getBaseName()); @@ -1129,7 +1129,7 @@ } /** @return the pic header module artifact for the current target. */ - private Artifact getPicHeaderModule(Artifact moduleMapArtifact) { + private Artifact.DerivedArtifact getPicHeaderModule(Artifact moduleMapArtifact) { PathFragment objectDir = CppHelper.getObjDirectory(label); PathFragment outputName = objectDir.getRelative(moduleMapArtifact.getRootRelativePath().getBaseName());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java index d317dfd..43679ed 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -167,10 +167,10 @@ private Iterable<Artifact> additionalInputs = null; /** - * Used only during input discovery, when input discovery requires other actions - * to be executed first. + * Used only during input discovery, when input discovery requires other actions to be executed + * first. */ - private Collection<Artifact> usedModules = null; + private Collection<Artifact.DerivedArtifact> usedModules = null; /** * This field is set only for C++ module compiles (compiling .cppmap files into .pcm files). It @@ -549,7 +549,7 @@ return additionalInputs; } - Map<Artifact, NestedSet<Artifact>> transitivelyUsedModules = + Map<Artifact, NestedSet<? extends Artifact>> transitivelyUsedModules = computeTransitivelyUsedModules( actionExecutionContext.getEnvironmentForDiscoveringInputs(), usedModules); if (transitivelyUsedModules == null) { @@ -560,7 +560,7 @@ // used modules. Combining the NestedSets of transitive deps of the top-level modules also // gives us an effective way to compute and store discoveredModules. Set<Artifact> topLevel = new LinkedHashSet<>(usedModules); - for (NestedSet<Artifact> transitive : transitivelyUsedModules.values()) { + for (NestedSet<? extends Artifact> transitive : transitivelyUsedModules.values()) { // It is better to iterate over each nested set here instead of creating a joint one and // iterating over it, as this makes use of NestedSet's memoization (each of them has likely // been iterated over before). Don't use Set.removeAll() here as that iterates over the @@ -1562,13 +1562,14 @@ /** * For the given {@code usedModules}, looks up modules discovered by their generating actions. * - * <p>The returned value only contains a map from elements of {@code usedModules} to the - * {@link #discoveredModules} required to use them. If dependent actions have not been executed - * yet (and thus {@link #discoveredModules} aren't known yet, returns null. + * <p>The returned value only contains a map from elements of {@code usedModules} to the {@link + * #discoveredModules} required to use them. If dependent actions have not been executed yet (and + * thus {@link #discoveredModules} aren't known yet, returns null. */ @Nullable - private static Map<Artifact, NestedSet<Artifact>> computeTransitivelyUsedModules( - SkyFunction.Environment env, Collection<Artifact> usedModules) throws InterruptedException { + private static Map<Artifact, NestedSet<? extends Artifact>> computeTransitivelyUsedModules( + SkyFunction.Environment env, Collection<Artifact.DerivedArtifact> usedModules) + throws InterruptedException { // ActionLookupKey → ActionLookupValue Map<SkyKey, SkyValue> actionLookupValues = env.getValues( @@ -1595,7 +1596,7 @@ if (env.valuesMissing()) { return null; } - ImmutableMap.Builder<Artifact, NestedSet<Artifact>> transitivelyUsedModules = + ImmutableMap.Builder<Artifact, NestedSet<? extends Artifact>> transitivelyUsedModules = ImmutableMap.builderWithExpectedSize(usedModules.size()); int pos = 0; for (Artifact module : usedModules) {
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 353f70a..de30e93 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
@@ -43,8 +43,8 @@ implements ActionTemplate<CppCompileAction> { private final CppCompileActionBuilder cppCompileActionBuilder; private final Artifact sourceTreeArtifact; - private final Artifact outputTreeArtifact; - private final Artifact dotdTreeArtifact; + private final Artifact.SpecialArtifact outputTreeArtifact; + private final Artifact.SpecialArtifact dotdTreeArtifact; private final CcToolchainProvider toolchain; private final Iterable<ArtifactCategory> categories; private final ActionOwner actionOwner; @@ -67,8 +67,8 @@ */ CppCompileActionTemplate( Artifact sourceTreeArtifact, - Artifact outputTreeArtifact, - Artifact dotdTreeArtifact, + Artifact.SpecialArtifact outputTreeArtifact, + Artifact.SpecialArtifact dotdTreeArtifact, CppCompileActionBuilder cppCompileActionBuilder, CcToolchainProvider toolchain, Iterable<ArtifactCategory> categories,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java index 9ec5184..665a915 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java
@@ -127,7 +127,7 @@ args.accept(jar.getExecPathString() + "," + getArtifactOwnerGeneralizedLabel(jar)); private static String getArtifactOwnerGeneralizedLabel(Artifact artifact) { - Label label = checkNotNull(artifact.getArtifactOwner(), artifact).getLabel(); + Label label = checkNotNull(artifact.getOwnerLabel(), artifact); return label.getPackageIdentifier().getRepository().isDefault() || label.getPackageIdentifier().getRepository().isMain() ? label.toString()
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/AggregatingTestListener.java b/src/main/java/com/google/devtools/build/lib/runtime/AggregatingTestListener.java index e2a70d2..a3a4c4f 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/AggregatingTestListener.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/AggregatingTestListener.java
@@ -17,6 +17,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; @@ -90,7 +91,7 @@ // Add all target runs to the map, assuming 1:1 status artifact <-> result. synchronized (summaryLock) { for (ConfiguredTarget target : event.getTestTargets()) { - Iterable<Artifact> statusArtifacts = + ImmutableList<Artifact.DerivedArtifact> statusArtifacts = target.getProvider(TestProvider.class).getTestParams().getTestStatusArtifacts(); Preconditions.checkState( remainingRuns.putAll(asKey(target), statusArtifacts),
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java b/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java index 042d490..fedcaa9 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java
@@ -347,7 +347,8 @@ CriticalPathComponent depComponent = outputArtifactToComponent.get(input); if (depComponent != null) { if (depComponent.isRunning()) { - checkCriticalPathInconsistency(input, depComponent.getAction(), actionStats); + checkCriticalPathInconsistency( + (Artifact.DerivedArtifact) input, depComponent.getAction(), actionStats); return; } actionStats.addDepInfo(depComponent); @@ -355,7 +356,7 @@ } protected void checkCriticalPathInconsistency( - Artifact input, Action action, CriticalPathComponent actionStats) { + Artifact.DerivedArtifact input, Action action, CriticalPathComponent actionStats) { // Rare case that an action depending on a previously-cached shared action sees a different // shared action that is in the midst of being an action cache hit. for (Artifact actionOutput : action.getOutputs()) {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java index f3e92ab..de99423 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
@@ -394,7 +394,8 @@ if (targetToRun.getProvider(TestProvider.class) != null) { // This is a test. Provide it with a reasonable approximation of the actual test environment - ImmutableList<Artifact> statusArtifacts = TestProvider.getTestStatusArtifacts(targetToRun); + ImmutableList<Artifact.DerivedArtifact> statusArtifacts = + TestProvider.getTestStatusArtifacts(targetToRun); if (statusArtifacts.size() != 1) { env.getReporter().handle(Event.error(MULTIPLE_TESTS_MESSAGE)); return BlazeCommandResult.exitCode(ExitCode.COMMAND_LINE_ERROR);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java index 0cd2c56..0dce603 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -678,7 +678,7 @@ } ImmutableList<FilesetOutputSymlink> mapping = - ActionInputMapHelper.getFilesets(env, actionInput); + ActionInputMapHelper.getFilesets(env, (Artifact.SpecialArtifact) actionInput); if (mapping == null) { return null; }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMapHelper.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMapHelper.java index 356ab9c..26ca7e2 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMapHelper.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMapHelper.java
@@ -50,7 +50,8 @@ Artifact artifact = entry.first; inputMap.put(artifact, entry.second, /*depOwner=*/ key); if (artifact.isFileset()) { - ImmutableList<FilesetOutputSymlink> expandedFileset = getFilesets(env, artifact); + ImmutableList<FilesetOutputSymlink> expandedFileset = + getFilesets(env, (Artifact.SpecialArtifact) artifact); if (expandedFileset != null) { expandedFilesets.put(artifact, expandedFileset); } @@ -89,8 +90,8 @@ } } - static ImmutableList<FilesetOutputSymlink> getFilesets(Environment env, - Artifact actionInput) throws InterruptedException { + static ImmutableList<FilesetOutputSymlink> getFilesets( + Environment env, Artifact.SpecialArtifact actionInput) throws InterruptedException { Preconditions.checkState(actionInput.isFileset(), actionInput); ActionLookupKey filesetActionLookupKey = (ActionLookupKey) actionInput.getArtifactOwner();
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 f82d075..e4fd0fb 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
@@ -493,7 +493,7 @@ @Override public void injectRemoteDirectory( - Artifact output, Map<PathFragment, RemoteFileArtifactValue> children) { + SpecialArtifact output, Map<PathFragment, RemoteFileArtifactValue> children) { Preconditions.checkArgument( isKnownOutput(output), output + " is not a declared output of this action"); Preconditions.checkArgument(output.isTreeArtifact(), "output must be a tree artifact");
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionRewindStrategy.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionRewindStrategy.java index 9d9cfeb..f3f5372 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionRewindStrategy.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionRewindStrategy.java
@@ -106,7 +106,7 @@ // failedAction, which the caller of getRewindPlan already knows must be restarted). ImmutableList.Builder<Action> additionalActionsToRestart = ImmutableList.builder(); - HashMultimap<Artifact, ActionInput> lostInputsByDepOwners = + HashMultimap<Artifact.DerivedArtifact, ActionInput> lostInputsByDepOwners = getLostInputsByDepOwners( lostInputs, lostInputsException.getInputOwners(), @@ -114,9 +114,9 @@ ImmutableSet.copyOf(failedActionDeps), failedAction); - for (Map.Entry<Artifact, Collection<ActionInput>> entry : + for (Map.Entry<Artifact.DerivedArtifact, Collection<ActionInput>> entry : lostInputsByDepOwners.asMap().entrySet()) { - Artifact lostArtifact = entry.getKey(); + Artifact.DerivedArtifact lostArtifact = entry.getKey(); checkIfLostArtifactIsSource( lostArtifact, failedAction, lostInputsException, entry.getValue()); @@ -207,14 +207,15 @@ } } - private HashMultimap<Artifact, ActionInput> getLostInputsByDepOwners( + private HashMultimap<Artifact.DerivedArtifact, ActionInput> getLostInputsByDepOwners( ImmutableList<ActionInput> lostInputs, LostInputsExecException.InputOwners inputOwners, ActionInputDepOwners runfilesDepOwners, ImmutableSet<SkyKey> failedActionDeps, Action failedActionForLogging) { - HashMultimap<Artifact, ActionInput> lostInputsByDepOwners = HashMultimap.create(); + HashMultimap<Artifact.DerivedArtifact, ActionInput> lostInputsByDepOwners = + HashMultimap.create(); for (ActionInput lostInput : lostInputs) { boolean foundLostInputDepOwner = false; Artifact owner = inputOwners.getOwner(lostInput); @@ -231,7 +232,8 @@ if (failedActionDeps.contains(runfilesTransitiveOwner)) { // The lost input's owning tree artifact or fileset is included in a runfiles middleman // that the action directly depends on. - lostInputsByDepOwners.put(runfilesTransitiveOwner, lostInput); + lostInputsByDepOwners.put( + (Artifact.DerivedArtifact) runfilesTransitiveOwner, lostInput); foundLostInputDepOwner = true; } } @@ -240,7 +242,7 @@ Collection<Artifact> runfilesOwners = runfilesDepOwners.getDepOwners(lostInput); for (Artifact runfilesOwner : runfilesOwners) { if (failedActionDeps.contains(runfilesOwner)) { - lostInputsByDepOwners.put(runfilesOwner, lostInput); + lostInputsByDepOwners.put((Artifact.DerivedArtifact) runfilesOwner, lostInput); foundLostInputDepOwner = true; } } @@ -248,7 +250,7 @@ if (owner != null && failedActionDeps.contains(owner)) { // The lost input is included in a tree artifact or fileset that the action directly depends // on. - lostInputsByDepOwners.put(owner, lostInput); + lostInputsByDepOwners.put((Artifact.DerivedArtifact) owner, lostInput); foundLostInputDepOwner = true; } @@ -259,7 +261,7 @@ + "lostInput: %s, failedAction: %.10000s", lostInput, failedActionForLogging); - lostInputsByDepOwners.put((Artifact) lostInput, lostInput); + lostInputsByDepOwners.put((Artifact.DerivedArtifact) lostInput, lostInput); foundLostInputDepOwner = true; } @@ -302,7 +304,7 @@ ActionAndLookupData actionAndLookupData = uncheckedActions.removeFirst(); ActionLookupData actionKey = actionAndLookupData.lookupData(); Action action = actionAndLookupData.action(); - HashSet<Artifact> artifactsToCheck = new HashSet<>(); + HashSet<Artifact.DerivedArtifact> artifactsToCheck = new HashSet<>(); if (action instanceof SkyframeAwareAction) { // This action depends on more than just its input artifact values. We need to also restart @@ -319,7 +321,7 @@ addPropagatingActionDepsAndGetNewlyVisitedArtifacts(rewindGraph, actionKey, action)); } - for (Artifact artifact : artifactsToCheck) { + for (Artifact.DerivedArtifact artifact : artifactsToCheck) { Map<ActionLookupData, Action> actionMap = getActionsForLostArtifact(artifact, env); if (actionMap == null) { continue; @@ -338,7 +340,7 @@ * * <p>Returns a list of artifacts which were newly added to the graph. */ - private ImmutableList<Artifact> addSkyframeAwareDepsAndGetNewlyVisitedArtifacts( + private ImmutableList<Artifact.DerivedArtifact> addSkyframeAwareDepsAndGetNewlyVisitedArtifacts( MutableGraph<SkyKey> rewindGraph, ActionLookupData actionKey, SkyframeAwareAction action) { ImmutableGraph<SkyKey> graph = action.getSkyframeDependenciesForRewinding(actionKey); @@ -347,12 +349,12 @@ } assertSkyframeAwareRewindingGraph(graph, actionKey); - ImmutableList.Builder<Artifact> newlyVisitedArtifacts = ImmutableList.builder(); + ImmutableList.Builder<Artifact.DerivedArtifact> newlyVisitedArtifacts = ImmutableList.builder(); Set<EndpointPair<SkyKey>> edges = graph.edges(); for (EndpointPair<SkyKey> edge : edges) { SkyKey target = edge.target(); if (target instanceof Artifact && rewindGraph.addNode(target)) { - newlyVisitedArtifacts.add(((Artifact) target)); + newlyVisitedArtifacts.add(((Artifact.DerivedArtifact) target)); } rewindGraph.putEdge(edge.source(), edge.target()); } @@ -365,10 +367,11 @@ * * <p>Returns a list of artifacts which were newly added to the graph. */ - private ImmutableList<Artifact> addPropagatingActionDepsAndGetNewlyVisitedArtifacts( - MutableGraph<SkyKey> rewindGraph, ActionLookupData actionKey, Action action) { + private ImmutableList<Artifact.DerivedArtifact> + addPropagatingActionDepsAndGetNewlyVisitedArtifacts( + MutableGraph<SkyKey> rewindGraph, ActionLookupData actionKey, Action action) { - ImmutableList.Builder<Artifact> newlyVisitedArtifacts = ImmutableList.builder(); + ImmutableList.Builder<Artifact.DerivedArtifact> newlyVisitedArtifacts = ImmutableList.builder(); for (Artifact input : action.getInputs()) { if (input.isSourceArtifact()) { continue; @@ -380,7 +383,7 @@ // // Rewinding is expected to be rare, so refining this may not be necessary. if (rewindGraph.addNode(input)) { - newlyVisitedArtifacts.add(input); + newlyVisitedArtifacts.add((Artifact.DerivedArtifact) input); } rewindGraph.putEdge(actionKey, input); } @@ -432,7 +435,7 @@ */ @Nullable private Map<ActionLookupData, Action> getActionsForLostArtifact( - Artifact lostInput, Environment env) throws InterruptedException { + Artifact.DerivedArtifact lostInput, Environment env) throws InterruptedException { Set<ActionLookupData> actionExecutionDeps = getActionExecutionDeps(lostInput, env); if (actionExecutionDeps == null) { return null; @@ -451,8 +454,8 @@ * or {@code null} if any of those dependencies are not done. */ @Nullable - private Set<ActionLookupData> getActionExecutionDeps(Artifact lostInput, Environment env) - throws InterruptedException { + private Set<ActionLookupData> getActionExecutionDeps( + Artifact.DerivedArtifact lostInput, Environment env) throws InterruptedException { ArtifactFunction.ArtifactDependencies artifactDependencies = ArtifactFunction.ArtifactDependencies.discoverDependencies(lostInput, env); if (artifactDependencies == null) { @@ -519,6 +522,13 @@ graph, actionKey, target); + Preconditions.checkState( + !(target instanceof Artifact) || target instanceof Artifact.DerivedArtifact, + "A non-source artifact must be derived. graph: %s, rootActionNode: %s, sourceArtifact:" + + " %s", + graph, + actionKey, + target); } }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java index 71de21a..bfec907 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
@@ -83,7 +83,7 @@ } ArtifactDependencies artifactDependencies = - ArtifactDependencies.discoverDependencies(artifact, env); + ArtifactDependencies.discoverDependencies((Artifact.DerivedArtifact) artifact, env); if (artifactDependencies == null) { return null; } @@ -446,16 +446,13 @@ } /** - * Constructs an {@link ArtifactDependencies} for the provided {@code derivedArtifact}, which - * must not be a source artifact. Returns {@code null} if any dependencies are not yet ready. + * Constructs an {@link ArtifactDependencies} for the provided {@code derivedArtifact}. Returns + * {@code null} if any dependencies are not yet ready. */ @Nullable static ArtifactDependencies discoverDependencies( - Artifact derivedArtifact, SkyFunction.Environment env) throws InterruptedException { - Preconditions.checkArgument( - !derivedArtifact.isSourceArtifact(), - "derivedArtifact is not derived: %s", - derivedArtifact); + Artifact.DerivedArtifact derivedArtifact, SkyFunction.Environment env) + throws InterruptedException { ActionLookupKey actionLookupKey = ArtifactFunction.getActionLookupKey(derivedArtifact); ActionLookupValue actionLookupValue =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java index 10a63fb..44a9325 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
@@ -387,7 +387,8 @@ artifactValue, env); if (input.isFileset()) { - expandedFilesets.put(input, ActionInputMapHelper.getFilesets(env, input)); + expandedFilesets.put( + input, ActionInputMapHelper.getFilesets(env, (Artifact.SpecialArtifact) input)); } } } catch (MissingInputFileException e) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java index f2d6021..bc740eb 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -32,7 +32,6 @@ import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.ActionLookupValue; import com.google.devtools.build.lib.actions.ArtifactFactory; -import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.ArtifactPrefixConflictException; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.actions.PackageRoots; @@ -727,7 +726,7 @@ /** Returns null if any build-info values are not ready. */ @Nullable CachingAnalysisEnvironment createAnalysisEnvironment( - ArtifactOwner owner, + ActionLookupValue.ActionLookupKey owner, boolean isSystemEnv, ExtendedEventHandler eventHandler, Environment env,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java index 503a124..112fd7e 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
@@ -77,7 +77,7 @@ } } } else { - Multimap<ActionLookupValue.ActionLookupKey, Artifact> keyToArtifactMap = + Multimap<ActionLookupValue.ActionLookupKey, Artifact.DerivedArtifact> keyToArtifactMap = Multimaps.index( TestProvider.getTestStatusArtifacts(ct), ArtifactFunction::getActionLookupKey); Map<SkyKey, SkyValue> actionLookupValues = env.getValues(keyToArtifactMap.keySet());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java index d54379a4..55876e3 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java
@@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.skyframe; +import com.google.devtools.build.lib.actions.Actions; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.BasicActionLookupValue; import com.google.devtools.build.lib.analysis.WorkspaceStatusAction; @@ -37,7 +38,8 @@ Artifact stableArtifact, Artifact volatileArtifact, WorkspaceStatusAction workspaceStatusAction) { - super(workspaceStatusAction); + super( + Actions.GeneratingActions.fromSingleAction(workspaceStatusAction), /*nonceVersion=*/ null); this.stableArtifact = stableArtifact; this.volatileArtifact = volatileArtifact; }