From 27bb6dda6051aa5253488497053f18a0c37dc645 Mon Sep 17 00:00:00 2001 From: janakr Date: Sat, 10 Mar 2018 19:10:00 -0800 Subject: Add RuleContext#getPrerequisiteConfiguredTargetAndTarget and use it in GoTest to avoid calling ConfiguredTarget#getConfiguration. PiperOrigin-RevId: 188623273 --- .../google/devtools/build/lib/analysis/RuleContext.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/main') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index ab0bb5e183..1ae324663e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -375,10 +375,6 @@ public final class RuleContext extends TargetContext return Multimaps.transformValues(targetMap, ConfiguredTargetAndData::getConfiguredTarget); } - private List getDeps(String key) { - return Lists.transform(targetMap.get(key), ConfiguredTargetAndData::getConfiguredTarget); - } - private List getConfiguredTargetAndTargetDeps(String key) { return targetMap.get(key); } @@ -852,8 +848,19 @@ public final class RuleContext extends TargetContext * assertion will be raised. Returns null if the attribute is empty. */ public TransitiveInfoCollection getPrerequisite(String attributeName, Mode mode) { + ConfiguredTargetAndData result = getPrerequisiteConfiguredTargetAndData(attributeName, mode); + return result == null ? null : result.getConfiguredTarget(); + } + + /** + * Returns the {@link ConfiguredTargetAndData} that feeds ino this target through the specified + * attribute. Note that you need to specify the correct mode for the attribute, otherwise an + * assertion will be raised. Returns null if the attribute is empty. + */ + public ConfiguredTargetAndData getPrerequisiteConfiguredTargetAndData( + String attributeName, Mode mode) { checkAttribute(attributeName, mode); - List elements = getDeps(attributeName); + List elements = getConfiguredTargetAndTargetDeps(attributeName); if (elements.size() > 1) { throw new IllegalStateException(getRuleClassNameForLogging() + " attribute " + attributeName + " produces more than one prerequisite"); -- cgit v1.2.3