Add preliminary support for method declarations to AstBuilder.

R=scheglov@google.com

Review-Url: https://codereview.chromium.org/2706293014 .
This commit is contained in:
Paul Berry 2017-02-28 15:05:31 -08:00
parent f55f111d7a
commit fb1bc6ad83
2 changed files with 46 additions and 148 deletions

View file

@ -58,19 +58,12 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
}
@override
@failingTest
@assertFailingTest
void test_parseAwaitExpression_asStatement_inAsync() {
// TODO(paulberry): Add support for async
super.test_parseAwaitExpression_asStatement_inAsync();
}
@override
@failingTest
void test_parseAwaitExpression_asStatement_inSync() {
// TODO(paulberry): Add support for method declarations
super.test_parseAwaitExpression_asStatement_inSync();
}
@override
@failingTest
void test_parseClassMember_constructor_withInitializers() {
@ -134,27 +127,6 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
super.test_parseClassMember_getter_functionType();
}
@override
@failingTest
void test_parseClassMember_getter_void() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_getter_void();
}
@override
@failingTest
void test_parseClassMember_method_external() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_external();
}
@override
@failingTest
void test_parseClassMember_method_external_withTypeAndArgs() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_external_withTypeAndArgs();
}
@override
@failingTest
void test_parseClassMember_method_generic_comment_noReturnType() {
@ -183,69 +155,6 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
super.test_parseClassMember_method_generic_comment_void();
}
@override
@failingTest
void test_parseClassMember_method_generic_noReturnType() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_generic_noReturnType();
}
@override
@failingTest
void test_parseClassMember_method_generic_returnType() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_generic_returnType();
}
@override
@failingTest
void test_parseClassMember_method_generic_void() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_generic_void();
}
@override
@failingTest
void test_parseClassMember_method_get_noType() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_get_noType();
}
@override
@failingTest
void test_parseClassMember_method_get_type() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_get_type();
}
@override
@failingTest
void test_parseClassMember_method_get_void() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_get_void();
}
@override
@failingTest
void test_parseClassMember_method_operator_noType() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_operator_noType();
}
@override
@failingTest
void test_parseClassMember_method_operator_type() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_operator_type();
}
@override
@failingTest
void test_parseClassMember_method_operator_void() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_operator_void();
}
@override
@failingTest
void test_parseClassMember_method_returnType_functionType() {
@ -253,41 +162,6 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
super.test_parseClassMember_method_returnType_functionType();
}
@override
@failingTest
void test_parseClassMember_method_returnType_parameterized() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_returnType_parameterized();
}
@override
@failingTest
void test_parseClassMember_method_set_noType() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_set_noType();
}
@override
@failingTest
void test_parseClassMember_method_set_type() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_set_type();
}
@override
@failingTest
void test_parseClassMember_method_set_void() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_set_void();
}
@override
@failingTest
void test_parseClassMember_method_trailing_commas() {
// TODO(paulberry): Add support for method declarations
super.test_parseClassMember_method_trailing_commas();
}
@override
@failingTest
void test_parseClassMember_operator_functionType() {
@ -354,7 +228,7 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
@override
@failingTest
void test_parseGetter_nonStatic() {
// TODO(paulberry): Add support for method declarations
// TODO(paulberry): handle doc comments
super.test_parseGetter_nonStatic();
}
@ -389,7 +263,7 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
@override
@failingTest
void test_parseSetter_nonStatic() {
// TODO(paulberry): Add support for method declarations
// TODO(paulberry): handle doc comments
super.test_parseSetter_nonStatic();
}

View file

@ -1137,12 +1137,11 @@ class AstBuilder extends ScopeListener {
List<ConstructorInitializer> initializers = null; // TODO(paulberry)
Token separator = null; // TODO(paulberry)
FormalParameterList parameters = pop();
/* TypeParameterList typeParameters = */ pop(); // TODO(paulberry)
TypeParameterList typeParameters = pop(); // TODO(paulberry)
var name = pop();
// TODO(paulberry)
// analyzer.Token propertyKeyword = toAnalyzerToken(getOrSet);
/* TypeAnnotation returnType = */ pop(); // TODO(paulberry)
Token operatorKeyword = null; // TODO(paulberry)
TypeAnnotation returnType = pop(); // TODO(paulberry)
Token modifierKeyword = null; // TODO(paulberry)
Token externalKeyword = null;
Token constKeyword = null;
Token factoryKeyword = null;
@ -1170,23 +1169,48 @@ class AstBuilder extends ScopeListener {
SimpleIdentifier returnType2;
Token period;
SimpleIdentifier name2;
void unnamedConstructor() {
push(ast.constructorDeclaration(
comment,
metadata,
toAnalyzerToken(externalKeyword),
toAnalyzerToken(constKeyword),
toAnalyzerToken(factoryKeyword),
returnType2,
toAnalyzerToken(period),
name2,
parameters,
toAnalyzerToken(separator),
initializers,
redirectedConstructor,
body));
}
void method() {
push(ast.methodDeclaration(
comment,
metadata,
toAnalyzerToken(externalKeyword),
toAnalyzerToken(modifierKeyword),
returnType,
toAnalyzerToken(getOrSet),
toAnalyzerToken(operatorKeyword),
name,
typeParameters,
parameters,
body));
}
if (name is SimpleIdentifier) {
returnType2 = name;
if (name.name == className) {
unnamedConstructor();
} else {
method();
}
} else {
throw new UnimplementedError();
}
push(ast.constructorDeclaration(
comment,
metadata,
toAnalyzerToken(externalKeyword),
toAnalyzerToken(constKeyword),
toAnalyzerToken(factoryKeyword),
returnType2,
toAnalyzerToken(period),
name2,
parameters,
toAnalyzerToken(separator),
initializers,
redirectedConstructor,
body));
}
@override