diff --git a/src/main/java/com/google/devtools/build/lib/events/StoredEventHandler.java b/src/main/java/com/google/devtools/build/lib/events/StoredEventHandler.java
index 6983afe..008b893 100644
--- a/src/main/java/com/google/devtools/build/lib/events/StoredEventHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/events/StoredEventHandler.java
@@ -13,7 +13,6 @@
 // limitations under the License.
 package com.google.devtools.build.lib.events;
 
-import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableList;
 import java.util.ArrayList;
 import java.util.List;
@@ -70,13 +69,4 @@
     posts.clear();
     hasErrors = false;
   }
-
-  @Override
-  public String toString() {
-    return MoreObjects.toStringHelper(this)
-        .add("events", events)
-        .add("posts", posts)
-        .add("hasErrors", hasErrors)
-        .toString();
-  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/CachingPackageLocator.java b/src/main/java/com/google/devtools/build/lib/packages/CachingPackageLocator.java
index 6aa8a38..d485394 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/CachingPackageLocator.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/CachingPackageLocator.java
@@ -16,7 +16,6 @@
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.vfs.Path;
-import javax.annotation.Nullable;
 
 /**
  * CachingPackageLocator implementations locate a package by its name.
@@ -29,26 +28,19 @@
  * pieces of legacy code while still updating the Skyframe node graph.
  */
 public interface CachingPackageLocator {
+
   /**
    * Returns path of BUILD file for specified package iff the specified package exists, null
    * otherwise (e.g. invalid package name, no build file, or package has been deleted via
    * --deleted_packages)..
    *
-   * <p>The package's root directory may be computed by calling getParentFile().
+   * <p> The package's root directory may be computed by calling getParentFile().
    *
-   * <p>Instances of this interface are required to cache the results.
+   * <p> Instances of this interface are required to cache the results.
    *
-   * <p>This method must be thread-safe.
+   * <p> This method must be thread-safe.
    */
   @ThreadSafe
-  @Nullable
   Path getBuildFileForPackage(PackageIdentifier packageName);
 
-  /**
-   * Returns base name of BUILD file for specified package (typically 'BUILD' or 'BUILD.bazel').
-   * {@code packageName} must be an already loaded package. Implementations that do not have full
-   * access to the set of loaded packages may return null here.
-   */
-  @Nullable
-  String getBaseNameForLoadedPackage(PackageIdentifier packageName);
 }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/BlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/query/BlazeQueryEnvironment.java
index 8fe671b..31aaae2 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/BlazeQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/BlazeQueryEnvironment.java
@@ -55,6 +55,7 @@
 import com.google.devtools.build.lib.query2.engine.SkyframeRestartQueryException;
 import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback;
 import com.google.devtools.build.lib.query2.engine.Uniquifier;
+import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -437,14 +438,14 @@
 
           // Also add the BUILD file of the extension.
           if (buildFiles) {
-            // Can be null in genquery: see http://b/123795023#comment6.
-            String baseName =
-                cachingPackageLocator.getBaseNameForLoadedPackage(
+            Path buildFileForLoad =
+                cachingPackageLocator.getBuildFileForPackage(
                     loadTarget.getLabel().getLabel().getPackageIdentifier());
-            if (baseName != null) {
+            if (buildFileForLoad != null) {
               Label buildFileLabel =
                   Label.createUnvalidated(
-                      loadTarget.getLabel().getLabel().getPackageIdentifier(), baseName);
+                      loadTarget.getLabel().getLabel().getPackageIdentifier(),
+                      buildFileForLoad.getBaseName());
               addIfUniqueLabel(
                   getNode(new FakeLoadTarget(buildFileLabel, pkg)), seenLabels, dependentFiles);
             }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/GraphlessBlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/query/GraphlessBlazeQueryEnvironment.java
index e5c218f..d531b6a 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/GraphlessBlazeQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/GraphlessBlazeQueryEnvironment.java
@@ -45,6 +45,7 @@
 import com.google.devtools.build.lib.query2.engine.QueryUtil.UniquifierImpl;
 import com.google.devtools.build.lib.query2.engine.SkyframeRestartQueryException;
 import com.google.devtools.build.lib.query2.engine.Uniquifier;
+import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -437,13 +438,13 @@
 
           // Also add the BUILD file of the extension.
           if (buildFiles) {
-            // Can be null in genquery: see http://b/123795023#comment6.
-            String baseName =
-                cachingPackageLocator.getBaseNameForLoadedPackage(
+            Path buildFileForLoad =
+                cachingPackageLocator.getBuildFileForPackage(
                     loadTarget.getLabel().getPackageIdentifier());
-            if (baseName != null) {
+            if (buildFileForLoad != null) {
               Label buildFileLabel =
-                  Label.createUnvalidated(loadTarget.getLabel().getPackageIdentifier(), baseName);
+                  Label.createUnvalidated(
+                      loadTarget.getLabel().getPackageIdentifier(), buildFileForLoad.getBaseName());
               dependentFiles.add(new FakeLoadTarget(buildFileLabel, pkg));
             }
           }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
index 2830a2e..e94c860 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -617,14 +617,6 @@
       }
       return pkg.getBuildFile().getPath();
     }
-
-    @Override
-    public String getBaseNameForLoadedPackage(PackageIdentifier packageName) {
-      // TODO(b/123795023): we should have the data here but we don't have all packages for Starlark
-      //  loads present here.
-      Package pkg = pkgMap.get(packageName);
-      return pkg == null ? null : pkg.getBuildFileLabel().getName();
-    }
   }
 
   private static class BrokenQueryScopeException extends Exception {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java
index fbf2e7b..c988797 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java
@@ -13,14 +13,11 @@
 // limitations under the License.
 package com.google.devtools.build.lib.skyframe;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
 import com.google.common.base.Preconditions;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.events.StoredEventHandler;
 import com.google.devtools.build.lib.packages.CachingPackageLocator;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
@@ -110,22 +107,6 @@
   }
 
   @Override
-  public String getBaseNameForLoadedPackage(PackageIdentifier packageName) {
-    StoredEventHandler eventHandler = new StoredEventHandler();
-    try {
-      Package pkg =
-          checkNotNull(
-              packageLoader.getPackage(eventHandler, packageName),
-              "Already loaded package not present: %s",
-              eventHandler);
-      return pkg.getBuildFileLabel().getName();
-    } catch (InterruptedException | NoSuchPackageException e) {
-      throw new IllegalStateException(
-          "Can't have error for loaded " + packageName + ", " + eventHandler, e);
-    }
-  }
-
-  @Override
   public PathPackageLocator getPackagePath() {
     return pkgLocator.get();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
index 11818be..2eb0449 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -460,12 +460,6 @@
           public Path getBuildFileForPackage(PackageIdentifier packageName) {
             return pkgLocatorRef.get().getPackageBuildFileNullable(packageName, syscallCacheRef);
           }
-
-          @Override
-          public String getBaseNameForLoadedPackage(PackageIdentifier packageName) {
-            Path buildFileForPackage = getBuildFileForPackage(packageName);
-            return buildFileForPackage == null ? null : buildFileForPackage.getBaseName();
-          }
         };
     ImmutableMap.Builder<SkyFunctionName, SkyFunction> builder = ImmutableMap.builder();
     builder
diff --git a/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java b/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java
index f1b693f..d90c55c 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java
@@ -110,12 +110,6 @@
                   return null;
                 }
               }
-
-              @Override
-              public String getBaseNameForLoadedPackage(PackageIdentifier packageName) {
-                Path buildFileForPackage = getBuildFileForPackage(packageName);
-                return buildFileForPackage == null ? null : buildFileForPackage.getBaseName();
-              }
             },
             null,
             TestUtils.getPool(),
diff --git a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
index 1710588..21141f1 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
@@ -1251,11 +1251,6 @@
               public Path getBuildFileForPackage(PackageIdentifier packageName) {
                 return null;
               }
-
-              @Override
-              public String getBaseNameForLoadedPackage(PackageIdentifier packageName) {
-                return null;
-              }
             },
             null,
             TestUtils.getPool(),
