aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/FileProvider.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java58
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RunfilesProvider.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/VisibilityProviderImpl.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProviderImpl.java10
7 files changed, 84 insertions, 31 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/FileProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/FileProvider.java
index 9d6e4e173c..d1e28db822 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/FileProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/FileProvider.java
@@ -19,6 +19,8 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -34,7 +36,10 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
doc = "An interface for rules that provide files.",
category = SkylarkModuleCategory.PROVIDER
)
+@AutoCodec
public final class FileProvider implements TransitiveInfoProvider {
+ public static final ObjectCodec<FileProvider> CODEC = new FileProvider_AutoCodec();
+
public static final FileProvider EMPTY =
new FileProvider(NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER));
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
index d27ea32781..3e4011dbfb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
@@ -31,6 +31,10 @@ import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.EventKind;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.BuildType;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -67,7 +71,10 @@ import javax.annotation.Nullable;
category = SkylarkModuleCategory.NONE,
doc = "An interface for a set of runfiles."
)
+@AutoCodec
public final class Runfiles {
+ public static ObjectCodec<Runfiles> CODEC = new Runfiles_AutoCodec();
+
private static final Function<SymlinkEntry, Artifact> TO_ARTIFACT =
new Function<SymlinkEntry, Artifact>() {
@Override
@@ -76,13 +83,21 @@ public final class Runfiles {
}
};
+ @AutoCodec(strategy = Strategy.SINGLETON)
+ @VisibleForSerialization
+ static class DummyEmptyFilesSupplier implements EmptyFilesSupplier {
+ public static final ObjectCodec<DummyEmptyFilesSupplier> CODEC =
+ new Runfiles_DummyEmptyFilesSupplier_AutoCodec();
+ public static final DummyEmptyFilesSupplier INSTANCE = new DummyEmptyFilesSupplier();
+
+ @Override
+ public Iterable<PathFragment> getExtraPaths(Set<PathFragment> manifestPaths) {
+ return ImmutableList.of();
+ }
+ }
+
private static final EmptyFilesSupplier DUMMY_EMPTY_FILES_SUPPLIER =
- new EmptyFilesSupplier() {
- @Override
- public Iterable<PathFragment> getExtraPaths(Set<PathFragment> manifestPaths) {
- return ImmutableList.of();
- }
- };
+ DummyEmptyFilesSupplier.INSTANCE;
private static final Function<Artifact, PathFragment> GET_ROOT_RELATIVE_PATH =
new Function<Artifact, PathFragment>() {
@@ -129,11 +144,16 @@ public final class Runfiles {
// equals to the third one if they are not the same instance (which they almost never are)
//
// Goodnight, prince(ss)?, and sweet dreams.
- private static final class SymlinkEntry implements SkylarkValue {
+ @AutoCodec
+ @VisibleForSerialization
+ static final class SymlinkEntry implements SkylarkValue {
+ public static final ObjectCodec<SymlinkEntry> CODEC = new Runfiles_SymlinkEntry_AutoCodec();
+
private final PathFragment path;
private final Artifact artifact;
- private SymlinkEntry(PathFragment path, Artifact artifact) {
+ @VisibleForSerialization
+ SymlinkEntry(PathFragment path, Artifact artifact) {
this.path = Preconditions.checkNotNull(path);
this.artifact = Preconditions.checkNotNull(artifact);
}
@@ -210,7 +230,9 @@ public final class Runfiles {
* Interface used for adding empty files to the runfiles at the last minute. Mainly to support
* python-related rules adding __init__.py files.
*/
+ @AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface EmptyFilesSupplier {
+ ObjectCodec<EmptyFilesSupplier> CODEC = new Runfiles_EmptyFilesSupplier_AutoCodec();
/** Calculate additional empty files to add based on the existing manifest paths. */
Iterable<PathFragment> getExtraPaths(Set<PathFragment> manifestPaths);
}
@@ -239,12 +261,12 @@ public final class Runfiles {
private ConflictPolicy conflictPolicy = ConflictPolicy.IGNORE;
/**
- * Defines a set of artifacts that may or may not be included in the runfiles directory and
- * a manifest file that makes that determination. These are applied on top of any artifacts
+ * Defines a set of artifacts that may or may not be included in the runfiles directory and a
+ * manifest file that makes that determination. These are applied on top of any artifacts
* specified in {@link #unconditionalArtifacts}.
*
- * <p>The incentive behind this is to enable execution-phase "pruning" of runfiles. Anything
- * set in unconditionalArtifacts is hard-set in Blaze's analysis phase, and thus unchangeable in
+ * <p>The incentive behind this is to enable execution-phase "pruning" of runfiles. Anything set
+ * in unconditionalArtifacts is hard-set in Blaze's analysis phase, and thus unchangeable in
* response to execution phase results. This isn't always convenient. For example, say we have an
* action that consumes a set of "possible" runtime dependencies for a source file, parses that
* file for "import a.b.c" statements, and outputs a manifest of the actual dependencies that are
@@ -256,7 +278,11 @@ public final class Runfiles {
* superset of the pruned dependencies, so undeclared inclusions (which can break build
* correctness) aren't possible.
*/
+ @AutoCodec
public static class PruningManifest {
+ public static final ObjectCodec<PruningManifest> CODEC =
+ new Runfiles_PruningManifest_AutoCodec();
+
private final NestedSet<Artifact> candidateRunfiles;
private final Artifact manifestFile;
@@ -294,9 +320,11 @@ public final class Runfiles {
*/
private final boolean legacyExternalRunfiles;
- private Runfiles(
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ Runfiles(
PathFragment suffix,
- NestedSet<Artifact> artifacts,
+ NestedSet<Artifact> unconditionalArtifacts,
NestedSet<SymlinkEntry> symlinks,
NestedSet<SymlinkEntry> rootSymlinks,
NestedSet<PruningManifest> pruningManifests,
@@ -305,7 +333,7 @@ public final class Runfiles {
ConflictPolicy conflictPolicy,
boolean legacyExternalRunfiles) {
this.suffix = suffix;
- this.unconditionalArtifacts = Preconditions.checkNotNull(artifacts);
+ this.unconditionalArtifacts = Preconditions.checkNotNull(unconditionalArtifacts);
this.symlinks = Preconditions.checkNotNull(symlinks);
this.rootSymlinks = Preconditions.checkNotNull(rootSymlinks);
this.extraMiddlemen = Preconditions.checkNotNull(extraMiddlemen);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RunfilesProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/RunfilesProvider.java
index 93f2ed21ea..07abf15ac8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RunfilesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RunfilesProvider.java
@@ -15,20 +15,27 @@ package com.google.devtools.build.lib.analysis;
import com.google.common.base.Function;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
/**
* Runfiles a target contributes to targets that depend on it.
*
- * <p>The set of runfiles contributed can be different if the dependency is through a
- * <code>data</code> attribute (note that this is just a rough approximation of the reality --
- * rule implementations are free to request the data runfiles at any time)
+ * <p>The set of runfiles contributed can be different if the dependency is through a <code>data
+ * </code> attribute (note that this is just a rough approximation of the reality -- rule
+ * implementations are free to request the data runfiles at any time)
*/
@Immutable
+@AutoCodec
public final class RunfilesProvider implements TransitiveInfoProvider {
+ public static final ObjectCodec<RunfilesProvider> CODEC = new RunfilesProvider_AutoCodec();
+
private final Runfiles defaultRunfiles;
private final Runfiles dataRunfiles;
- private RunfilesProvider(Runfiles defaultRunfiles, Runfiles dataRunfiles) {
+ @VisibleForSerialization
+ RunfilesProvider(Runfiles defaultRunfiles, Runfiles dataRunfiles) {
this.defaultRunfiles = defaultRunfiles;
this.dataRunfiles = dataRunfiles;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java
index 44edd90e74..baa069003d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProvider.java
@@ -16,11 +16,14 @@ package com.google.devtools.build.lib.analysis;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
-/**
- * Provider class for configured targets that have a visibility.
- */
+/** Provider class for configured targets that have a visibility. */
+@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface VisibilityProvider extends TransitiveInfoProvider {
+ ObjectCodec<VisibilityProvider> CODEC = new VisibilityProvider_AutoCodec();
/** Returns the visibility specification. */
NestedSet<PackageGroupContents> getVisibility();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProviderImpl.java b/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProviderImpl.java
index 239d4edd32..270c92b4cb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProviderImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/VisibilityProviderImpl.java
@@ -17,12 +17,15 @@ package com.google.devtools.build.lib.analysis;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-/**
- * Visibility provider implementation.
- */
+/** Visibility provider implementation. */
@Immutable
+@AutoCodec
public final class VisibilityProviderImpl implements VisibilityProvider {
+ public static ObjectCodec<VisibilityProviderImpl> CODEC = new VisibilityProviderImpl_AutoCodec();
+
private final NestedSet<PackageGroupContents> visibility;
public VisibilityProviderImpl(NestedSet<PackageGroupContents> visibility) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java
index f4773d79f2..8ef3e5b9a4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProvider.java
@@ -17,12 +17,15 @@ package com.google.devtools.build.lib.analysis.test;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
import com.google.devtools.build.lib.util.Pair;
-/**
- * A provider of instrumented file sources and instrumentation metadata.
- */
+/** A provider of instrumented file sources and instrumentation metadata. */
+@AutoCodec(strategy = Strategy.POLYMORPHIC)
public interface InstrumentedFilesProvider extends TransitiveInfoProvider {
+ ObjectCodec<InstrumentedFilesProvider> CODEC = new InstrumentedFilesProvider_AutoCodec();
/**
* The transitive closure of instrumented source files.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProviderImpl.java b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProviderImpl.java
index d0ca5fdf69..ab8f51ef0b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProviderImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesProviderImpl.java
@@ -17,12 +17,16 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.util.Pair;
-/**
- * An implementation class for the InstrumentedFilesProvider interface.
- */
+/** An implementation class for the InstrumentedFilesProvider interface. */
+@AutoCodec
public final class InstrumentedFilesProviderImpl implements InstrumentedFilesProvider {
+ public static ObjectCodec<InstrumentedFilesProviderImpl> CODEC =
+ new InstrumentedFilesProviderImpl_AutoCodec();
+
public static final InstrumentedFilesProvider EMPTY =
new InstrumentedFilesProviderImpl(
NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER),