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
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 6f92ae0..c4b1e5f 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 @@
 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 @@
       }
 
       if (dumpOptions.dumpRules) {
-        dumpRuleStats(env.getBlazeWorkspace(), env.getSkyframeExecutor(), out);
+        dumpRuleStats(env.getReporter(), env.getBlazeWorkspace(), env.getSkyframeExecutor(), out);
         out.println();
       }
 
@@ -290,8 +291,12 @@
     }
   }
 
-  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 d32e946..20b05f0 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.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 @@
   }
 
   @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 @@
           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 4cc6602..5677caa 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 @@
   }
 
   /** 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 479cde3..153e976 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 @@
         packageRelativePath,
         owner
             .getConfiguration()
-            .getGenfilesDirectory(
-                owner.getTarget().getLabel().getPackageIdentifier().getRepository()),
+            .getGenfilesDirectory(owner.getLabel().getPackageIdentifier().getRepository()),
         (AspectValue.AspectKey)
             AspectValue.createAspectKey(
                     owner.getLabel(),
@@ -1973,7 +1972,13 @@
       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 @@
     } 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 61a09e2..b1085bf 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.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 @@
         ")");
     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");