diff options
author | juliexxia <juliexxia@google.com> | 2018-05-29 13:11:53 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-05-29 13:13:27 -0700 |
commit | 25f6f7b8d7b9fac825796b0153066a47fd2e20fe (patch) | |
tree | 6ad4ff89145a7003a7c86078b5f1b45a546d08ce /src/main/java/com/google/devtools/build/lib/query2 | |
parent | 07a481b7270a20386e69126d4a955f2a51dd6502 (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.java | 12 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallback.java | 7 |
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(); |