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 --- .../build/lib/skyframe/SequencedSkyframeExecutor.java | 16 ++++++++++++++-- .../devtools/build/lib/skyframe/SkyframeExecutor.java | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/skyframe') 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