aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java17
-rw-r--r--src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java5
5 files changed, 36 insertions, 15 deletions
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<RuleStat> ruleStats = executor.getRuleStats();
+ private void dumpRuleStats(
+ ExtendedEventHandler eventHandler,
+ BlazeWorkspace workspace,
+ SkyframeExecutor executor,
+ PrintStream out) {
+ List<RuleStat> 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<RuleStat> getRuleStats() {
+ public List<RuleStat> getRuleStats(ExtendedEventHandler eventHandler) {
Map<String, RuleStat> ruleStats = new HashMap<>();
for (Map.Entry<SkyKey, ? extends NodeEntry> 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<RuleStat> getRuleStats();
+ public abstract List<RuleStat> getRuleStats(ExtendedEventHandler eventHandler);
/**
* Removes ConfigurationFragmentValues from the cache.
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index 479cde386d..153e976c8d 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -1193,8 +1193,7 @@ public abstract class BuildViewTestCase extends FoundationTestCase {
packageRelativePath,
owner
.getConfiguration()
- .getGenfilesDirectory(
- owner.getTarget().getLabel().getPackageIdentifier().getRepository()),
+ .getGenfilesDirectory(owner.getLabel().getPackageIdentifier().getRepository()),
(AspectValue.AspectKey)
AspectValue.createAspectKey(
owner.getLabel(),
@@ -1973,7 +1972,13 @@ public abstract class BuildViewTestCase extends FoundationTestCase {
ConfiguredTarget target,
BuildConfiguration configuration,
SafeImplicitOutputsFunction outputFunction) {
- Rule associatedRule = target.getTarget().getAssociatedRule();
+ Rule rule;
+ try {
+ rule = (Rule) skyframeExecutor.getPackageManager().getTarget(reporter, target.getLabel());
+ } catch (NoSuchPackageException | NoSuchTargetException | InterruptedException e) {
+ throw new IllegalStateException(e);
+ }
+ Rule associatedRule = rule.getAssociatedRule();
RepositoryName repository = associatedRule.getRepository();
ArtifactRoot root;
@@ -1982,15 +1987,13 @@ public abstract class BuildViewTestCase extends FoundationTestCase {
} else {
root = configuration.getGenfilesDirectory(repository);
}
- ArtifactOwner owner =
- ConfiguredTargetKey.of(target.getTarget().getLabel(), target.getConfiguration());
+ ArtifactOwner owner = ConfiguredTargetKey.of(target.getLabel(), target.getConfiguration());
RawAttributeMapper attr = RawAttributeMapper.of(associatedRule);
String path = Iterables.getOnlyElement(outputFunction.getImplicitOutputs(eventCollector, attr));
return view.getArtifactFactory()
- .getDerivedArtifact(
- target.getTarget().getLabel().getPackageFragment().getRelative(path), root, owner);
+ .getDerivedArtifact(target.getLabel().getPackageFragment().getRelative(path), root, owner);
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
index 61a09e273f..b1085bfcf3 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
@@ -23,6 +23,7 @@ import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.packages.BuildFileNotFoundException;
import com.google.devtools.build.lib.packages.util.ResourceLoader;
import com.google.devtools.build.lib.rules.android.AndroidSdkProvider;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import org.junit.Before;
import org.junit.Test;
@@ -91,8 +92,8 @@ public class AndroidSdkRepositoryTest extends BuildViewTestCase {
")");
invalidatePackages();
- ConfiguredTarget aarImportTarget =
- getConfiguredTarget("@androidsdk//com.google.android:foo-1.0.0");
+ ConfiguredTargetAndTarget aarImportTarget =
+ getConfiguredTargetAndTarget("@androidsdk//com.google.android:foo-1.0.0");
assertThat(aarImportTarget).isNotNull();
assertThat(aarImportTarget.getTarget().getAssociatedRule().getRuleClass())
.isEqualTo("aar_import");