Restore type arguments on Forest
Change-Id: I3bdce8f470e31e4b95a028842a3f188102b74ba4
Reviewed-on: https://dart-review.googlesource.com/54386
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
diff --git a/pkg/analyzer/test/generated/parser_forest_test.dart b/pkg/analyzer/test/generated/parser_forest_test.dart
index 7b9bc03..8046271 100644
--- a/pkg/analyzer/test/generated/parser_forest_test.dart
+++ b/pkg/analyzer/test/generated/parser_forest_test.dart
@@ -60,6 +60,15 @@
expect(binaryExpression.rightOperand, isNotNull);
}
+ void test_int_literal() {
+ Expression expression = parseAdditiveExpression('1');
+ expect(expression, isNotNull);
+ // assertNoErrors();
+ expect(expression is IntegerLiteral, isTrue);
+ IntegerLiteral literal = expression;
+ expect(literal.value, equals(1));
+ }
+
@failingTest
void test_namedArgument() {
super.test_namedArgument();
@@ -1220,7 +1229,7 @@
false /* strong mode */,
));
- BodyBuilder builder = new BodyBuilder(
+ BodyBuilder builder = new AstBodyBuilder(
library,
procedureBuilder,
library.scope,
@@ -1289,3 +1298,34 @@
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
+
+// TODO(ahe): Remove this class when we no longer need to override `forest`.
+class AstBodyBuilder extends BodyBuilder {
+ AstBodyBuilder(
+ library,
+ member,
+ scope,
+ formalParameterScope,
+ hierarchy,
+ coreTypes,
+ classBuilder,
+ isInstanceMember,
+ uri,
+ typeInferrer,
+ forestInternal)
+ : super(
+ library,
+ member,
+ scope,
+ formalParameterScope,
+ hierarchy,
+ coreTypes,
+ classBuilder,
+ isInstanceMember,
+ uri,
+ typeInferrer,
+ forestInternal);
+
+ // ignore: STRONG_MODE_INVALID_METHOD_OVERRIDE
+ dynamic get forest => super.forestInternal;
+}
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 c8c3b63..6862dd6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -88,7 +88,12 @@
// TODO(ahe): Remove this and ensure all nodes have a location.
const noLocation = null;
-class BodyBuilder<Arguments> extends ScopeListener<JumpTarget>
+class BodyBuilder<
+ OpaqueExpression, // TODO(ahe): Rename to Expression when we've removed
+ // all references to kernel's Expression.
+ OpaqueStatement, // TODO(ahe): Rename to Statement when we've removed
+ // all references to kernel's Statement.
+ Arguments> extends ScopeListener<JumpTarget>
implements BuilderHelper<Arguments> {
@override
final KernelLibraryBuilder library;
@@ -182,9 +187,7 @@
/// and where that was.
Map<String, int> initializedFields;
- // TODO(ahe): Update type parameters.
- @override
- Forest<dynamic, dynamic, Token, dynamic> forest;
+ final Forest forestInternal;
BodyBuilder(
KernelLibraryBuilder library,
@@ -197,7 +200,7 @@
this.isInstanceMember,
this.uri,
this._typeInferrer,
- [this.forest = const Fangorn()])
+ [this.forestInternal = const Fangorn()])
: enclosingScope = scope,
library = library,
enableNative =
@@ -211,6 +214,12 @@
typePromoter = _typeInferrer.typePromoter,
super(scope);
+ Forest<
+ Expression, // TODO(ahe): Should be OpaqueExpression.
+ OpaqueStatement,
+ Token,
+ Arguments> get forest => forestInternal;
+
bool get hasParserError => recoverableErrors.isNotEmpty;
bool get inConstructor {