aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar vladmos <vladmos@google.com>2017-07-07 13:01:00 -0400
committerGravatar John Cater <jcater@google.com>2017-07-07 13:38:06 -0400
commit632d96193d51194e6f7bb0d2d9058faf8f2831db (patch)
tree66e89999ad5f931ef30eaf2b24f2b1c0757ac2b7 /src/main/java/com/google
parent4b2be4c368c211860f89cb7e8472558576fdc04f (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/InputFileConfiguredTarget.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/Alias.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/Bind.java9
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()))));
-
}
}