diff --git a/pkg/analyzer/test/generated/parser_forest_test.dart b/pkg/analyzer/test/generated/parser_forest_test.dart
index bf84974..7b9bc03 100644
--- a/pkg/analyzer/test/generated/parser_forest_test.dart
+++ b/pkg/analyzer/test/generated/parser_forest_test.dart
@@ -6,6 +6,7 @@
 import 'dart:io' show File;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/src/fasta/ast_building_factory.dart';
 import "package:front_end/src/api_prototype/front_end.dart";
 import "package:front_end/src/api_prototype/memory_file_system.dart";
 import "package:front_end/src/base/processed_options.dart";
@@ -27,7 +28,6 @@
 import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
 import 'package:front_end/src/fasta/uri_translator_impl.dart';
 import 'package:front_end/src/scanner/token.dart';
-import 'package:kernel/ast.dart' as kernel;
 import 'package:kernel/class_hierarchy.dart' as kernel;
 import 'package:kernel/core_types.dart' as kernel;
 import 'package:kernel/kernel.dart' as kernel;
@@ -1220,7 +1220,7 @@
         false /* strong mode */,
       ));
 
-      AnalyzerBodyBuilder builder = new AnalyzerBodyBuilder(
+      BodyBuilder builder = new BodyBuilder(
         library,
         procedureBuilder,
         library.scope,
@@ -1231,6 +1231,7 @@
         false /* isInstanceMember */,
         null /* uri */,
         typeInferrer,
+        new AstBuildingForest(),
       )..constantContext = ConstantContext.none; // .inferred ?
 
       Parser parser = new Parser(builder);
@@ -1288,46 +1289,3 @@
 
   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
-
-class AnalyzerBodyBuilder extends BodyBuilder {
-  // TODO(danrubel): Hopefully BodyBuilder can be modified in a way that makes
-  // this class unnecessary.
-  AnalyzerBodyBuilder(
-      KernelLibraryBuilder library,
-      ModifierBuilder member,
-      Scope scope,
-      Scope formalParameterScope,
-      kernel.ClassHierarchy hierarchy,
-      kernel.CoreTypes coreTypes,
-      KernelClassBuilder classBuilder,
-      bool isInstanceMember,
-      Uri uri,
-      TypeInferrer typeInferrer)
-      : super(library, member, scope, formalParameterScope, hierarchy,
-            coreTypes, classBuilder, isInstanceMember, uri, typeInferrer);
-
-  AnalyzerForest analyzerForest = new AnalyzerForest();
-
-  @override
-  Forest<kernel.Expression, kernel.Statement, Token, kernel.Arguments>
-      get forest => analyzerForest;
-}
-
-// TODO(danrubel): Replace this with AstBuildingForest.
-class AnalyzerForest extends Forest<kernel.Expression, kernel.Statement, Token,
-    kernel.Arguments> {
-  @override
-  kernel.Arguments arguments(List<kernel.Expression> positional, Token token,
-      {List<kernel.DartType> types, List<kernel.NamedExpression> named}) {
-    return new kernel.Arguments(positional, types: types, named: named)
-      ..fileOffset = token?.charOffset;
-  }
-
-  @override
-  kernel.Expression literalInt(int value, Token location) {
-    // TODO(danrubel): return an Analyzer AST node.
-    return new kernel.IntLiteral(value);
-  }
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
diff --git a/pkg/analyzer/test/generated/test_all.dart b/pkg/analyzer/test/generated/test_all.dart
index 52a3081..ef889c4 100644
--- a/pkg/analyzer/test/generated/test_all.dart
+++ b/pkg/analyzer/test/generated/test_all.dart
@@ -42,6 +42,7 @@
 import 'non_hint_code_test.dart' as non_hint_code_test;
 import 'package_test.dart' as package_test;
 import 'parser_fasta_test.dart' as parser_fasta_test;
+import 'parser_forest_test.dart' as parser_forest_test;
 import 'parser_test.dart' as parser_test;
 import 'resolver_driver_test.dart' as resolver_driver_test;
 import 'resolver_kernel_test.dart' as resolver_kernel_test;
@@ -107,6 +108,7 @@
     non_hint_code_test.main();
     package_test.main();
     parser_fasta_test.main();
+    parser_forest_test.main();
     parser_test.main();
     resolver_driver_test.main();
     resolver_kernel_test.main();
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 15c3a55..02d9745 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -85,8 +85,6 @@
 
 import 'kernel_builder.dart';
 
-final Forest _forest = new Fangorn();
-
 // TODO(ahe): Remove this and ensure all nodes have a location.
 const noLocation = null;
 
@@ -184,6 +182,10 @@
   /// and where that was.
   Map<String, int> initializedFields;
 
+  // TODO(ahe): Update type parameters.
+  @override
+  Forest<dynamic, dynamic, Token, dynamic> forest;
+
   BodyBuilder(
       KernelLibraryBuilder library,
       this.member,
@@ -194,7 +196,8 @@
       this.classBuilder,
       this.isInstanceMember,
       this.uri,
-      this._typeInferrer)
+      this._typeInferrer,
+      [this.forest = const Fangorn()])
       : enclosingScope = scope,
         library = library,
         enableNative =
@@ -208,9 +211,6 @@
         typePromoter = _typeInferrer.typePromoter,
         super(scope);
 
-  @override
-  Forest<Expression, Statement, Token, Arguments> get forest => _forest;
-
   bool get hasParserError => recoverableErrors.isNotEmpty;
 
   bool get inConstructor {
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index ff27e54..45c842e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -53,6 +53,8 @@
 
 /// A shadow tree factory.
 class Fangorn extends Forest<Expression, Statement, Token, Arguments> {
+  const Fangorn();
+
   @override
   ShadowArguments arguments(List<Expression> positional, Token token,
       {List<DartType> types, List<NamedExpression> named}) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
index 227757c..81521a1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -84,7 +84,8 @@
 
   ConstantContext get constantContext;
 
-  Forest<Expression, Statement, Token, Arguments> get forest;
+  // TODO(ahe): Update type parameters.
+  Forest<dynamic, dynamic, Token, dynamic> get forest;
 
   Constructor lookupConstructor(Name name, {bool isSuper});
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index ce11b4f..49d9333 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -12,6 +12,8 @@
 ///
 /// For now, the [Location] is always a token.
 abstract class Forest<Expression, Statement, Location, Arguments> {
+  const Forest();
+
   Arguments arguments(List<Expression> positional, Location location,
       {covariant List types, covariant List named});
 
