diff options
author | vladmos <vladmos@google.com> | 2017-07-07 13:01:00 -0400 |
---|---|---|
committer | John Cater <jcater@google.com> | 2017-07-07 13:38:06 -0400 |
commit | 632d96193d51194e6f7bb0d2d9058faf8f2831db (patch) | |
tree | 66e89999ad5f931ef30eaf2b24f2b1c0757ac2b7 /src/main/java/com/google | |
parent | 4b2be4c368c211860f89cb7e8472558576fdc04f (diff) |
Clean up string representations for configured targets
If --incompatible_descriptive_string_representations is passed, configured
targets are converted to strings using `str`, `repr` and `print` functions
differently (more descriptive, without leaking information that shouldn't
be accessible).
PiperOrigin-RevId: 161212989
Diffstat (limited to 'src/main/java/com/google')
9 files changed, 70 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java index 8b197298fb..0096575da0 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java @@ -26,6 +26,7 @@ import com.google.devtools.build.lib.packages.ClassObjectConstructor; import com.google.devtools.build.lib.packages.PackageSpecification; import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.syntax.ClassObject; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; @@ -210,4 +211,15 @@ public abstract class AbstractConfiguredTarget /** Implement in subclasses to get a skylark provider for a given {@code providerKey}. */ protected abstract Object rawGetSkylarkProvider(String providerKey); + @Override + public boolean isImmutable() { + return false; + } + + // All main target classes must override this method to provide more descriptive strings. + // Exceptions are currently EnvironmentGroupConfiguredTarget and PackageGroupConfiguredTarget. + @Override + public void repr(SkylarkPrinter printer) { + printer.append("<unknown target " + getTarget().getLabel() + ">"); + } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java index cee9b8544a..62082cbf55 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.analysis; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import com.google.devtools.build.lib.syntax.ClassObject; import javax.annotation.Nullable; @@ -29,7 +30,7 @@ import javax.annotation.Nullable; * {@link TransitiveInfoCollection}s. Also, {@link ConfiguredTarget} objects should not be * accessible from the action graph. */ -public interface ConfiguredTarget extends TransitiveInfoCollection, ClassObject { +public interface ConfiguredTarget extends TransitiveInfoCollection, ClassObject, SkylarkValue { /** * All <code>ConfiguredTarget</code>s have a "label" field. diff --git a/src/main/java/com/google/devtools/build/lib/analysis/InputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/InputFileConfiguredTarget.java index 2374981007..a6da763d68 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/InputFileConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/InputFileConfiguredTarget.java @@ -20,6 +20,8 @@ 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.skylarkinterface.SkylarkPrinter; +import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import com.google.devtools.build.lib.util.Preconditions; /** @@ -28,7 +30,7 @@ import com.google.devtools.build.lib.util.Preconditions; * All InputFiles for the same target are equivalent, so configuration does not * play any role here and is always set to <b>null</b>. */ -public final class InputFileConfiguredTarget extends FileConfiguredTarget { +public final class InputFileConfiguredTarget extends FileConfiguredTarget implements SkylarkValue { private final Artifact artifact; private final NestedSet<TargetLicense> licenses; @@ -75,4 +77,9 @@ public final class InputFileConfiguredTarget extends FileConfiguredTarget { public boolean hasOutputLicenses() { return false; } + + @Override + public void repr(SkylarkPrinter printer) { + printer.append("<input file target " + getTarget().getLabel() + ">"); + } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java index f1b0b0debf..2673fab7a6 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java @@ -18,6 +18,7 @@ import com.google.common.collect.Iterables; import com.google.devtools.build.lib.packages.ClassObjectConstructor; import com.google.devtools.build.lib.packages.ClassObjectConstructor.Key; import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -188,4 +189,9 @@ public final class MergedConfiguredTarget extends AbstractConfiguredTarget { } return providers; } + + @Override + public void repr(SkylarkPrinter printer) { + printer.append("<merged target " + getLabel() + ">"); + } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java index e193a79994..b9959e1dcb 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java @@ -19,6 +19,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.packages.OutputFile; import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider; import com.google.devtools.build.lib.rules.test.InstrumentedFilesProviderImpl; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.util.Pair; import com.google.devtools.build.lib.util.Preconditions; @@ -115,4 +116,9 @@ public class OutputFileConfiguredTarget extends FileConfiguredTarget } return defaultValue; } + + @Override + public void repr(SkylarkPrinter printer) { + printer.append("<output file target " + getTarget().getLabel() + ">"); + } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java index 62f0015691..d7af3d42de 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.packages.OutputFile; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.rules.SkylarkApiProvider; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.util.Preconditions; import java.util.function.Consumer; import javax.annotation.Nullable; @@ -135,4 +136,9 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { protected Object rawGetSkylarkProvider(String providerKey) { return providers.getProvider(providerKey); } + + @Override + public void repr(SkylarkPrinter printer) { + printer.append("<target " + getLabel() + ">"); + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/Alias.java b/src/main/java/com/google/devtools/build/lib/rules/Alias.java index 3a4570cd64..e1bc2050b3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/Alias.java +++ b/src/main/java/com/google/devtools/build/lib/rules/Alias.java @@ -39,11 +39,13 @@ public class Alias implements RuleConfiguredTargetFactory { throws InterruptedException, RuleErrorException { ConfiguredTarget actual = (ConfiguredTarget) ruleContext.getPrerequisite("actual", Mode.TARGET); return new AliasConfiguredTarget( - ruleContext.getConfiguration(), + ruleContext, actual, ImmutableMap.of( - AliasProvider.class, AliasProvider.fromAliasRule(ruleContext.getLabel(), actual), - VisibilityProvider.class, new VisibilityProviderImpl(ruleContext.getVisibility()))); + AliasProvider.class, + AliasProvider.fromAliasRule(ruleContext.getLabel(), actual), + VisibilityProvider.class, + new VisibilityProviderImpl(ruleContext.getVisibility()))); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java index 6ef753c92c..369976a5d6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FileProvider; +import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; @@ -29,6 +30,7 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.ClassObjectConstructor; import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.syntax.ClassObject; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; @@ -43,16 +45,18 @@ import javax.annotation.Nullable; */ @Immutable public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObject { + private final Label label; private final BuildConfiguration configuration; private final ConfiguredTarget actual; private final ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> overrides; public AliasConfiguredTarget( - BuildConfiguration configuration, + RuleContext ruleContext, @Nullable ConfiguredTarget actual, ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> overrides) { - this.configuration = Preconditions.checkNotNull(configuration); + this.label = ruleContext.getLabel(); + this.configuration = Preconditions.checkNotNull(ruleContext.getConfiguration()); this.actual = actual; this.overrides = Preconditions.checkNotNull(overrides); } @@ -143,4 +147,18 @@ public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObjec public ConfiguredTarget getActual() { return actual; } + + @Override + public boolean isImmutable() { + return false; + } + + @Override + public void repr(SkylarkPrinter printer) { + printer.append("<alias target " + label); + if (actual != null) { + printer.append(" of " + actual.getLabel()); + } + printer.append(">"); + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/Bind.java b/src/main/java/com/google/devtools/build/lib/rules/repository/Bind.java index 9f199a1a68..d6dfe7f248 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/Bind.java +++ b/src/main/java/com/google/devtools/build/lib/rules/repository/Bind.java @@ -44,12 +44,13 @@ public class Bind implements RuleConfiguredTargetFactory { ConfiguredTarget actual = (ConfiguredTarget) ruleContext.getPrerequisite("actual", Mode.TARGET); return new AliasConfiguredTarget( - ruleContext.getConfiguration(), + ruleContext, actual, ImmutableMap.<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>of( - AliasProvider.class, AliasProvider.fromAliasRule(ruleContext.getLabel(), actual), - VisibilityProvider.class, new VisibilityProviderImpl( + AliasProvider.class, + AliasProvider.fromAliasRule(ruleContext.getLabel(), actual), + VisibilityProvider.class, + new VisibilityProviderImpl( NestedSetBuilder.create(Order.STABLE_ORDER, PackageSpecification.everything())))); - } } |