Skip to content

Commit e87feb8

Browse files
katrecopybara-github
authored andcommitted
Move getConfigConditions into ConfiguredTarget.
Uses a default value for non-alias and non-rule CTs. This alloows removing many instanceof/cast checks when getting config conditions. Part of the work on #11993. Closes #12550. PiperOrigin-RevId: 344126290
1 parent d0efd7b commit e87feb8

File tree

12 files changed

+25
-33
lines changed

12 files changed

+25
-33
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,7 @@ java_library(
695695
name = "configured_target",
696696
srcs = ["ConfiguredTarget.java"],
697697
deps = [
698+
":config/config_matching_provider",
698699
":transitive_info_collection",
699700
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
700701
"//src/main/java/com/google/devtools/build/lib/cmdline",

src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java

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

1717
import com.google.common.collect.ImmutableCollection;
18+
import com.google.common.collect.ImmutableMap;
1819
import com.google.devtools.build.lib.actions.Artifact.SourceArtifact;
20+
import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
1921
import com.google.devtools.build.lib.cmdline.Label;
2022
import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
2123
import javax.annotation.Nullable;
@@ -91,4 +93,12 @@ default ConfiguredTarget getActual() {
9193
default Label getOriginalLabel() {
9294
return getLabel();
9395
}
96+
97+
/**
98+
* The configuration conditions that trigger this configured target's configurable attributes. For
99+
* targets that do not support configurable attributes, this will be an empty map.
100+
*/
101+
default ImmutableMap<Label, ConfigMatchingProvider> getConfigConditions() {
102+
return ImmutableMap.of();
103+
}
94104
}

src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1711,7 +1711,7 @@ public static final class Builder implements RuleErrorConsumer {
17111711
private final PrerequisiteValidator prerequisiteValidator;
17121712
private final RuleErrorConsumer reporter;
17131713
private OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap;
1714-
private ImmutableMap<Label, ConfigMatchingProvider> configConditions;
1714+
private ImmutableMap<Label, ConfigMatchingProvider> configConditions = ImmutableMap.of();
17151715
private NestedSet<PackageGroupContents> visibility;
17161716
private ImmutableMap<String, Attribute> aspectAttributes;
17171717
private ImmutableList<Aspect> aspects;

src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ private TargetCompleteEvent(
183183
AttributeMap attributes =
184184
ConfiguredAttributeMapper.of(
185185
(Rule) targetAndData.getTarget(),
186-
((RuleConfiguredTarget) targetAndData.getConfiguredTarget()).getConfigConditions());
186+
targetAndData.getConfiguredTarget().getConfigConditions());
187187
// Every build rule (implicitly) has a "tags" attribute. However other rule configured targets
188188
// are repository rules (which don't have a tags attribute); morevoer, thanks to the virtual
189189
// "external" package, they are user visible as targets and can create a completed event as

src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,8 @@ public RuleConfiguredTarget(
154154
}
155155
}
156156

157-
/**
158-
* The configuration conditions that trigger this rule's configurable attributes.
159-
*/
157+
/** The configuration conditions that trigger this rule's configurable attributes. */
158+
@Override
160159
public ImmutableMap<Label, ConfigMatchingProvider> getConfigConditions() {
161160
return configConditions;
162161
}

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

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@
1414

1515
package com.google.devtools.build.lib.query2.cquery;
1616

17-
import com.google.common.base.Verify;
1817
import com.google.common.collect.ImmutableList;
1918
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
2019
import com.google.devtools.build.lib.analysis.configuredtargets.OutputFileConfiguredTarget;
21-
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
2220
import com.google.devtools.build.lib.events.ExtendedEventHandler;
2321
import com.google.devtools.build.lib.packages.Attribute;
2422
import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
@@ -30,7 +28,6 @@
3028
import com.google.devtools.build.lib.query2.query.output.BuildOutputFormatter.AttributeReader;
3129
import com.google.devtools.build.lib.query2.query.output.BuildOutputFormatter.TargetOutputter;
3230
import com.google.devtools.build.lib.query2.query.output.PossibleAttributeValues;
33-
import com.google.devtools.build.lib.rules.AliasConfiguredTarget;
3431
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
3532
import java.io.IOException;
3633
import java.io.OutputStream;
@@ -77,19 +74,14 @@ private ConfiguredAttributeMapper getAttributeMap(ConfiguredTarget ct)
7774
Rule associatedRule = accessor.getTargetFromConfiguredTarget(ct).getAssociatedRule();
7875
if (associatedRule == null) {
7976
return null;
80-
} else if (ct instanceof AliasConfiguredTarget) {
81-
return ConfiguredAttributeMapper.of(
82-
associatedRule, ((AliasConfiguredTarget) ct).getConfigConditions());
8377
} else if (ct instanceof OutputFileConfiguredTarget) {
8478
return ConfiguredAttributeMapper.of(
8579
associatedRule,
8680
accessor
8781
.getGeneratingConfiguredTarget((OutputFileConfiguredTarget) ct)
8882
.getConfigConditions());
8983
} else {
90-
Verify.verify(ct instanceof RuleConfiguredTarget);
91-
return ConfiguredAttributeMapper.of(
92-
associatedRule, ((RuleConfiguredTarget) ct).getConfigConditions());
84+
return ConfiguredAttributeMapper.of(associatedRule, ct.getConfigConditions());
9385
}
9486
}
9587

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public List<ConfiguredTarget> getPrerequisites(
124124

125125
Rule rule = (Rule) getTargetFromConfiguredTarget(actualConfiguredTarget);
126126
ImmutableMap<Label, ConfigMatchingProvider> configConditions =
127-
((RuleConfiguredTarget) actualConfiguredTarget).getConfigConditions();
127+
actualConfiguredTarget.getConfigConditions();
128128
ConfiguredAttributeMapper attributeMapper =
129129
ConfiguredAttributeMapper.of(rule, configConditions);
130130
if (!attributeMapper.has(attrName)) {

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

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.google.devtools.build.lib.analysis.AnalysisProtos;
2020
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
2121
import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
22-
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
2322
import com.google.devtools.build.lib.cmdline.Label;
2423
import com.google.devtools.build.lib.events.ExtendedEventHandler;
2524
import com.google.devtools.build.lib.packages.Attribute;
@@ -31,7 +30,6 @@
3130
import com.google.devtools.build.lib.query2.proto.proto2api.Build.QueryResult;
3231
import com.google.devtools.build.lib.query2.query.aspectresolvers.AspectResolver;
3332
import com.google.devtools.build.lib.query2.query.output.ProtoOutputFormatter;
34-
import com.google.devtools.build.lib.rules.AliasConfiguredTarget;
3533
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
3634
import com.google.protobuf.Message;
3735
import com.google.protobuf.TextFormat;
@@ -163,18 +161,12 @@ private class ConfiguredProtoOutputFormatter extends ProtoOutputFormatter {
163161
@Override
164162
protected void addAttributes(
165163
Build.Rule.Builder rulePb, Rule rule, Object extraDataForAttrHash) {
166-
// We know <code>currentTarget</code> will be one of these two types of configured targets
164+
// We know <code>currentTarget</code> will be either an AliasConfiguredTarget or
165+
// RuleConfiguredTarget,
167166
// because this method is only triggered in ProtoOutputFormatter.toTargetProtoBuffer when
168167
// the target in currentTarget is an instanceof Rule.
169-
ImmutableMap<Label, ConfigMatchingProvider> configConditions;
170-
if (currentTarget instanceof AliasConfiguredTarget) {
171-
configConditions = ((AliasConfiguredTarget) currentTarget).getConfigConditions();
172-
} else if (currentTarget instanceof RuleConfiguredTarget) {
173-
configConditions = ((RuleConfiguredTarget) currentTarget).getConfigConditions();
174-
} else {
175-
// Other subclasses of ConfiguredTarget don't have attribute information.
176-
return;
177-
}
168+
ImmutableMap<Label, ConfigMatchingProvider> configConditions =
169+
currentTarget.getConfigConditions();
178170
ConfiguredAttributeMapper attributeMapper =
179171
ConfiguredAttributeMapper.of(rule, configConditions);
180172
for (Attribute attr : sortAttributes(rule.getAttributes())) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public void processOutput(Iterable<ConfiguredTarget> partialResult) throws Inter
115115
}
116116
OrderedSetMultimap<DependencyKind, DependencyKey> deps;
117117
ImmutableMap<Label, ConfigMatchingProvider> configConditions =
118-
((RuleConfiguredTarget) configuredTarget).getConfigConditions();
118+
configuredTarget.getConfigConditions();
119119

120120
// Get a ToolchainContext to use for dependency resolution.
121121
ToolchainCollection<ToolchainContext> toolchainContexts =

src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public boolean isImmutable() {
8484
return true; // immutable and Starlark-hashable
8585
}
8686

87+
@Override
8788
public ImmutableMap<Label, ConfigMatchingProvider> getConfigConditions() {
8889
return configConditions;
8990
}

src/main/java/com/google/devtools/build/lib/runtime/commands/PrintActionCommand.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import com.google.devtools.build.lib.analysis.FileProvider;
2929
import com.google.devtools.build.lib.analysis.OutputGroupInfo;
3030
import com.google.devtools.build.lib.analysis.PrintActionVisitor;
31-
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
3231
import com.google.devtools.build.lib.buildtool.BuildRequest;
3332
import com.google.devtools.build.lib.buildtool.BuildResult;
3433
import com.google.devtools.build.lib.buildtool.BuildTool;
@@ -389,7 +388,6 @@ public boolean shouldOutput(
389388

390389
// C++ header files show up in the dependency on the Target, but not the ConfiguredTarget, so
391390
// we also check the target's header files there.
392-
RuleConfiguredTarget ruleConfiguredTarget = (RuleConfiguredTarget) configuredTarget;
393391
Rule rule;
394392
try {
395393
rule =
@@ -404,7 +402,7 @@ public boolean shouldOutput(
404402
}
405403

406404
List<Label> hdrs =
407-
ConfiguredAttributeMapper.of(rule, ruleConfiguredTarget.getConfigConditions())
405+
ConfiguredAttributeMapper.of(rule, configuredTarget.getConfigConditions())
408406
.get("hdrs", BuildType.LABEL_LIST);
409407
if (hdrs != null) {
410408
for (Label hdrLabel : hdrs) {

src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1660,8 +1660,7 @@ protected void assertSrcsValidity(String ruleType, String targetName, boolean ex
16601660
protected static ConfiguredAttributeMapper getMapperFromConfiguredTargetAndTarget(
16611661
ConfiguredTargetAndData ctad) {
16621662
return ConfiguredAttributeMapper.of(
1663-
(Rule) ctad.getTarget(),
1664-
((RuleConfiguredTarget) ctad.getConfiguredTarget()).getConfigConditions());
1663+
(Rule) ctad.getTarget(), ctad.getConfiguredTarget().getConfigConditions());
16651664
}
16661665

16671666
public static Label makeLabel(String label) {

0 commit comments

Comments
 (0)