aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-02-23 15:09:47 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-23 15:12:13 -0800
commit14e549cc6596f67ed22c1bac0819f0775e4fb806 (patch)
treed80edca62fa006fc122ffcc48962eb6f3cb121d3 /src/main/java/com/google/devtools/build/lib/analysis/configuredtargets
parent6966a2e1fa3eb4eca71a10fe47661128284e8e4f (diff)
@AutoCodec all the *ConfiguredTarget classes except for RuleConfiguredTarget. RuleConfiguredTarget is harder, and will be handled in a follow-up.
Also remove duplicate field from InputFileConfiguredTarget and unused parameter in EnvironmentGroupConfiguredTarget constructor. Largely punt on FilesetOutputConfiguredTarget for now, but will handle soon. PiperOrigin-RevId: 186829768
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/configuredtargets')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/EnvironmentGroupConfiguredTarget.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java47
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/PackageGroupConfiguredTarget.java24
7 files changed, 116 insertions, 40 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
index ebd03bc811..508bacdbbc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
@@ -63,15 +63,19 @@ public abstract class AbstractConfiguredTarget
private static final String DEFAULT_RUNFILES_FIELD = "default_runfiles";
public AbstractConfiguredTarget(Label label, BuildConfiguration configuration) {
+ this(label, configuration, NestedSetBuilder.emptySet(Order.STABLE_ORDER));
+ }
+
+ protected AbstractConfiguredTarget(
+ Label label, BuildConfiguration configuration, NestedSet<PackageGroupContents> visibility) {
this.label = label;
this.configuration = configuration;
- this.visibility = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
+ this.visibility = visibility;
}
+ @Deprecated // For callers to be serializable, they shouldn't have a TargetContext constructor.
public AbstractConfiguredTarget(TargetContext targetContext) {
- this.label = targetContext.getTarget().getLabel();
- this.configuration = targetContext.getConfiguration();
- this.visibility = targetContext.getVisibility();
+ this(targetContext.getLabel(), targetContext.getConfiguration(), targetContext.getVisibility());
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/EnvironmentGroupConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/EnvironmentGroupConfiguredTarget.java
index 2e56cd2a2b..46dc01c968 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/EnvironmentGroupConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/EnvironmentGroupConfiguredTarget.java
@@ -16,18 +16,26 @@ package com.google.devtools.build.lib.analysis.configuredtargets;
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.analysis.TargetContext;
-import com.google.devtools.build.lib.packages.EnvironmentGroup;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
/**
- * Dummy ConfiguredTarget for environment groups. Contains no functionality, since
- * environment groups are not really first-class Targets.
+ * Dummy ConfiguredTarget for environment groups. Contains no functionality, since environment
+ * groups are not really first-class Targets.
*/
+@AutoCodec
public final class EnvironmentGroupConfiguredTarget extends AbstractConfiguredTarget {
- public EnvironmentGroupConfiguredTarget(TargetContext targetContext, EnvironmentGroup envGroup) {
- super(targetContext);
- Preconditions.checkArgument(targetContext.getConfiguration() == null);
+ @AutoCodec.Instantiator
+ @AutoCodec.VisibleForSerialization
+ EnvironmentGroupConfiguredTarget(Label label) {
+ super(label, null);
+ }
+
+ public EnvironmentGroupConfiguredTarget(TargetContext targetContext) {
+ this(targetContext.getLabel());
+ Preconditions.checkState(targetContext.getConfiguration() == null, targetContext);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java
index ec3c156117..134f50dbd3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java
@@ -19,17 +19,19 @@ import com.google.devtools.build.lib.analysis.AnalysisUtils;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.LicensesProvider;
-import com.google.devtools.build.lib.analysis.TargetContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder;
import com.google.devtools.build.lib.analysis.VisibilityProvider;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.fileset.FilesetProvider;
import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider;
+import com.google.devtools.build.lib.cmdline.Label;
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.packages.Info;
+import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.util.FileType;
@@ -43,8 +45,12 @@ public abstract class FileConfiguredTarget extends AbstractConfiguredTarget
private final Artifact artifact;
private final TransitiveInfoProviderMap providers;
- FileConfiguredTarget(TargetContext targetContext, Artifact artifact) {
- super(targetContext);
+ FileConfiguredTarget(
+ Label label,
+ BuildConfiguration configuration,
+ NestedSet<PackageGroupContents> visibility,
+ Artifact artifact) {
+ super(label, configuration, visibility);
NestedSet<Artifact> filesToBuild = NestedSetBuilder.create(Order.STABLE_ORDER, artifact);
this.artifact = artifact;
FileProvider fileProvider = new FileProvider(filesToBuild);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
index 9641c5518f..cb7176a9f1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
@@ -46,7 +46,17 @@ public final class FilesetOutputConfiguredTarget extends OutputFileConfiguredTar
TransitiveInfoCollection generatingRule,
Artifact outputArtifact,
@Nullable ImmutableList<FilesetTraversalParams> traversals) {
- super(targetContext, outputFile, generatingRule, outputArtifact);
+ super(
+ targetContext.getLabel(),
+ targetContext.getConfiguration(),
+ targetContext.getVisibility(),
+ outputArtifact,
+ generatingRule);
+ Preconditions.checkState(
+ outputFile.getLabel().equals(targetContext.getLabel()),
+ "mismatch: %s %s",
+ outputFile,
+ targetContext);
FilesetProvider provider = generatingRule.getProvider(FilesetProvider.class);
Preconditions.checkArgument(provider != null);
filesetInputManifest = provider.getFilesetInputManifest();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java
index 76fcb6683f..42397c0c26 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java
@@ -17,42 +17,53 @@ package com.google.devtools.build.lib.analysis.configuredtargets;
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TargetContext;
+import com.google.devtools.build.lib.cmdline.Label;
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.packages.InputFile;
import com.google.devtools.build.lib.packages.License;
+import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
/**
* A ConfiguredTarget for an InputFile.
*
- * All InputFiles for the same target are equivalent, so configuration does not
- * play any role here and is always set to <b>null</b>.
+ * <p>All InputFiles for the same target are equivalent, so configuration does not play any role
+ * here and is always set to <b>null</b>.
*/
+@AutoCodec
public final class InputFileConfiguredTarget extends FileConfiguredTarget implements SkylarkValue {
- private final Artifact artifact;
private final NestedSet<TargetLicense> licenses;
- public InputFileConfiguredTarget(TargetContext targetContext, InputFile inputFile,
- Artifact artifact) {
- super(targetContext, artifact);
- Preconditions.checkArgument(targetContext.getTarget() == inputFile, getLabel());
- Preconditions.checkArgument(getConfiguration() == null, getLabel());
- this.artifact = artifact;
+ @Instantiator
+ @VisibleForSerialization
+ InputFileConfiguredTarget(
+ Label label,
+ NestedSet<PackageGroupContents> visibility,
+ Artifact artifact,
+ NestedSet<TargetLicense> licenses) {
+ super(label, null, visibility, artifact);
+ this.licenses = licenses;
+ }
- if (inputFile.getLicense() != License.NO_LICENSE) {
- licenses = NestedSetBuilder.create(Order.LINK_ORDER,
- new TargetLicense(getLabel(), inputFile.getLicense()));
- } else {
- licenses = NestedSetBuilder.emptySet(Order.LINK_ORDER);
- }
+ public InputFileConfiguredTarget(
+ TargetContext targetContext, InputFile inputFile, Artifact artifact) {
+ this(inputFile.getLabel(), targetContext.getVisibility(), artifact, makeLicenses(inputFile));
+ Preconditions.checkArgument(getConfiguration() == null, getLabel());
+ Preconditions.checkArgument(targetContext.getTarget() == inputFile, getLabel());
}
- @Override
- public Artifact getArtifact() {
- return artifact;
+ private static NestedSet<TargetLicense> makeLicenses(InputFile inputFile) {
+ License license = inputFile.getLicense();
+ return license == License.NO_LICENSE
+ ? NestedSetBuilder.emptySet(Order.LINK_ORDER)
+ : NestedSetBuilder.create(
+ Order.LINK_ORDER, new TargetLicense(inputFile.getLabel(), license));
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
index 26743b6deb..487bd171b4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
@@ -21,16 +21,21 @@ import com.google.devtools.build.lib.analysis.LicensesProviderImpl;
import com.google.devtools.build.lib.analysis.TargetContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider;
import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProviderImpl;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.packages.OutputFile;
+import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
import com.google.devtools.build.lib.util.Pair;
-/**
- * A ConfiguredTarget for an OutputFile.
- */
+/** A ConfiguredTarget for an OutputFile. */
+@AutoCodec
public class OutputFileConfiguredTarget extends FileConfiguredTarget
implements InstrumentedFilesProvider {
@@ -39,8 +44,24 @@ public class OutputFileConfiguredTarget extends FileConfiguredTarget
public OutputFileConfiguredTarget(
TargetContext targetContext, OutputFile outputFile,
TransitiveInfoCollection generatingRule, Artifact outputArtifact) {
- super(targetContext, outputArtifact);
+ this(
+ targetContext.getLabel(),
+ targetContext.getConfiguration(),
+ targetContext.getVisibility(),
+ outputArtifact,
+ generatingRule);
Preconditions.checkArgument(targetContext.getTarget() == outputFile);
+ }
+
+ @Instantiator
+ @VisibleForSerialization
+ OutputFileConfiguredTarget(
+ Label label,
+ BuildConfiguration configuration,
+ NestedSet<PackageGroupContents> visibility,
+ Artifact artifact,
+ TransitiveInfoCollection generatingRule) {
+ super(label, configuration, visibility, artifact);
this.generatingRule = Preconditions.checkNotNull(generatingRule);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/PackageGroupConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/PackageGroupConfiguredTarget.java
index 6173507859..6be6cf3960 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/PackageGroupConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/PackageGroupConfiguredTarget.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.analysis.configuredtargets;
-import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.PackageSpecificationProvider;
@@ -30,6 +29,8 @@ import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.PackageGroup;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
import com.google.devtools.build.lib.packages.Provider;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
/**
* Dummy ConfiguredTarget for package groups. Contains no functionality, since
@@ -42,10 +43,25 @@ public final class PackageGroupConfiguredTarget extends AbstractConfiguredTarget
private final NestedSet<PackageGroupContents> packageSpecifications;
+ @VisibleForSerialization
+ @Instantiator
+ PackageGroupConfiguredTarget(
+ Label label,
+ NestedSet<PackageGroupContents> visibility,
+ NestedSet<PackageGroupContents> packageSpecifications) {
+ super(label, null, visibility);
+ this.packageSpecifications = packageSpecifications;
+ }
+
public PackageGroupConfiguredTarget(TargetContext targetContext, PackageGroup packageGroup) {
- super(targetContext);
- Preconditions.checkArgument(targetContext.getConfiguration() == null);
+ this(
+ targetContext.getLabel(),
+ targetContext.getVisibility(),
+ getPackageSpecifications(targetContext, packageGroup));
+ }
+ private static NestedSet<PackageGroupContents> getPackageSpecifications(
+ TargetContext targetContext, PackageGroup packageGroup) {
NestedSetBuilder<PackageGroupContents> builder = NestedSetBuilder.stableOrder();
for (Label label : packageGroup.getIncludes()) {
TransitiveInfoCollection include = targetContext.maybeFindDirectPrerequisite(
@@ -67,7 +83,7 @@ public final class PackageGroupConfiguredTarget extends AbstractConfiguredTarget
}
builder.add(packageGroup.getPackageSpecifications());
- packageSpecifications = builder.build();
+ return builder.build();
}
@Override