From 14e549cc6596f67ed22c1bac0819f0775e4fb806 Mon Sep 17 00:00:00 2001 From: janakr Date: Fri, 23 Feb 2018 15:09:47 -0800 Subject: @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 --- .../lib/analysis/ConfiguredTargetFactory.java | 2 +- .../AbstractConfiguredTarget.java | 12 ++++-- .../EnvironmentGroupConfiguredTarget.java | 20 ++++++--- .../configuredtargets/FileConfiguredTarget.java | 12 ++++-- .../FilesetOutputConfiguredTarget.java | 12 +++++- .../InputFileConfiguredTarget.java | 47 +++++++++++++--------- .../OutputFileConfiguredTarget.java | 29 +++++++++++-- .../PackageGroupConfiguredTarget.java | 24 +++++++++-- 8 files changed, 117 insertions(+), 41 deletions(-) (limited to 'src/main/java/com/google') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java index e629beba71..fa68906b87 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java @@ -288,7 +288,7 @@ public final class ConfiguredTargetFactory { PackageGroup packageGroup = (PackageGroup) target; return new PackageGroupConfiguredTarget(targetContext, packageGroup); } else if (target instanceof EnvironmentGroup) { - return new EnvironmentGroupConfiguredTarget(targetContext, (EnvironmentGroup) target); + return new EnvironmentGroupConfiguredTarget(targetContext); } else { throw new AssertionError("Unexpected target class: " + target.getClass().getName()); } 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 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 visibility, + Artifact artifact) { + super(label, configuration, visibility); NestedSet 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 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 null. + *

All InputFiles for the same target are equivalent, so configuration does not play any role + * here and is always set to null. */ +@AutoCodec public final class InputFileConfiguredTarget extends FileConfiguredTarget implements SkylarkValue { - private final Artifact artifact; private final NestedSet 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 visibility, + Artifact artifact, + NestedSet 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 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 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 packageSpecifications; + @VisibleForSerialization + @Instantiator + PackageGroupConfiguredTarget( + Label label, + NestedSet visibility, + NestedSet 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 getPackageSpecifications( + TargetContext targetContext, PackageGroup packageGroup) { NestedSetBuilder 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 -- cgit v1.2.3