Add generator for unlinked names
Change-Id: I5841b3ff86133eedd14d8bef26c3d1b2dd78f34d
Reviewed-on: https://dart-review.googlesource.com/57703
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
diff --git a/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart b/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart
index 54af172..cc8d11d 100644
--- a/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart
+++ b/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart
@@ -7,19 +7,20 @@
import 'package:analyzer/src/fasta/ast_building_factory.dart';
import 'package:front_end/src/fasta/kernel/expression_generator.dart' as fasta;
import 'package:front_end/src/fasta/kernel/expression_generator_helper.dart';
-import 'package:front_end/src/fasta/kernel/forest.dart';
+import 'package:front_end/src/fasta/kernel/forest.dart' as fasta;
import 'package:front_end/src/scanner/token.dart';
import 'package:kernel/ast.dart' show DartType, Initializer, Name, Procedure;
abstract class AnalyzerExpressionGenerator
- implements Generator<Expression, Statement, Arguments> {
+ implements fasta.Generator<Expression, Statement, Arguments> {
final ExpressionGeneratorHelper<Expression, Statement, Arguments> helper;
final AstFactory astFactory;
AnalyzerExpressionGenerator(this.helper, this.astFactory);
- Forest<Expression, Statement, Token, Arguments> get forest => helper.forest;
+ fasta.Forest<Expression, Statement, Token, Arguments> get forest =>
+ helper.forest;
@override
// TODO: implement isInitializer
@@ -146,6 +147,46 @@
}
}
+class AnalyzerUnlinkedNameGenerator extends AnalyzerExpressionGenerator
+ with
+ fasta.ErroneousExpressionGenerator<Expression, Statement, Arguments>,
+ fasta.UnlinkedGenerator<Expression, Statement, Arguments> {
+ @override
+ final Token token;
+
+ @override
+ final fasta.UnlinkedDeclaration declaration;
+
+ AnalyzerUnlinkedNameGenerator(
+ ExpressionGeneratorHelper<dynamic, dynamic, dynamic> helper,
+ AstFactory astFactory,
+ this.token,
+ this.declaration)
+ : super(helper, astFactory);
+
+ @override
+ DartType buildErroneousTypeNotAPrefix(fasta.Identifier suffix) {
+ // TODO: implement buildErroneousTypeNotAPrefix
+ throw new UnimplementedError();
+ }
+
+ @override
+ Expression buildError(Arguments arguments,
+ {bool isGetter: false, bool isSetter: false, int offset}) {
+ // TODO: implement buildError
+ throw new UnimplementedError();
+ }
+
+ @override
+ Expression buildSimpleRead() => astFactory.simpleIdentifier(token);
+
+ @override
+ void printOn(StringSink sink) {
+ sink.write(", name: ");
+ sink.write(name.name);
+ }
+}
+
class AnalyzerUnresolvedNameGenerator extends AnalyzerExpressionGenerator
with
fasta.ErroneousExpressionGenerator<Expression, Statement, Arguments>,
diff --git a/pkg/analyzer/lib/src/fasta/ast_building_factory.dart b/pkg/analyzer/lib/src/fasta/ast_building_factory.dart
index 9ffd99a..8cd6406 100644
--- a/pkg/analyzer/lib/src/fasta/ast_building_factory.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_building_factory.dart
@@ -614,8 +614,8 @@
ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
Token token,
UnlinkedDeclaration declaration) {
- // TODO(brianwilkerson) Implement this.
- throw new UnimplementedError();
+ return new AnalyzerUnlinkedNameGenerator(
+ helper, astFactory, token, declaration);
}
@override
diff --git a/pkg/analyzer/test/generated/parser_forest_test.dart b/pkg/analyzer/test/generated/parser_forest_test.dart
index be1221a..f3cd289 100644
--- a/pkg/analyzer/test/generated/parser_forest_test.dart
+++ b/pkg/analyzer/test/generated/parser_forest_test.dart
@@ -22,6 +22,11 @@
});
}
+void dart2Failure() {
+ fail(
+ 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+}
+
@reflectiveTest
class ClassMemberParserTest_Forest extends FastaBodyBuilderTestCase
with ClassMemberParserTestMixin {
@@ -627,8 +632,7 @@
@failingTest
void test_logicalAndExpression() {
super.test_logicalAndExpression();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -649,22 +653,19 @@
@failingTest
void test_logicalOrExpression() {
super.test_logicalOrExpression();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_logicalOrExpression_precedence_logicalAnd_left() {
super.test_logicalOrExpression_precedence_logicalAnd_left();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_logicalOrExpression_precedence_logicalAnd_right() {
super.test_logicalOrExpression_precedence_logicalAnd_right();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -683,13 +684,6 @@
}
@failingTest
- void test_multipleLabels_statement() {
- super.test_multipleLabels_statement();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
- }
-
- @failingTest
void test_multiplicativeExpression_normal() {
super.test_multiplicativeExpression_normal();
}
@@ -1779,8 +1773,7 @@
@failingTest
void test_missingAssignableSelector_identifiersAssigned() {
super.test_missingAssignableSelector_identifiersAssigned();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -1806,8 +1799,7 @@
@failingTest
void test_missingAssignableSelector_superPropertyAccessAssigned() {
super.test_missingAssignableSelector_superPropertyAccessAssigned();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -2671,11 +2663,6 @@
}
@failingTest
- void test_parseAwaitExpression() {
- super.test_parseAwaitExpression();
- }
-
- @failingTest
void test_parseBitwiseAndExpression_normal() {
super.test_parseBitwiseAndExpression_normal();
}
@@ -2833,8 +2820,7 @@
@failingTest
void test_parseConditionalExpression() {
super.test_parseConditionalExpression();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -3086,15 +3072,13 @@
@failingTest
void test_parseLogicalAndExpression() {
super.test_parseLogicalAndExpression();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_parseLogicalOrExpression() {
super.test_parseLogicalOrExpression();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -3211,8 +3195,7 @@
@failingTest
void test_parsePrimaryExpression_const() {
super.test_parsePrimaryExpression_const();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -3396,16 +3379,6 @@
}
@failingTest
- void test_parseThrowExpression() {
- super.test_parseThrowExpression();
- }
-
- @failingTest
- void test_parseThrowExpressionWithoutCascade() {
- super.test_parseThrowExpressionWithoutCascade();
- }
-
- @failingTest
void test_parseUnaryExpression_decrement_normal() {
super.test_parseUnaryExpression_decrement_normal();
}
@@ -3451,11 +3424,6 @@
}
@failingTest
- void test_parseUnaryExpression_not_normal() {
- super.test_parseUnaryExpression_not_normal();
- }
-
- @failingTest
void test_parseUnaryExpression_not_super() {
super.test_parseUnaryExpression_not_super();
}
@@ -4061,15 +4029,13 @@
@failingTest
void test_conditionalExpression_missingElse() {
super.test_conditionalExpression_missingElse();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_conditionalExpression_missingThen() {
super.test_conditionalExpression_missingThen();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -4160,8 +4126,7 @@
@failingTest
void test_incomplete_conditionalExpression() {
super.test_incomplete_conditionalExpression();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -4342,22 +4307,19 @@
@failingTest
void test_logicalAndExpression_missing_LHS() {
super.test_logicalAndExpression_missing_LHS();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_logicalAndExpression_missing_LHS_RHS() {
super.test_logicalAndExpression_missing_LHS_RHS();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_logicalAndExpression_missing_RHS() {
super.test_logicalAndExpression_missing_RHS();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -4373,36 +4335,31 @@
@failingTest
void test_logicalOrExpression_missing_LHS() {
super.test_logicalOrExpression_missing_LHS();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_logicalOrExpression_missing_LHS_RHS() {
super.test_logicalOrExpression_missing_LHS_RHS();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_logicalOrExpression_missing_RHS() {
super.test_logicalOrExpression_missing_RHS();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_logicalOrExpression_precedence_logicalAnd_left() {
super.test_logicalOrExpression_precedence_logicalAnd_left();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
void test_logicalOrExpression_precedence_logicalAnd_right() {
super.test_logicalOrExpression_precedence_logicalAnd_right();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
+ dart2Failure();
}
@failingTest
@@ -4867,11 +4824,6 @@
}
@failingTest
- void test_parseReturnStatement_value() {
- super.test_parseReturnStatement_value();
- }
-
- @failingTest
void test_parseStatement_function_noReturnType() {
super.test_parseStatement_function_noReturnType();
}
@@ -5077,31 +5029,6 @@
}
@failingTest
- void test_parseAssertStatement() {
- super.test_parseAssertStatement();
- }
-
- @failingTest
- void test_parseAssertStatement_messageLowPrecedence() {
- super.test_parseAssertStatement_messageLowPrecedence();
- }
-
- @failingTest
- void test_parseAssertStatement_messageString() {
- super.test_parseAssertStatement_messageString();
- }
-
- @failingTest
- void test_parseAssertStatement_trailingComma_message() {
- super.test_parseAssertStatement_trailingComma_message();
- }
-
- @failingTest
- void test_parseAssertStatement_trailingComma_noMessage() {
- super.test_parseAssertStatement_trailingComma_noMessage();
- }
-
- @failingTest
void test_parseBreakStatement_noLabel() {
super.test_parseBreakStatement_noLabel();
}
@@ -5112,11 +5039,6 @@
}
@failingTest
- void test_parseDoStatement() {
- super.test_parseDoStatement();
- }
-
- @failingTest
void test_parseForStatement_each_await() {
super.test_parseForStatement_each_await();
}
@@ -5217,28 +5139,11 @@
}
@failingTest
- void test_parseIfStatement_else_block() {
- super.test_parseIfStatement_else_block();
- }
-
- @failingTest
- void test_parseIfStatement_else_emptyStatements() {
- super.test_parseIfStatement_else_emptyStatements();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
- }
-
- @failingTest
void test_parseIfStatement_else_statement() {
super.test_parseIfStatement_else_statement();
}
@failingTest
- void test_parseIfStatement_noElse_block() {
- super.test_parseIfStatement_noElse_block();
- }
-
- @failingTest
void test_parseIfStatement_noElse_statement() {
super.test_parseIfStatement_noElse_statement();
}
@@ -5403,18 +5308,6 @@
}
@failingTest
- void test_parseStatement_multipleLabels() {
- super.test_parseStatement_multipleLabels();
- fail(
- 'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
- }
-
- @failingTest
- void test_parseStatement_noLabels() {
- super.test_parseStatement_noLabels();
- }
-
- @failingTest
void test_parseStatement_singleLabel() {
super.test_parseStatement_singleLabel();
}
@@ -5570,11 +5463,6 @@
}
@failingTest
- void test_parseWhileStatement() {
- super.test_parseWhileStatement();
- }
-
- @failingTest
void test_parseYieldStatement_each() {
super.test_parseYieldStatement_each();
}
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 350f96f..439c137 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -292,7 +292,7 @@
@override
Expression toValue(Object node) {
if (node is Generator) {
- return toExpression(node.buildSimpleRead());
+ return node.buildSimpleRead();
} else if (node is Expression) {
return node;
} else if (node is PrefixBuilder) {