Skip to content

Commit 34d9823

Browse files
katrecopybara-github
authored andcommitted
Change ConfiguredTargetQuery to use KeyedConfiguredTarget as a value.
This will allow us to keep the configured target key between lookup rounds. Fixes #11993. Closes #12547. PiperOrigin-RevId: 344299744
1 parent 8eae6b3 commit 34d9823

23 files changed

+326
-218
lines changed

src/main/java/com/google/devtools/build/lib/buildtool/CqueryBuildTool.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
package com.google.devtools.build.lib.buildtool;
1515

1616
import com.google.common.collect.ImmutableList;
17-
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
1817
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
1918
import com.google.devtools.build.lib.query2.PostAnalysisQueryEnvironment.TopLevelConfigurations;
2019
import com.google.devtools.build.lib.query2.cquery.ConfiguredTargetQueryEnvironment;
2120
import com.google.devtools.build.lib.query2.cquery.CqueryOptions;
21+
import com.google.devtools.build.lib.query2.cquery.KeyedConfiguredTarget;
2222
import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
2323
import com.google.devtools.build.lib.query2.engine.QueryExpression;
2424
import com.google.devtools.build.lib.runtime.CommandEnvironment;
@@ -27,7 +27,7 @@
2727
import java.util.Collection;
2828

2929
/** A version of {@link BuildTool} that handles all cquery work. */
30-
public final class CqueryBuildTool extends PostAnalysisQueryBuildTool<ConfiguredTarget> {
30+
public final class CqueryBuildTool extends PostAnalysisQueryBuildTool<KeyedConfiguredTarget> {
3131

3232
public CqueryBuildTool(CommandEnvironment env, QueryExpression queryExpression) {
3333
super(env, queryExpression);

src/main/java/com/google/devtools/build/lib/query2/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ java_library(
110110
"//src/main/protobuf:analysis_java_proto",
111111
"//src/main/protobuf:build_java_proto",
112112
"//src/main/protobuf:failure_details_java_proto",
113+
"//third_party:auto_value",
113114
"//third_party:flogger",
114115
"//third_party:guava",
115116
"//third_party:jsr305",

src/main/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallback.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package com.google.devtools.build.lib.query2.cquery;
1616

1717
import com.google.common.collect.ImmutableList;
18-
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
1918
import com.google.devtools.build.lib.analysis.configuredtargets.OutputFileConfiguredTarget;
2019
import com.google.devtools.build.lib.events.ExtendedEventHandler;
2120
import com.google.devtools.build.lib.packages.Attribute;
@@ -39,7 +38,7 @@ class BuildOutputFormatterCallback extends CqueryThreadsafeCallback {
3938
CqueryOptions options,
4039
OutputStream out,
4140
SkyframeExecutor skyframeExecutor,
42-
TargetAccessor<ConfiguredTarget> accessor) {
41+
TargetAccessor<KeyedConfiguredTarget> accessor) {
4342
super(eventHandler, options, out, skyframeExecutor, accessor);
4443
}
4544

@@ -69,24 +68,21 @@ public PossibleAttributeValues getPossibleValues(Rule rule, Attribute attr) {
6968
}
7069
}
7170

72-
private ConfiguredAttributeMapper getAttributeMap(ConfiguredTarget ct)
71+
private ConfiguredAttributeMapper getAttributeMap(KeyedConfiguredTarget kct)
7372
throws InterruptedException {
74-
Rule associatedRule = accessor.getTargetFromConfiguredTarget(ct).getAssociatedRule();
73+
Rule associatedRule = accessor.getTarget(kct).getAssociatedRule();
7574
if (associatedRule == null) {
7675
return null;
77-
} else if (ct instanceof OutputFileConfiguredTarget) {
76+
} else if (kct.getConfiguredTarget() instanceof OutputFileConfiguredTarget) {
7877
return ConfiguredAttributeMapper.of(
79-
associatedRule,
80-
accessor
81-
.getGeneratingConfiguredTarget((OutputFileConfiguredTarget) ct)
82-
.getConfigConditions());
78+
associatedRule, accessor.getGeneratingConfiguredTarget(kct).getConfigConditions());
8379
} else {
84-
return ConfiguredAttributeMapper.of(associatedRule, ct.getConfigConditions());
80+
return ConfiguredAttributeMapper.of(associatedRule, kct.getConfigConditions());
8581
}
8682
}
8783

8884
@Override
89-
public void processOutput(Iterable<ConfiguredTarget> partialResult)
85+
public void processOutput(Iterable<KeyedConfiguredTarget> partialResult)
9086
throws InterruptedException, IOException {
9187
BuildOutputFormatter.TargetOutputter outputter =
9288
new TargetOutputter(
@@ -97,8 +93,8 @@ public void processOutput(Iterable<ConfiguredTarget> partialResult)
9793
// and which path is chosen, which people may find even more informative.
9894
(rule, attr) -> false,
9995
System.lineSeparator());
100-
for (ConfiguredTarget configuredTarget : partialResult) {
101-
Target target = accessor.getTargetFromConfiguredTarget(configuredTarget);
96+
for (KeyedConfiguredTarget configuredTarget : partialResult) {
97+
Target target = accessor.getTarget(configuredTarget);
10298
outputter.output(target, new CqueryAttributeReader(getAttributeMap(configuredTarget)));
10399
}
104100
}

src/main/java/com/google/devtools/build/lib/query2/cquery/ConfigFunction.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
package com.google.devtools.build.lib.query2.cquery;
1515

1616
import com.google.common.collect.ImmutableList;
17-
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
1817
import com.google.devtools.build.lib.query2.common.AbstractBlazeQueryEnvironment;
1918
import com.google.devtools.build.lib.query2.engine.Callback;
2019
import com.google.devtools.build.lib.query2.engine.QueryEnvironment;
@@ -60,7 +59,7 @@ public List<ArgumentType> getArgumentTypes() {
6059

6160
/**
6261
* This function is only viable with ConfiguredTargetQueryEnvironment which extends {@link
63-
* AbstractBlazeQueryEnvironment <ConfiguredTarget>}
62+
* AbstractBlazeQueryEnvironment <KeyedConfiguredTarget>}
6463
*/
6564
@Override
6665
@SuppressWarnings("unchecked")
@@ -84,8 +83,8 @@ public <T> QueryTaskFuture<Void> eval(
8483
((ConfiguredTargetQueryEnvironment) env)
8584
.getConfiguredTargetsForConfigFunction(
8685
targetExpression.toString(),
87-
(ThreadSafeMutableSet<ConfiguredTarget>) targets.getIfSuccessful(),
86+
(ThreadSafeMutableSet<KeyedConfiguredTarget>) targets.getIfSuccessful(),
8887
configuration,
89-
(Callback<ConfiguredTarget>) callback));
88+
(Callback<KeyedConfiguredTarget>) callback));
9089
}
9190
}

src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
*
5757
* <p>Incomplete; we'll implement getVisibility when needed.
5858
*/
59-
public class ConfiguredTargetAccessor implements TargetAccessor<ConfiguredTarget> {
59+
public class ConfiguredTargetAccessor implements TargetAccessor<KeyedConfiguredTarget> {
6060

6161
private final WalkableGraph walkableGraph;
6262
private final ConfiguredTargetQueryEnvironment queryEnvironment;
@@ -68,62 +68,58 @@ public ConfiguredTargetAccessor(
6868
}
6969

7070
@Override
71-
public String getTargetKind(ConfiguredTarget target) {
72-
Target actualTarget = getTargetFromConfiguredTarget(target);
71+
public String getTargetKind(KeyedConfiguredTarget target) {
72+
Target actualTarget = getTarget(target);
7373
return actualTarget.getTargetKind();
7474
}
7575

7676
@Override
77-
public String getLabel(ConfiguredTarget target) {
77+
public String getLabel(KeyedConfiguredTarget target) {
7878
return target.getLabel().toString();
7979
}
8080

8181
@Override
82-
public String getPackage(ConfiguredTarget target) {
82+
public String getPackage(KeyedConfiguredTarget target) {
8383
return target.getLabel().getPackageIdentifier().getPackageFragment().toString();
8484
}
8585

8686
@Override
87-
public boolean isRule(ConfiguredTarget target) {
88-
Target actualTarget = getTargetFromConfiguredTarget(target);
87+
public boolean isRule(KeyedConfiguredTarget target) {
88+
Target actualTarget = getTarget(target);
8989
return actualTarget instanceof Rule;
9090
}
9191

9292
@Override
93-
public boolean isTestRule(ConfiguredTarget target) {
94-
Target actualTarget = getTargetFromConfiguredTarget(target);
93+
public boolean isTestRule(KeyedConfiguredTarget target) {
94+
Target actualTarget = getTarget(target);
9595
return TargetUtils.isTestRule(actualTarget);
9696
}
9797

9898
@Override
99-
public boolean isTestSuite(ConfiguredTarget target) {
100-
Target actualTarget = getTargetFromConfiguredTarget(target);
99+
public boolean isTestSuite(KeyedConfiguredTarget target) {
100+
Target actualTarget = getTarget(target);
101101
return TargetUtils.isTestSuiteRule(actualTarget);
102102
}
103103

104104
@Override
105-
public List<ConfiguredTarget> getPrerequisites(
105+
public List<KeyedConfiguredTarget> getPrerequisites(
106106
QueryExpression caller,
107-
ConfiguredTarget configuredTarget,
107+
KeyedConfiguredTarget keyedConfiguredTarget,
108108
String attrName,
109109
String errorMsgPrefix)
110110
throws QueryException, InterruptedException {
111-
ConfiguredTarget actualConfiguredTarget = configuredTarget.getActual();
111+
// Process aliases.
112+
KeyedConfiguredTarget actual = keyedConfiguredTarget.getActual();
112113

113114
Preconditions.checkArgument(
114-
isRule(actualConfiguredTarget),
115-
"%s %s is not a rule configured target",
116-
errorMsgPrefix,
117-
getLabel(actualConfiguredTarget));
115+
isRule(actual), "%s %s is not a rule configured target", errorMsgPrefix, getLabel(actual));
118116

119-
Multimap<Label, ConfiguredTarget> depsByLabel =
117+
Multimap<Label, KeyedConfiguredTarget> depsByLabel =
120118
Multimaps.index(
121-
queryEnvironment.getFwdDeps(ImmutableList.of(actualConfiguredTarget)),
122-
ConfiguredTarget::getLabel);
119+
queryEnvironment.getFwdDeps(ImmutableList.of(actual)), kct -> kct.getLabel());
123120

124-
Rule rule = (Rule) getTargetFromConfiguredTarget(actualConfiguredTarget);
125-
ImmutableMap<Label, ConfigMatchingProvider> configConditions =
126-
actualConfiguredTarget.getConfigConditions();
121+
Rule rule = (Rule) getTarget(actual);
122+
ImmutableMap<Label, ConfigMatchingProvider> configConditions = actual.getConfigConditions();
127123
ConfiguredAttributeMapper attributeMapper =
128124
ConfiguredAttributeMapper.of(rule, configConditions);
129125
if (!attributeMapper.has(attrName)) {
@@ -134,42 +130,42 @@ public List<ConfiguredTarget> getPrerequisites(
134130
errorMsgPrefix, rule.getRuleClass(), attrName),
135131
ConfigurableQuery.Code.ATTRIBUTE_MISSING);
136132
}
137-
ImmutableList.Builder<ConfiguredTarget> toReturn = ImmutableList.builder();
133+
ImmutableList.Builder<KeyedConfiguredTarget> toReturn = ImmutableList.builder();
138134
attributeMapper.visitLabels(attributeMapper.getAttributeDefinition(attrName)).stream()
139135
.forEach(depEdge -> toReturn.addAll(depsByLabel.get(depEdge.getLabel())));
140136
return toReturn.build();
141137
}
142138

143139
@Override
144-
public List<String> getStringListAttr(ConfiguredTarget target, String attrName) {
145-
Target actualTarget = getTargetFromConfiguredTarget(target);
140+
public List<String> getStringListAttr(KeyedConfiguredTarget target, String attrName) {
141+
Target actualTarget = getTarget(target);
146142
return TargetUtils.getStringListAttr(actualTarget, attrName);
147143
}
148144

149145
@Override
150-
public String getStringAttr(ConfiguredTarget target, String attrName) {
151-
Target actualTarget = getTargetFromConfiguredTarget(target);
146+
public String getStringAttr(KeyedConfiguredTarget target, String attrName) {
147+
Target actualTarget = getTarget(target);
152148
return TargetUtils.getStringAttr(actualTarget, attrName);
153149
}
154150

155151
@Override
156-
public Iterable<String> getAttrAsString(ConfiguredTarget target, String attrName) {
157-
Target actualTarget = getTargetFromConfiguredTarget(target);
152+
public Iterable<String> getAttrAsString(KeyedConfiguredTarget target, String attrName) {
153+
Target actualTarget = getTarget(target);
158154
return TargetUtils.getAttrAsString(actualTarget, attrName);
159155
}
160156

161157
@Override
162-
public ImmutableSet<QueryVisibility<ConfiguredTarget>> getVisibility(
163-
QueryExpression caller, ConfiguredTarget from) throws QueryException {
158+
public ImmutableSet<QueryVisibility<KeyedConfiguredTarget>> getVisibility(
159+
QueryExpression caller, KeyedConfiguredTarget from) throws QueryException {
164160
// TODO(bazel-team): implement this if needed.
165161
throw new QueryException(
166162
"visible() is not supported on configured targets",
167163
ConfigurableQuery.Code.VISIBLE_FUNCTION_NOT_SUPPORTED);
168164
}
169165

170-
public Target getTargetFromConfiguredTarget(ConfiguredTarget configuredTarget) {
166+
public Target getTarget(KeyedConfiguredTarget keyedConfiguredTarget) {
171167
// Dereference any aliases that might be present.
172-
Label label = configuredTarget.getOriginalLabel();
168+
Label label = keyedConfiguredTarget.getConfiguredTarget().getOriginalLabel();
173169
try {
174170
return queryEnvironment.getTarget(label);
175171
} catch (InterruptedException e) {
@@ -180,14 +176,18 @@ public Target getTargetFromConfiguredTarget(ConfiguredTarget configuredTarget) {
180176
}
181177

182178
/** Returns the rule that generates the given output file. */
183-
public RuleConfiguredTarget getGeneratingConfiguredTarget(OutputFileConfiguredTarget oct)
179+
RuleConfiguredTarget getGeneratingConfiguredTarget(KeyedConfiguredTarget kct)
184180
throws InterruptedException {
181+
Preconditions.checkArgument(kct.getConfiguredTarget() instanceof OutputFileConfiguredTarget);
185182
return (RuleConfiguredTarget)
186183
((ConfiguredTargetValue)
187184
walkableGraph.getValue(
188185
ConfiguredTargetKey.builder()
189-
.setLabel(oct.getGeneratingRule().getLabel())
190-
.setConfiguration(queryEnvironment.getConfiguration(oct))
186+
.setLabel(
187+
((OutputFileConfiguredTarget) kct.getConfiguredTarget())
188+
.getGeneratingRule()
189+
.getLabel())
190+
.setConfiguration(queryEnvironment.getConfiguration(kct))
191191
.build()))
192192
.getConfiguredTarget();
193193
}

0 commit comments

Comments
 (0)