Parse InstanceCreationExpression with Fasta.

R=paulberry@google.com, ahe@google.com
BUG=

Review-Url: https://codereview.chromium.org/2727753002 .
This commit is contained in:
Konstantin Shcheglov 2017-03-01 13:04:46 -08:00
parent 270a6900f6
commit 86b5a088ad
9 changed files with 69 additions and 106 deletions

View file

@ -560,18 +560,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
super.test_parseFunctionExpression_typeParameterComments();
}
@override
@failingTest
void test_parseInstanceCreationExpression_qualifiedType() {
super.test_parseInstanceCreationExpression_qualifiedType();
}
@override
@failingTest
void test_parseInstanceCreationExpression_qualifiedType_named() {
super.test_parseInstanceCreationExpression_qualifiedType_named();
}
@override
@failingTest
void
@ -580,14 +568,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
.test_parseInstanceCreationExpression_qualifiedType_named_typeParameterComment();
}
@override
@failingTest
void
test_parseInstanceCreationExpression_qualifiedType_named_typeParameters() {
super
.test_parseInstanceCreationExpression_qualifiedType_named_typeParameters();
}
@override
@failingTest
void
@ -596,24 +576,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
.test_parseInstanceCreationExpression_qualifiedType_typeParameterComment();
}
@override
@failingTest
void test_parseInstanceCreationExpression_qualifiedType_typeParameters() {
super.test_parseInstanceCreationExpression_qualifiedType_typeParameters();
}
@override
@failingTest
void test_parseInstanceCreationExpression_type() {
super.test_parseInstanceCreationExpression_type();
}
@override
@failingTest
void test_parseInstanceCreationExpression_type_named() {
super.test_parseInstanceCreationExpression_type_named();
}
@override
@failingTest
void test_parseInstanceCreationExpression_type_named_typeParameterComment() {
@ -621,24 +583,12 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
.test_parseInstanceCreationExpression_type_named_typeParameterComment();
}
@override
@failingTest
void test_parseInstanceCreationExpression_type_named_typeParameters() {
super.test_parseInstanceCreationExpression_type_named_typeParameters();
}
@override
@failingTest
void test_parseInstanceCreationExpression_type_typeParameterComment() {
super.test_parseInstanceCreationExpression_type_typeParameterComment();
}
@override
@failingTest
void test_parseInstanceCreationExpression_type_typeParameters() {
super.test_parseInstanceCreationExpression_type_typeParameters();
}
@override
@failingTest
void test_parseInstanceCreationExpression_type_typeParameters_nullable() {
@ -723,12 +673,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
super.test_parseMapLiteralEntry_string();
}
@override
@failingTest
void test_parseNewExpression() {
super.test_parseNewExpression();
}
@override
@failingTest
void
@ -781,12 +725,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
super.test_parsePrimaryExpression_mapLiteral_typed_genericComment();
}
@override
@failingTest
void test_parsePrimaryExpression_new() {
super.test_parsePrimaryExpression_new();
}
@override
@failingTest
void test_parseRelationalExpression_as_functionType_noReturnType() {
@ -1500,13 +1438,6 @@ class TopLevelParserTest_Fasta extends FastaParserTestCase
super.test_parseClassDeclaration_typeAlias_withB();
}
@override
@failingTest
void test_parseCompilationUnit_abstractAsPrefix_parameterized() {
// TODO(paulberry): Unhandled event: ConstructorReference
super.test_parseCompilationUnit_abstractAsPrefix_parameterized();
}
@override
@failingTest
void test_parseCompilationUnit_builtIn_asFunctionName() {
@ -1537,13 +1468,6 @@ class TopLevelParserTest_Fasta extends FastaParserTestCase
super.test_parseCompilationUnit_exportAsPrefix_parameterized();
}
@override
@failingTest
void test_parseCompilationUnit_operatorAsPrefix_parameterized() {
// TODO(paulberry): Unhandled event: ConstructorReference
super.test_parseCompilationUnit_operatorAsPrefix_parameterized();
}
@override
@failingTest
void test_parseCompilationUnit_script() {
@ -1558,13 +1482,6 @@ class TopLevelParserTest_Fasta extends FastaParserTestCase
super.test_parseCompilationUnit_typedefAsPrefix();
}
@override
@failingTest
void test_parseCompilationUnitMember_abstractAsPrefix() {
// TODO(paulberry): Unhandled event: ConstructorReference
super.test_parseCompilationUnitMember_abstractAsPrefix();
}
@override
@failingTest
void

View file

@ -4976,11 +4976,11 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A.B()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
expect(type, isNotNull);
expect(type.name.name, 'A.B');
expect(type.typeArguments, isNull);
expect(name.period, isNull);
expect(name.name, isNull);
@ -4993,7 +4993,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A.B.c()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5012,7 +5012,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A.B/*<E>*/.c()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5030,7 +5030,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A.B<E>.c()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5049,7 +5049,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A.B/*<E>*/()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5066,7 +5066,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A.B<E>()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5083,7 +5083,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5095,13 +5095,12 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
}
void test_parseInstanceCreationExpression_type_named() {
enableGenericMethodComments = true;
Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
InstanceCreationExpression expression =
parseInstanceCreationExpression('A.c()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5119,7 +5118,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A/*<B>*/.c()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5136,7 +5135,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A<B>.c()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5154,7 +5153,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A/*<B>*/()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5171,7 +5170,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A<B>()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;
@ -5189,7 +5188,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
parseInstanceCreationExpression('A<B?>()', token);
expect(expression, isNotNull);
assertNoErrors();
expect(expression.keyword, token);
expect(expression.keyword.keyword, Keyword.NEW);
ConstructorName name = expression.constructorName;
expect(name, isNotNull);
TypeName type = name.type;

View file

@ -409,6 +409,10 @@ class ElementListener extends Listener {
pushNode(new Send(first, last));
}
@override
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
}
@override
void handleNoType(Token token) {
pushNode(null);

View file

@ -68,6 +68,32 @@ class AstBuilder extends ScopeListener {
push(token);
}
@override
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
debugEvent("NoConstructorReferenceContinuationAfterTypeArguments");
push(NullValue.ConstructorReferenceContinuationAfterTypeArguments);
}
@override
void endConstructorReference(
Token start, Token periodBeforeName, Token endToken) {
debugEvent("ConstructorReference");
SimpleIdentifier constructorName = pop();
TypeArgumentList typeArguments = pop();
Identifier typeNameIdentifier = pop();
push(ast.constructorName(ast.typeName(typeNameIdentifier, typeArguments),
toAnalyzerToken(periodBeforeName), constructorName));
}
@override
void handleNewExpression(Token token) {
debugEvent("NewExpression");
MethodInvocation arguments = pop();
ConstructorName constructorName = pop();
push(ast.instanceCreationExpression(
toAnalyzerToken(token), constructorName, arguments.argumentList));
}
@override
void handleParenthesizedExpression(BeginGroupToken token) {
debugEvent("ParenthesizedExpression");

View file

@ -842,6 +842,10 @@ class Listener {
logEvent("NoExpression");
}
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
logEvent("NoConstructorReferenceContinuationAfterTypeArguments");
}
void handleNoType(Token token) {
logEvent("NoType");
}

View file

@ -1954,6 +1954,8 @@ class Parser {
period = token;
token = parseIdentifier(token.next,
IdentifierContext.constructorReferenceContinuationAfterTypeArguments);
} else {
listener.handleNoConstructorReferenceContinuationAfterTypeArguments(token);
}
listener.endConstructorReference(start, period, token);
return token;

View file

@ -107,6 +107,11 @@ class DietListener extends StackListener {
debugEvent("NoTypeArguments");
}
@override
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
debugEvent("NoConstructorReferenceContinuationAfterTypeArguments");
}
@override
void handleNoType(Token token) {
debugEvent("NoType");

View file

@ -26,6 +26,7 @@ enum NullValue {
CascadeReceiver,
Combinators,
ConditionalUris,
ConstructorReferenceContinuationAfterTypeArguments,
ContinueTarget,
Expression,
FieldInitializer,
@ -153,6 +154,11 @@ abstract class StackListener extends Listener {
push(NullValue.TypeVariables);
}
@override
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
debugEvent("NoConstructorReferenceContinuationAfterTypeArguments");
}
@override
void handleNoType(Token token) {
debugEvent("NoType");

View file

@ -10,7 +10,7 @@
accessors: Crash
await: Fail
classes: Crash
cycles: Crash
cycles: Fail
default_values: Crash
expressions: Crash
fibonacci: Crash
@ -20,16 +20,16 @@ function_type_recovery: Crash
functions: Crash
implicit_this: Crash
invocations: Fail
map: Crash
map: Fail
mixin: Crash
operators: Crash
redirecting_constructor: Crash
redirecting_constructor: Fail
statements: Crash
super_rasta_copy: Crash
top_level_accessors: Crash
typedef: Crash
rasta/abstract_constructor: Crash
rasta/abstract_constructor: Fail
rasta/bad_constructor_redirection: Crash
rasta/bad_continue: Crash
rasta/bad_default_constructor: Crash
@ -41,7 +41,7 @@ rasta/bad_setter_initializer: Crash
rasta/bad_unicode: Fail
rasta/breaking_bad: Crash
rasta/cascades: Crash
rasta/class_hierarchy: Crash
rasta/class_hierarchy: Fail
rasta/class_member: Crash
rasta/constant_get_and_invoke: Crash
rasta/deferred_lib: Fail
@ -51,12 +51,12 @@ rasta/export: Fail
rasta/external_factory_redirection: Crash
rasta/foo: Fail
rasta/for_loop: Crash
rasta/generic_factory: Crash
rasta/generic_factory: Fail
rasta/issue_000001: Crash
rasta/issue_000002: Crash
rasta/issue_000004: Crash
rasta/issue_000006: Crash
rasta/issue_000007: Crash
rasta/issue_000007: Fail
rasta/issue_000008: Crash
rasta/issue_000011: Crash
rasta/issue_000012: Crash
@ -107,7 +107,7 @@ rasta/try_label: Crash
rasta/type_literals: Crash
rasta/type_with_parse_error: Fail
rasta/typedef: Crash
rasta/unresolved: Crash
rasta/unresolved: Fail
rasta/unresolved_constructor: Crash
rasta/unresolved_for_in: Crash
rasta/unresolved_recovery: Fail