Update Analyzer/CFE type resolution test to use AstBuildingForest

This updates the BodyBuilder to accept a Forest for either Kernel or Analyzer.
More work needs to be done to update the Forest type arguments specified in BodyBuilder.

Change-Id: I595535dc05572515a0b7cca5621de35146944ed3
Reviewed-on: https://dart-review.googlesource.com/54180
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
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});