From 0ab46f0dd95f735056add4dd8a90a76944b81d00 Mon Sep 17 00:00:00 2001 From: mjhalupka Date: Thu, 8 Feb 2018 13:29:30 -0800 Subject: Remove references to getTarget(). Requires threading through an ExtendedEventHandler so we can get the target via the package manager during rule dumps. PiperOrigin-RevId: 185042522 --- .../devtools/build/lib/runtime/commands/DumpCommand.java | 11 ++++++++--- .../build/lib/skyframe/SequencedSkyframeExecutor.java | 16 ++++++++++++++-- .../devtools/build/lib/skyframe/SkyframeExecutor.java | 2 +- 3 files changed, 23 insertions(+), 6 deletions(-) (limited to 'src/main/java/com') diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java index 6f92ae0a06..c4b1e5f301 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.runtime.commands; import static java.util.stream.Collectors.toList; import com.google.devtools.build.lib.events.Event; +import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.RuleClass; @@ -222,7 +223,7 @@ public class DumpCommand implements BlazeCommand { } if (dumpOptions.dumpRules) { - dumpRuleStats(env.getBlazeWorkspace(), env.getSkyframeExecutor(), out); + dumpRuleStats(env.getReporter(), env.getBlazeWorkspace(), env.getSkyframeExecutor(), out); out.println(); } @@ -290,8 +291,12 @@ public class DumpCommand implements BlazeCommand { } } - private void dumpRuleStats(BlazeWorkspace workspace, SkyframeExecutor executor, PrintStream out) { - List ruleStats = executor.getRuleStats(); + private void dumpRuleStats( + ExtendedEventHandler eventHandler, + BlazeWorkspace workspace, + SkyframeExecutor executor, + PrintStream out) { + List ruleStats = executor.getRuleStats(eventHandler); if (ruleStats.isEmpty()) { out.print("No rules in Blaze server, please run a build command first."); return; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java index d32e94602f..20b05f0d46 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java @@ -41,8 +41,11 @@ import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.BuildFileName; +import com.google.devtools.build.lib.packages.NoSuchPackageException; +import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.packages.PackageFactory; +import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.SkylarkSemanticsOptions; import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; @@ -692,7 +695,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { } @Override - public List getRuleStats() { + public List getRuleStats(ExtendedEventHandler eventHandler) { Map ruleStats = new HashMap<>(); for (Map.Entry skyKeyAndNodeEntry : memoizingEvaluator.getGraphMap().entrySet()) { @@ -707,8 +710,17 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { ConfiguredTargetValue ctValue = (ConfiguredTargetValue) entry.getValue(); ConfiguredTarget configuredTarget = ctValue.getConfiguredTarget(); if (configuredTarget instanceof RuleConfiguredTarget) { + + Rule rule; + try { + rule = + (Rule) getPackageManager().getTarget(eventHandler, configuredTarget.getLabel()); + } catch (NoSuchPackageException | NoSuchTargetException | InterruptedException e) { + throw new IllegalStateException( + "Failed to get Rule target from package when calculating stats.", e); + } RuleConfiguredTarget ruleConfiguredTarget = (RuleConfiguredTarget) configuredTarget; - RuleClass ruleClass = ruleConfiguredTarget.getTarget().getRuleClassObject(); + RuleClass ruleClass = rule.getRuleClassObject(); RuleStat ruleStat = ruleStats.computeIfAbsent( ruleClass.getKey(), k -> new RuleStat(k, ruleClass.getName(), true)); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 4cc660209a..5677caad8d 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -686,7 +686,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { } /** Computes statistics on heap-resident rules and aspects. */ - public abstract List getRuleStats(); + public abstract List getRuleStats(ExtendedEventHandler eventHandler); /** * Removes ConfigurationFragmentValues from the cache. -- cgit v1.2.3