| Index: pkg/analyzer/test/generated/parser_test.dart
|
| diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
|
| index 19b767dba7b90bdab46c12c5b0711d06370778bb..61ccf2207d4b460a35c8dd956ff6b3b00840e6c7 100644
|
| --- a/pkg/analyzer/test/generated/parser_test.dart
|
| +++ b/pkg/analyzer/test/generated/parser_test.dart
|
| @@ -2,8 +2,6 @@
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| -library analyzer.test.generated.parser_test;
|
| -
|
| import 'package:analyzer/dart/ast/ast.dart';
|
| import 'package:analyzer/dart/ast/standard_ast_factory.dart';
|
| import 'package:analyzer/dart/ast/token.dart';
|
| @@ -628,9 +626,9 @@ Function(int, String) v;
|
| expect(method.body, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_generic_comment_returnType() {
|
| + void test_parseClassMember_method_generic_comment_parameterType() {
|
| enableGenericMethodComments = true;
|
| - createParser('/*=T*/ m/*<T>*/() {}');
|
| + createParser('m/*<T>*/(dynamic /*=T*/ p) => null;');
|
| ClassMember member = parser.parseClassMember('C');
|
| expect(member, isNotNull);
|
| assertNoErrors();
|
| @@ -640,18 +638,24 @@ Function(int, String) v;
|
| expect(method.externalKeyword, isNull);
|
| expect(method.modifierKeyword, isNull);
|
| expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNotNull);
|
| - expect((method.returnType as TypeName).name.name, 'T');
|
| + expect(method.returnType, isNull);
|
| expect(method.name, isNotNull);
|
| expect(method.operatorKeyword, isNull);
|
| expect(method.typeParameters, isNotNull);
|
| - expect(method.parameters, isNotNull);
|
| +
|
| + FormalParameterList parameters = method.parameters;
|
| + expect(parameters, isNotNull);
|
| + expect(parameters.parameters, hasLength(1));
|
| + var parameter = parameters.parameters[0] as SimpleFormalParameter;
|
| + var parameterType = parameter.type as TypeName;
|
| + expect(parameterType.name.name, 'T');
|
| +
|
| expect(method.body, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_static_generic_comment_returnType() {
|
| + void test_parseClassMember_method_generic_comment_returnType() {
|
| enableGenericMethodComments = true;
|
| - createParser('static /*=T*/ m/*<T>*/() {}');
|
| + createParser('/*=T*/ m/*<T>*/() {}');
|
| ClassMember member = parser.parseClassMember('C');
|
| expect(member, isNotNull);
|
| assertNoErrors();
|
| @@ -659,7 +663,7 @@ Function(int, String) v;
|
| MethodDeclaration method = member;
|
| expect(method.documentationComment, isNull);
|
| expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNotNull);
|
| + expect(method.modifierKeyword, isNull);
|
| expect(method.propertyKeyword, isNull);
|
| expect(method.returnType, isNotNull);
|
| expect((method.returnType as TypeName).name.name, 'T');
|
| @@ -670,9 +674,9 @@ Function(int, String) v;
|
| expect(method.body, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_generic_comment_returnType_complex() {
|
| + void test_parseClassMember_method_generic_comment_returnType_bound() {
|
| enableGenericMethodComments = true;
|
| - createParser('dynamic /*=Map<int, T>*/ m/*<T>*/() => null;');
|
| + createParser('num/*=T*/ m/*<T extends num>*/() {}');
|
| ClassMember member = parser.parseClassMember('C');
|
| expect(member, isNotNull);
|
| assertNoErrors();
|
| @@ -682,28 +686,21 @@ Function(int, String) v;
|
| expect(method.externalKeyword, isNull);
|
| expect(method.modifierKeyword, isNull);
|
| expect(method.propertyKeyword, isNull);
|
| -
|
| - {
|
| - var returnType = method.returnType as TypeName;
|
| - expect(returnType, isNotNull);
|
| - expect(returnType.name.name, 'Map');
|
| -
|
| - List<TypeAnnotation> typeArguments = returnType.typeArguments.arguments;
|
| - expect(typeArguments, hasLength(2));
|
| - expect((typeArguments[0] as TypeName).name.name, 'int');
|
| - expect((typeArguments[1] as TypeName).name.name, 'T');
|
| - }
|
| -
|
| + expect((method.returnType as TypeName).name.name, 'T');
|
| expect(method.name, isNotNull);
|
| expect(method.operatorKeyword, isNull);
|
| expect(method.typeParameters, isNotNull);
|
| + TypeParameter tp = method.typeParameters.typeParameters[0];
|
| + expect(tp.name.name, 'T');
|
| + expect(tp.extendsKeyword, isNotNull);
|
| + expect((tp.bound as TypeName).name.name, 'num');
|
| expect(method.parameters, isNotNull);
|
| expect(method.body, isNotNull);
|
| }
|
|
|
| - void test_parseClassMember_method_generic_comment_parameterType() {
|
| + void test_parseClassMember_method_generic_comment_returnType_complex() {
|
| enableGenericMethodComments = true;
|
| - createParser('m/*<T>*/(dynamic /*=T*/ p) => null;');
|
| + createParser('dynamic /*=Map<int, T>*/ m/*<T>*/() => null;');
|
| ClassMember member = parser.parseClassMember('C');
|
| expect(member, isNotNull);
|
| assertNoErrors();
|
| @@ -713,41 +710,21 @@ Function(int, String) v;
|
| expect(method.externalKeyword, isNull);
|
| expect(method.modifierKeyword, isNull);
|
| expect(method.propertyKeyword, isNull);
|
| - expect(method.returnType, isNull);
|
| - expect(method.name, isNotNull);
|
| - expect(method.operatorKeyword, isNull);
|
| - expect(method.typeParameters, isNotNull);
|
|
|
| - FormalParameterList parameters = method.parameters;
|
| - expect(parameters, isNotNull);
|
| - expect(parameters.parameters, hasLength(1));
|
| - var parameter = parameters.parameters[0] as SimpleFormalParameter;
|
| - var parameterType = parameter.type as TypeName;
|
| - expect(parameterType.name.name, 'T');
|
| + {
|
| + var returnType = method.returnType as TypeName;
|
| + expect(returnType, isNotNull);
|
| + expect(returnType.name.name, 'Map');
|
|
|
| - expect(method.body, isNotNull);
|
| - }
|
| + List<TypeAnnotation> typeArguments = returnType.typeArguments.arguments;
|
| + expect(typeArguments, hasLength(2));
|
| + expect((typeArguments[0] as TypeName).name.name, 'int');
|
| + expect((typeArguments[1] as TypeName).name.name, 'T');
|
| + }
|
|
|
| - void test_parseClassMember_method_generic_comment_returnType_bound() {
|
| - enableGenericMethodComments = true;
|
| - createParser('num/*=T*/ m/*<T extends num>*/() {}');
|
| - ClassMember member = parser.parseClassMember('C');
|
| - expect(member, isNotNull);
|
| - assertNoErrors();
|
| - expect(member, new isInstanceOf<MethodDeclaration>());
|
| - MethodDeclaration method = member;
|
| - expect(method.documentationComment, isNull);
|
| - expect(method.externalKeyword, isNull);
|
| - expect(method.modifierKeyword, isNull);
|
| - expect(method.propertyKeyword, isNull);
|
| - expect((method.returnType as TypeName).name.name, 'T');
|
| expect(method.name, isNotNull);
|
| expect(method.operatorKeyword, isNull);
|
| expect(method.typeParameters, isNotNull);
|
| - TypeParameter tp = method.typeParameters.typeParameters[0];
|
| - expect(tp.name.name, 'T');
|
| - expect(tp.extendsKeyword, isNotNull);
|
| - expect((tp.bound as TypeName).name.name, 'num');
|
| expect(method.parameters, isNotNull);
|
| expect(method.body, isNotNull);
|
| }
|
| @@ -1072,6 +1049,27 @@ void Function<A>(core.List<core.int> x) m() => null;
|
| expect(method.body, isNotNull);
|
| }
|
|
|
| + void test_parseClassMember_method_static_generic_comment_returnType() {
|
| + enableGenericMethodComments = true;
|
| + createParser('static /*=T*/ m/*<T>*/() {}');
|
| + ClassMember member = parser.parseClassMember('C');
|
| + expect(member, isNotNull);
|
| + assertNoErrors();
|
| + expect(member, new isInstanceOf<MethodDeclaration>());
|
| + MethodDeclaration method = member;
|
| + expect(method.documentationComment, isNull);
|
| + expect(method.externalKeyword, isNull);
|
| + expect(method.modifierKeyword, isNotNull);
|
| + expect(method.propertyKeyword, isNull);
|
| + expect(method.returnType, isNotNull);
|
| + expect((method.returnType as TypeName).name.name, 'T');
|
| + expect(method.name, isNotNull);
|
| + expect(method.operatorKeyword, isNull);
|
| + expect(method.typeParameters, isNotNull);
|
| + expect(method.parameters, isNotNull);
|
| + expect(method.body, isNotNull);
|
| + }
|
| +
|
| void test_parseClassMember_method_trailing_commas() {
|
| createParser('void f(int x, int y,) {}');
|
| ClassMember member = parser.parseClassMember('C');
|
| @@ -2861,6 +2859,18 @@ class Foo {
|
| "void f(final x()) {}", [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
|
| }
|
|
|
| + void test_functionTypedParameter_incomplete1() {
|
| + // This caused an exception at one point.
|
| + parseCompilationUnit("void f(int Function(", [
|
| + ParserErrorCode.MISSING_FUNCTION_BODY,
|
| + ParserErrorCode.MISSING_CLOSING_PARENTHESIS,
|
| + ParserErrorCode.EXPECTED_EXECUTABLE,
|
| + ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE,
|
| + ParserErrorCode.EXPECTED_TOKEN,
|
| + ParserErrorCode.EXPECTED_TOKEN
|
| + ]);
|
| + }
|
| +
|
| void test_functionTypedParameter_var() {
|
| parseCompilationUnit(
|
| "void f(var x()) {}", [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
|
| @@ -14551,22 +14561,6 @@ enum E {
|
| expect(declaration.propertyKeyword, isNotNull);
|
| }
|
|
|
| - void test_parseFunctionDeclaration_setter() {
|
| - createParser('/// Doc\nT set p(v) {}');
|
| - FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| - expect(declaration, isNotNull);
|
| - assertNoErrors();
|
| - expectCommentText(declaration.documentationComment, '/// Doc');
|
| - expect((declaration.returnType as TypeName).name.name, 'T');
|
| - expect(declaration.name, isNotNull);
|
| - FunctionExpression expression = declaration.functionExpression;
|
| - expect(expression, isNotNull);
|
| - expect(expression.body, isNotNull);
|
| - expect(expression.typeParameters, isNull);
|
| - expect(expression.parameters, isNotNull);
|
| - expect(declaration.propertyKeyword, isNotNull);
|
| - }
|
| -
|
| void test_parseFunctionDeclaration_getter_generic_comment_returnType() {
|
| enableGenericMethodComments = true;
|
| createParser('/*=T*/ f/*<S, T>*/(/*=S*/ s) => null;');
|
| @@ -14585,6 +14579,22 @@ enum E {
|
| expect(functionExpression.body, isNotNull);
|
| }
|
|
|
| + void test_parseFunctionDeclaration_setter() {
|
| + createParser('/// Doc\nT set p(v) {}');
|
| + FunctionDeclaration declaration = parseFullCompilationUnitMember();
|
| + expect(declaration, isNotNull);
|
| + assertNoErrors();
|
| + expectCommentText(declaration.documentationComment, '/// Doc');
|
| + expect((declaration.returnType as TypeName).name.name, 'T');
|
| + expect(declaration.name, isNotNull);
|
| + FunctionExpression expression = declaration.functionExpression;
|
| + expect(expression, isNotNull);
|
| + expect(expression.body, isNotNull);
|
| + expect(expression.typeParameters, isNull);
|
| + expect(expression.parameters, isNotNull);
|
| + expect(declaration.propertyKeyword, isNotNull);
|
| + }
|
| +
|
| @failingTest
|
| void test_parseGenericTypeAlias_noTypeParameters() {
|
| createParser('F = int Function(int);');
|
|
|