aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/query2
diff options
context:
space:
mode:
authorGravatar juliexxia <juliexxia@google.com>2018-05-29 13:11:53 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-29 13:13:27 -0700
commit25f6f7b8d7b9fac825796b0153066a47fd2e20fe (patch)
tree6ad4ff89145a7003a7c86078b5f1b45a546d08ce /src/main/java/com/google/devtools/build/lib/query2
parent07a481b7270a20386e69126d4a955f2a51dd6502 (diff)
Fix b/80260450 which saw cquery --output=proto crashing on alias configured targets. Along the way, update ConfiguredTargetAccessor to return the correct Target (the alias, not the actual) when dealing with AliasedConfiguredTargets.
RELNOTES: None. PiperOrigin-RevId: 198445580
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/query2')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallback.java7
2 files changed, 14 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java
index eabd2c6c78..99fa621325 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.query2;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
@@ -22,6 +23,7 @@ import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccess
import com.google.devtools.build.lib.query2.engine.QueryException;
import com.google.devtools.build.lib.query2.engine.QueryExpression;
import com.google.devtools.build.lib.query2.engine.QueryVisibility;
+import com.google.devtools.build.lib.rules.AliasConfiguredTarget;
import com.google.devtools.build.lib.skyframe.PackageValue;
import com.google.devtools.build.skyframe.WalkableGraph;
import java.util.List;
@@ -109,12 +111,14 @@ class ConfiguredTargetAccessor implements TargetAccessor<ConfiguredTarget> {
public Target getTargetFromConfiguredTarget(ConfiguredTarget configuredTarget) {
Target target = null;
try {
+ Label label =
+ configuredTarget instanceof AliasConfiguredTarget
+ ? ((AliasConfiguredTarget) configuredTarget).getOriginalLabel()
+ : configuredTarget.getLabel();
target =
- ((PackageValue)
- walkableGraph.getValue(
- PackageValue.key(configuredTarget.getLabel().getPackageIdentifier())))
+ ((PackageValue) walkableGraph.getValue(PackageValue.key(label.getPackageIdentifier())))
.getPackage()
- .getTarget(configuredTarget.getLabel().getName());
+ .getTarget(label.getName());
} catch (NoSuchTargetException e) {
throw new IllegalStateException("Unable to get target from package in accessor.");
} catch (InterruptedException e2) {
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallback.java
index ecf64be8f8..1741eb9628 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallback.java
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.query2.output.CqueryOptions;
import com.google.devtools.build.lib.query2.output.ProtoOutputFormatter;
import com.google.devtools.build.lib.query2.proto.proto2api.Build;
import com.google.devtools.build.lib.query2.proto.proto2api.Build.QueryResult;
+import com.google.devtools.build.lib.rules.AliasConfiguredTarget;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
import java.io.IOException;
import java.io.OutputStream;
@@ -117,8 +118,12 @@ public class ProtoOutputFormatterCallback extends CqueryThreadsafeCallback {
private class ConfiguredProtoOutputFormatter extends ProtoOutputFormatter {
@Override
protected void addAttributes(Build.Rule.Builder rulePb, Rule rule) throws InterruptedException {
+ ConfiguredTarget ctForConfigConditions = currentTarget;
+ while (ctForConfigConditions instanceof AliasConfiguredTarget) {
+ ctForConfigConditions = ((AliasConfiguredTarget) ctForConfigConditions).getActual();
+ }
ImmutableMap<Label, ConfigMatchingProvider> configConditions =
- ((RuleConfiguredTarget) currentTarget).getConfigConditions();
+ ((RuleConfiguredTarget) ctForConfigConditions).getConfigConditions();
ConfiguredAttributeMapper attributeMapper =
ConfiguredAttributeMapper.of(rule, configConditions);
Map<Attribute, Build.Attribute> serializedAttributes = Maps.newHashMap();