From a09cf42c8f0fa7d7bc57560d5217516d09030e9f Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Thu, 10 Aug 2023 11:50:50 +0100 Subject: [PATCH] cquery: Include toolchains as ruleInputs These were already returned in a text output for a deps query - this adds them also as ruleInputs. --- .../cquery/ProtoOutputFormatterCallback.java | 17 +++- .../query/output/ProtoOutputFormatter.java | 15 ++-- .../StreamedJSONProtoOutputFormatter.java | 3 +- .../output/StreamedProtoOutputFormatter.java | 3 +- .../integration/configured_query_test.sh | 81 +++++++++++++++++++ 5 files changed, 111 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java index 0289a3b6874ca6..f83c094a46c995 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java +++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Maps; import com.google.common.collect.Ordering; import com.google.devtools.build.lib.actions.BuildConfigurationEvent; @@ -27,6 +28,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; +import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.ExtendedEventHandler; @@ -243,7 +245,20 @@ public void processOutput(Iterable partialResult) // we will want to add relevant tests. currentTarget = keyedConfiguredTarget; Target target = accessor.getTarget(keyedConfiguredTarget); - Build.Target.Builder targetBuilder = formatter.toTargetProtoBuffer(target).toBuilder(); + + // Toolchain dependencies appear as implicit dependencies, but don't appear on any attribute, + // which means they won't get detected by ruleInputs discovery which traverses attributes to get inputs. + // But we know here from our ConfiguredTarget that they are dependencies. + // Artificially provide these implicit dependencies as inputs. + ImmutableSortedSet.Builder