diff options
author | 2018-03-15 09:29:10 -0700 | |
---|---|---|
committer | 2018-03-15 09:30:32 -0700 | |
commit | 2267e2a783231d02822d182012b8047f4694be5a (patch) | |
tree | 979a91921dc8aca59755a19e7c15556fa68231f9 /src/main/java/com/google/devtools/build | |
parent | 548c3957fa0f553afe20259d1a114e5a01f04c5b (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')
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; |