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});