diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index 113cd18..14302ac 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -208,9 +208,6 @@
   private final SkyframeExecutor skyframeExecutor;
   private final SkyframeBuildView skyframeBuildView;
 
-  // Same as skyframeExecutor.getPackageManager().
-  private final LoadedPackageProvider packageManager;
-
   private final ConfiguredRuleClassProvider ruleClassProvider;
 
   /**
@@ -233,7 +230,6 @@
       SkyframeExecutor skyframeExecutor,
       CoverageReportActionFactory coverageReportActionFactory) {
     this.directories = directories;
-    this.packageManager = skyframeExecutor.getLoadedPackageProvider();
     this.coverageReportActionFactory = coverageReportActionFactory;
     this.ruleClassProvider = ruleClassProvider;
     this.skyframeExecutor = Preconditions.checkNotNull(skyframeExecutor);
@@ -777,7 +773,7 @@
 
   @VisibleForTesting
   public Iterable<Dependency> getDirectPrerequisiteDependenciesForTesting(
-      EventHandler eventHandler, ConfiguredTarget ct,
+      final EventHandler eventHandler, ConfiguredTarget ct,
       @Nullable final LoadingCache<Label, Target> targetCache,
       BuildConfigurationCollection configurations) throws InterruptedException {
     if (!(ct.getTarget() instanceof Rule)) {
@@ -798,7 +794,8 @@
       @Override
       protected Target getTarget(Label label) throws NoSuchThingException {
         if (targetCache == null) {
-          return packageManager.getLoadedTarget(label);
+          return LoadedPackageProvider.Bridge.getLoadedTarget(
+              skyframeExecutor.getPackageManager(), eventHandler, label);
         }
 
         try {
@@ -843,7 +840,7 @@
   }
 
   private ListMultimap<Attribute, ConfiguredTarget> getPrerequisiteMapForTesting(
-      EventHandler eventHandler, ConfiguredTarget target,
+      final EventHandler eventHandler, ConfiguredTarget target,
       BuildConfigurationCollection configurations) throws InterruptedException {
     DependencyResolver resolver = new DependencyResolver() {
       @Override
@@ -858,7 +855,8 @@
 
       @Override
       protected Target getTarget(Label label) throws NoSuchThingException {
-        return packageManager.getLoadedTarget(label);
+        return LoadedPackageProvider.Bridge.getLoadedTarget(
+            skyframeExecutor.getPackageManager(), eventHandler, label);
       }
     };
     TargetAndConfiguration ctNode = new TargetAndConfiguration(target);
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadedPackageProvider.java b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadedPackageProvider.java
index 9194466..25648ce 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadedPackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadedPackageProvider.java
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.pkgcache;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.Uninterruptibles;
 import com.google.devtools.build.lib.events.EventHandler;
@@ -53,7 +54,7 @@
     }
 
     @Override
-    public Target getLoadedTarget(final Label label)
+    public Target getLoadedTarget(Label label)
         throws NoSuchPackageException, NoSuchTargetException {
       return getLoadedTarget(packageProvider, eventHandler, label);
     }
@@ -62,6 +63,7 @@
      * Uninterruptible method to convert a label into a target using a given package provider and
      * event handler.
      */
+    @VisibleForTesting
     public static Target getLoadedTarget(
         final PackageProvider packageProvider, final EventHandler eventHandler, final Label label)
             throws NoSuchPackageException, NoSuchTargetException {
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 d21c14f..e2cc19f 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
@@ -87,7 +87,6 @@
 import com.google.devtools.build.lib.packages.RuleClassProvider;
 import com.google.devtools.build.lib.packages.RuleVisibility;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.pkgcache.LoadedPackageProvider;
 import com.google.devtools.build.lib.pkgcache.PackageCacheOptions;
 import com.google.devtools.build.lib.pkgcache.PackageManager;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
@@ -188,7 +187,6 @@
   private final AtomicInteger numPackagesLoaded = new AtomicInteger(0);
 
   protected SkyframeBuildView skyframeBuildView;
-  private final EventHandler errorEventListener;
   private ActionLogBufferPathGenerator actionLogBufferPathGenerator;
 
   protected BuildDriver buildDriver;
@@ -271,6 +269,7 @@
       ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions,
       ImmutableList<PrecomputedValue.Injected> extraPrecomputedValues,
       boolean errorOnExternalFiles) {
+    Preconditions.checkNotNull(reporter);
     // Strictly speaking, these arguments are not required for initialization, but all current
     // callsites have them at hand, so we might as well set them during construction.
     this.evaluatorSupplier = evaluatorSupplier;
@@ -282,7 +281,6 @@
         new SkyframePackageLoader(), new SkyframeTransitivePackageLoader(),
         new SkyframeTargetPatternEvaluator(this), syscalls, cyclesReporter, pkgLocator,
         numPackagesLoaded, this);
-    this.errorEventListener = Preconditions.checkNotNull(reporter);
     this.resourceManager = ResourceManager.instance();
     this.skyframeActionExecutor = new SkyframeActionExecutor(reporter, resourceManager, eventBus,
         statusReporterRef);
@@ -1516,10 +1514,6 @@
     return packageManager;
   }
 
-  public LoadedPackageProvider getLoadedPackageProvider() {
-    return new LoadedPackageProvider.Bridge(packageManager, errorEventListener);
-  }
-
   class SkyframePackageLoader {
     /**
      * Looks up a particular package (mostly used after the loading phase, so packages should
