aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar juliexxia <juliexxia@google.com>2018-03-15 09:29:10 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-15 09:30:32 -0700
commit2267e2a783231d02822d182012b8047f4694be5a (patch)
tree979a91921dc8aca59755a19e7c15556fa68231f9 /src/main/java/com/google/devtools/build
parent548c3957fa0f553afe20259d1a114e5a01f04c5b (diff)
Modify CTQEnvironment and associated files to handle AliasConfiguredTargets. Always handle AliasConfiguredTargets as separate nodes from their "actual" value. This is helpful in understanding certain query results e.g. somepath.
PiperOrigin-RevId: 189196863
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/Util.java21
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/CqueryBuildTool.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java21
3 files changed, 32 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Util.java b/src/main/java/com/google/devtools/build/lib/analysis/Util.java
index e379ffcdc9..2c2e178206 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Util.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Util.java
@@ -22,11 +22,13 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.compacthashset.CompactHashSet;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.rules.AliasConfiguredTarget;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
/**
* Utility methods for use by ConfiguredTarget implementations.
@@ -113,10 +115,19 @@ public abstract class Util {
private static void addLabelsAndConfigs(
Set<ConfiguredTargetKey> set, List<ConfiguredTargetAndData> deps) {
- deps.forEach(
- target ->
- set.add(
- ConfiguredTargetKey.of(
- target.getConfiguredTarget().getLabel(), target.getConfiguration())));
+ for (ConfiguredTarget dep :
+ deps.stream()
+ .map(ConfiguredTargetAndData::getConfiguredTarget)
+ .collect(Collectors.toList())) {
+ // This must be done because {@link AliasConfiguredTarget#getLabel} returns the label of the
+ // "actual" configured target instead of the alias.
+ if (dep instanceof AliasConfiguredTarget) {
+ set.add(
+ ConfiguredTargetKey.of(
+ ((AliasConfiguredTarget) dep).getOriginalLabel(), dep.getConfiguration()));
+ } else {
+ set.add(ConfiguredTargetKey.of(dep.getLabel(), dep.getConfiguration()));
+ }
+ }
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/CqueryBuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/CqueryBuildTool.java
index f129278275..3bcdb3e9d0 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/CqueryBuildTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/CqueryBuildTool.java
@@ -139,7 +139,8 @@ public class CqueryBuildTool extends BuildTool {
BuildConfiguration config = configuredTarget.getConfiguration();
StringBuilder output =
new StringBuilder()
- .append(configuredTarget.getLabel())
+ .append(
+ ConfiguredTargetQueryEnvironment.getCorrectLabel(configuredTarget))
.append(" (")
.append(config != null && config.isHostConfiguration() ? "HOST" : config)
.append(")");
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
index 8ff1716644..776a84e28e 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
@@ -105,7 +105,7 @@ public class ConfiguredTargetQueryEnvironment
protected WalkableGraph graph;
private static final Function<ConfiguredTarget, SkyKey> CT_TO_SKYKEY =
- target -> ConfiguredTargetValue.key(target.getLabel(), target.getConfiguration());
+ target -> ConfiguredTargetValue.key(getCorrectLabel(target), target.getConfiguration());
private static final Function<SkyKey, ConfiguredTargetKey> SKYKEY_TO_CTKEY =
skyKey -> (ConfiguredTargetKey) skyKey.argument();
private static final ImmutableList<TargetPatternKey> ALL_PATTERNS;
@@ -175,6 +175,17 @@ public class ConfiguredTargetQueryEnvironment
return ImmutableList.of(new ConfigFunction());
}
+ /**
+ * This method has to exist because {@link AliasConfiguredTarget#getLabel()} returns
+ * the label of the "actual" target instead of the alias target. Grr.
+ */
+ public static Label getCorrectLabel(ConfiguredTarget target) {
+ if (target instanceof AliasConfiguredTarget) {
+ return ((AliasConfiguredTarget) target).getOriginalLabel();
+ }
+ return target.getLabel();
+ }
+
// Check to make sure the settings requested are currently supported by this class
private void checkSettings(Set<Setting> settings) throws QueryException {
if (settings.contains(Setting.NO_NODEP_DEPS)
@@ -319,7 +330,7 @@ public class ConfiguredTargetQueryEnvironment
public Void call() throws QueryException, InterruptedException {
List<ConfiguredTarget> transformedResult = new ArrayList<>();
for (ConfiguredTarget target : targets) {
- Label label = target.getLabel();
+ Label label = getCorrectLabel(target);
ConfiguredTarget configuredTarget;
switch (configuration) {
case "\'host\'":
@@ -379,10 +390,6 @@ public class ConfiguredTargetQueryEnvironment
if (settings.isEmpty()) {
return rawFwdDeps;
}
- if (configTarget instanceof AliasConfiguredTarget
- && ((AliasConfiguredTarget) configTarget).getActual() instanceof RuleConfiguredTarget) {
- return getAllowedDeps(((AliasConfiguredTarget) configTarget).getActual(), rawFwdDeps);
- }
return getAllowedDeps(configTarget, rawFwdDeps);
}
@@ -424,7 +431,7 @@ public class ConfiguredTargetQueryEnvironment
dep ->
!implicitDeps.contains(
ConfiguredTargetKey.of(
- dep.getLabel(), dep.getConfiguration())))
+ getCorrectLabel(dep), dep.getConfiguration())))
.collect(Collectors.toList());
}
return deps;