diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallback.java
index 8e541ac2..af8a6c0 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/BuildOutputFormatterCallback.java
@@ -32,7 +32,6 @@
 import com.google.devtools.build.lib.query2.query.output.OutputFormatter.PossibleAttributeValues;
 import com.google.devtools.build.lib.rules.AliasConfiguredTarget;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.skyframe.BuildDriver;
 import java.io.IOException;
 import java.io.OutputStream;
 
@@ -42,7 +41,7 @@
       ExtendedEventHandler eventHandler,
       CqueryOptions options,
       OutputStream out,
-      SkyframeExecutor<? extends BuildDriver> skyframeExecutor,
+      SkyframeExecutor skyframeExecutor,
       TargetAccessor<ConfiguredTarget> accessor) {
     super(eventHandler, options, out, skyframeExecutor, accessor);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
index d41a802..9f6875a 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
@@ -607,7 +607,7 @@
     public byte[] get(Supplier<BuildConfiguration> configurationSupplier, CommandEnvironment env) {
       StarlarkSemanticsOptions starlarkSemanticsOptions =
           commandOptions.getOptions(StarlarkSemanticsOptions.class);
-      SkyframeExecutor<?> skyframeExecutor = env.getBlazeWorkspace().getSkyframeExecutor();
+      SkyframeExecutor skyframeExecutor = env.getBlazeWorkspace().getSkyframeExecutor();
       StarlarkSemantics effectiveSkylarkSemantics =
           skyframeExecutor.getEffectiveStarlarkSemantics(starlarkSemanticsOptions);
       return print(effectiveSkylarkSemantics.toDeterministicString());
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 0731f72..7a4bd2f 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
@@ -123,7 +123,7 @@
  * A SkyframeExecutor that implicitly assumes that builds can be done incrementally from the most
  * recent build. In other words, builds are "sequenced".
  */
-public final class SequencedSkyframeExecutor extends SkyframeExecutor<BuildDriver> {
+public final class SequencedSkyframeExecutor extends SkyframeExecutor {
 
   private static final Logger logger = Logger.getLogger(SequencedSkyframeExecutor.class.getName());
 
@@ -204,7 +204,7 @@
   }
 
   @Override
-  protected BuildDriver getBuildDriver() {
+  protected BuildDriver createBuildDriver() {
     return new SequentialBuildDriver(memoizingEvaluator);
   }
 
@@ -470,7 +470,7 @@
             .setNumThreads(DEFAULT_THREAD_COUNT)
             .setEventHander(eventHandler)
             .build();
-    buildDriver.evaluate(ImmutableList.<SkyKey>of(), evaluationContext);
+    getDriver().evaluate(ImmutableList.of(), evaluationContext);
 
     FilesystemValueChecker fsvc = new FilesystemValueChecker(tsgm, null);
     // We need to manually check for changes to known files. This entails finding all dirty file
@@ -843,7 +843,7 @@
                       .setNumThreads(ResourceUsage.getAvailableProcessors())
                       .setEventHander(eventHandler)
                       .build();
-              buildDriver.evaluate(ImmutableList.<SkyKey>of(), evaluationContext);
+              getDriver().evaluate(ImmutableList.of(), evaluationContext);
               return null;
             }
           });
@@ -940,7 +940,7 @@
             .setNumThreads(DEFAULT_THREAD_COUNT)
             .setEventHander(eventHandler)
             .build();
-    return buildDriver.evaluate(ImmutableSet.of(key), evaluationContext).get(key);
+    return getDriver().evaluate(ImmutableSet.of(key), evaluationContext).get(key);
   }
 
   public static Builder builder() {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
index a736606..c19a52a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -105,7 +105,7 @@
 public final class SkyframeBuildView {
   private final ConfiguredTargetFactory factory;
   private final ArtifactFactory artifactFactory;
-  private final SkyframeExecutor<?> skyframeExecutor;
+  private final SkyframeExecutor skyframeExecutor;
   private final SkyframeActionExecutor skyframeActionExecutor;
   private boolean enableAnalysis = false;
 
@@ -146,7 +146,7 @@
 
   public SkyframeBuildView(
       BlazeDirectories directories,
-      SkyframeExecutor<?> skyframeExecutor,
+      SkyframeExecutor skyframeExecutor,
       ConfiguredRuleClassProvider ruleClassProvider,
       SkyframeActionExecutor skyframeActionExecutor) {
     this.skyframeActionExecutor = skyframeActionExecutor;
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 f22b1ea..972e530 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
@@ -185,6 +185,7 @@
 import com.google.devtools.build.skyframe.WalkableGraph.WalkableGraphFactory;
 import com.google.devtools.common.options.OptionsParsingException;
 import com.google.devtools.common.options.OptionsProvider;
+import com.google.errorprone.annotations.ForOverride;
 import java.io.PrintStream;
 import java.math.BigInteger;
 import java.util.ArrayList;
@@ -218,7 +219,7 @@
  * additional artifacts (workspace status and build info artifacts) into SkyFunctions for use during
  * the build.
  */
-public abstract class SkyframeExecutor<T extends BuildDriver> implements WalkableGraphFactory {
+public abstract class SkyframeExecutor implements WalkableGraphFactory {
   private static final Logger logger = Logger.getLogger(SkyframeExecutor.class.getName());
 
   // We delete any value that can hold an action -- all subclasses of ActionLookupKey.
@@ -266,7 +267,7 @@
   private final SkyframeBuildView skyframeBuildView;
   private ActionLogBufferPathGenerator actionLogBufferPathGenerator;
 
-  protected T buildDriver;
+  private BuildDriver buildDriver;
 
   private final Consumer<SkyframeExecutor> skyframeExecutorConsumerOnInit;
 
@@ -705,8 +706,7 @@
     incrementalBuildMonitor = null;
   }
 
-  @VisibleForTesting
-  public BuildDriver getDriverForTesting() {
+  public final BuildDriver getDriver() {
     return buildDriver;
   }
 
@@ -769,7 +769,7 @@
             DEFAULT_FILTER_WITH_ACTIONS,
             emittedEventState,
             tracksStateForIncrementality());
-    buildDriver = getBuildDriver();
+    buildDriver = createBuildDriver();
     skyframeExecutorConsumerOnInit.accept(this);
   }
 
@@ -837,7 +837,8 @@
 
   protected abstract Differencer evaluatorDiffer();
 
-  protected abstract T getBuildDriver();
+  @ForOverride
+  protected abstract BuildDriver createBuildDriver();
 
   /** Clear any configured target data stored outside Skyframe. */
   public void handleAnalysisInvalidatingChange() {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
index ee4b9b5..f83269f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
@@ -44,9 +44,9 @@
 
 /** Skyframe-based target pattern parsing. */
 final class SkyframeTargetPatternEvaluator implements TargetPatternPreloader {
-  private final SkyframeExecutor<?> skyframeExecutor;
+  private final SkyframeExecutor skyframeExecutor;
 
-  SkyframeTargetPatternEvaluator(SkyframeExecutor<?> skyframeExecutor) {
+  SkyframeTargetPatternEvaluator(SkyframeExecutor skyframeExecutor) {
     this.skyframeExecutor = skyframeExecutor;
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java b/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java
index 9e07eed..a1a1a8e 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java
@@ -226,9 +226,7 @@
             .setEventHander(reporter)
             .build();
     EvaluationResult<TestSuiteExpansionValue> result =
-        getSkyframeExecutor()
-            .getDriverForTesting()
-            .evaluate(ImmutableList.of(key), evaluationContext);
+        getSkyframeExecutor().getDriver().evaluate(ImmutableList.of(key), evaluationContext);
     ResolvedTargets<Label> actual = result.get(key).getLabels();
     assertThat(actual.hasError()).isFalse();
     assertThat(actual.getTargets()).containsExactlyElementsIn(expectedLabels);
diff --git a/src/test/java/com/google/devtools/build/lib/query2/engine/SkyframeQueryHelper.java b/src/test/java/com/google/devtools/build/lib/query2/engine/SkyframeQueryHelper.java
index b825fbf..cec32db 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/engine/SkyframeQueryHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/engine/SkyframeQueryHelper.java
@@ -71,7 +71,7 @@
 
 /** An implementation of AbstractQueryHelper to support testing bazel query. */
 public abstract class SkyframeQueryHelper extends AbstractQueryHelper<Target> {
-  protected SkyframeExecutor<?> skyframeExecutor;
+  protected SkyframeExecutor skyframeExecutor;
   protected FileSystem fileSystem = new InMemoryFileSystem(BlazeClock.instance());
   protected Path rootDirectory;
   protected BlazeDirectories directories;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageFunctionTest.java
index 605c8d1..110e89e 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageFunctionTest.java
@@ -23,7 +23,6 @@
 import com.google.devtools.build.skyframe.EvaluationResult;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -32,13 +31,6 @@
 @RunWith(JUnit4.class)
 public class PackageErrorMessageFunctionTest extends BuildViewTestCase {
 
-  private SkyframeExecutor skyframeExecutor;
-
-  @Before
-  public final void createSkyframeExecutor() {
-    skyframeExecutor = getSkyframeExecutor();
-  }
-
   @Test
   public void testNoErrorMessage() throws Exception {
     scratch.file("a/BUILD");
@@ -80,7 +72,7 @@
             .setEventHander(reporter)
             .build();
     EvaluationResult<SkyValue> result =
-        skyframeExecutor.getDriverForTesting().evaluate(ImmutableList.of(key), evaluationContext);
+        skyframeExecutor.getDriver().evaluate(ImmutableList.of(key), evaluationContext);
     assertThat(result.hasError()).isFalse();
     SkyValue value = result.get(key);
     assertThat(value).isInstanceOf(PackageErrorMessageValue.class);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
index a7c87a0..0a6b74f 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
@@ -226,7 +226,7 @@
             .setEventHander(new Reporter(new EventBus(), eventCollector))
             .build();
     EvaluationResult<SkyValue> evaluationResult =
-        skyframeExecutor.getDriverForTesting().evaluate(singletonTargetPattern, evaluationContext);
+        skyframeExecutor.getDriver().evaluate(singletonTargetPattern, evaluationContext);
     // The evaluation has no errors if success was expected.
     assertThat(evaluationResult.hasError()).isNotEqualTo(successExpected);
     return Preconditions.checkNotNull(evaluationResult.getWalkableGraph());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionTest.java
index 9c801ab..3e7e80e 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionTest.java
@@ -211,9 +211,7 @@
             .setEventHander(new Reporter(new EventBus(), eventCollector))
             .build();
     EvaluationResult<SkyValue> evaluationResult =
-        getSkyframeExecutor()
-            .getDriverForTesting()
-            .evaluate(singletonTargetPattern, evaluationContext);
+        getSkyframeExecutor().getDriver().evaluate(singletonTargetPattern, evaluationContext);
     // Currently all callers either expect success or pass keepGoing=true, which implies success,
     // since PrepareDepsOfPatternsFunction swallows all errors. Will need to be changed if a test
     // that evaluates with keepGoing=false and expects errors is added.
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunctionTest.java
index a577b7c..0828077 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunctionTest.java
@@ -30,13 +30,11 @@
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.lib.vfs.RootedPath;
-import com.google.devtools.build.skyframe.BuildDriver;
 import com.google.devtools.build.skyframe.EvaluationContext;
 import com.google.devtools.build.skyframe.EvaluationResult;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.WalkableGraph;
 import java.io.IOException;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -47,13 +45,6 @@
 @RunWith(JUnit4.class)
 public class PrepareDepsOfTargetsUnderDirectoryFunctionTest extends BuildViewTestCase {
 
-  private SkyframeExecutor skyframeExecutor;
-
-  @Before
-  public final void setSkyframeExecutor() throws Exception {
-    skyframeExecutor = getSkyframeExecutor();
-  }
-
   private SkyKey createCollectPackagesKey(
       Path root, PathFragment rootRelativePath, ImmutableSet<PathFragment> excludedPaths) {
     RootedPath rootedPath = RootedPath.toRootedPath(Root.fromPath(root), rootRelativePath);
@@ -80,7 +71,6 @@
   }
 
   private EvaluationResult<?> getEvaluationResult(SkyKey... keys) throws InterruptedException {
-    BuildDriver driver = skyframeExecutor.getDriverForTesting();
     EvaluationContext evaluationContext =
         EvaluationContext.newBuilder()
             .setKeepGoing(false)
@@ -88,7 +78,7 @@
             .setEventHander(reporter)
             .build();
     EvaluationResult<PrepareDepsOfTargetsUnderDirectoryValue> evaluationResult =
-        driver.evaluate(ImmutableList.copyOf(keys), evaluationContext);
+        skyframeExecutor.getDriver().evaluate(ImmutableList.copyOf(keys), evaluationContext);
     Preconditions.checkState(!evaluationResult.hasError());
     return evaluationResult;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunctionTest.java
index 16a1ff7..e64b3da 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunctionTest.java
@@ -26,12 +26,10 @@
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.lib.vfs.RootedPath;
-import com.google.devtools.build.skyframe.BuildDriver;
 import com.google.devtools.build.skyframe.EvaluationContext;
 import com.google.devtools.build.skyframe.EvaluationResult;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.WalkableGraph;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -48,13 +46,6 @@
 @RunWith(JUnit4.class)
 public class RecursivePkgFunctionTest extends BuildViewTestCase {
 
-  private SkyframeExecutor skyframeExecutor;
-
-  @Before
-  public final void createSkyframeExecutor() throws Exception {
-    skyframeExecutor = getSkyframeExecutor();
-  }
-
   private SkyKey buildRecursivePkgKey(
       Path root, PathFragment rootRelativePath, ImmutableSet<PathFragment> excludedPaths) {
     RootedPath rootedPath = RootedPath.toRootedPath(Root.fromPath(root), rootRelativePath);
@@ -76,7 +67,6 @@
 
   private EvaluationResult<RecursivePkgValue> getEvaluationResult(SkyKey key)
       throws InterruptedException {
-    BuildDriver driver = skyframeExecutor.getDriverForTesting();
     EvaluationContext evaluationContext =
         EvaluationContext.newBuilder()
             .setKeepGoing(false)
@@ -84,7 +74,7 @@
             .setEventHander(reporter)
             .build();
     EvaluationResult<RecursivePkgValue> evaluationResult =
-        driver.evaluate(ImmutableList.of(key), evaluationContext);
+        skyframeExecutor.getDriver().evaluate(ImmutableList.of(key), evaluationContext);
     Preconditions.checkState(!evaluationResult.hasError());
     return evaluationResult;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java b/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java
index ff3cfb9..0c12d8d 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java
@@ -75,9 +75,7 @@
             .setNumThreads(SkyframeExecutor.DEFAULT_THREAD_COUNT)
             .setEventHander(errorEventListener)
             .build();
-    return skyframeExecutor
-        .getDriverForTesting()
-        .evaluate(ImmutableList.of(key), evaluationContext);
+    return skyframeExecutor.getDriver().evaluate(ImmutableList.of(key), evaluationContext);
   }
 
   /**
