| Index: pkg/analyzer/test/src/summary/summary_test.dart
|
| diff --git a/pkg/analyzer/test/src/summary/summary_test.dart b/pkg/analyzer/test/src/summary/summary_test.dart
|
| index e6107e4d2f1516804301669bb3d024c2b67773aa..bbaad19ebfea4abe2bfd51b62ceffa89c53e998f 100644
|
| --- a/pkg/analyzer/test/src/summary/summary_test.dart
|
| +++ b/pkg/analyzer/test/src/summary/summary_test.dart
|
| @@ -4,8 +4,6 @@
|
|
|
| library analyzer.test.src.summary.summary_test;
|
|
|
| -import 'dart:typed_data';
|
| -
|
| import 'package:analyzer/src/generated/element.dart';
|
| import 'package:analyzer/src/generated/engine.dart';
|
| import 'package:analyzer/src/generated/java_engine_io.dart';
|
| @@ -760,6 +758,7 @@ class E {}
|
| UnlinkedExecutable executable =
|
| findExecutable('', cls: serializeClassText('class C { C(); }'));
|
| expect(executable.kind, UnlinkedExecutableKind.constructor);
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| }
|
|
|
| test_constructor_anonymous() {
|
| @@ -819,6 +818,10 @@ class E {}
|
| UnlinkedExecutable executable = findExecutable('',
|
| cls: serializeClassText('class C { C(this.x()); Function x; }'));
|
| UnlinkedParam parameter = executable.parameters[0];
|
| + // Since the parameter is function-typed it is considered to have an
|
| + // explicit type, even though that explicit type itself has an implicit
|
| + // return type.
|
| + expect(parameter.hasImplicitType, isFalse);
|
| checkDynamicTypeRef(parameter.type);
|
| }
|
|
|
| @@ -852,6 +855,7 @@ class E {}
|
| cls: serializeClassText('class C { C(this.x); int x; }'));
|
| UnlinkedParam parameter = executable.parameters[0];
|
| checkTypeRef(parameter.type, 'dart:core', 'dart:core', 'int');
|
| + expect(parameter.hasImplicitType, isTrue);
|
| }
|
|
|
| test_constructor_initializing_formal_name() {
|
| @@ -1065,11 +1069,21 @@ typedef F();
|
| UnlinkedExecutable executable = serializeExecutableText('f() {}');
|
| expect(executable.kind, UnlinkedExecutableKind.functionOrMethod);
|
| expect(executable.unit, 0);
|
| + expect(executable.hasImplicitReturnType, isTrue);
|
| + checkDynamicTypeRef(executable.returnType);
|
| + }
|
| +
|
| + test_executable_function_explicit_return() {
|
| + UnlinkedExecutable executable =
|
| + serializeExecutableText('dynamic f() => null;');
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| + checkDynamicTypeRef(executable.returnType);
|
| }
|
|
|
| test_executable_getter() {
|
| UnlinkedExecutable executable = serializeExecutableText('int get f => 1;');
|
| expect(executable.kind, UnlinkedExecutableKind.getter);
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| expect(findVariable('f'), isNull);
|
| expect(findExecutable('f='), isNull);
|
| }
|
| @@ -1083,6 +1097,7 @@ typedef F();
|
| test_executable_getter_type_implicit() {
|
| UnlinkedExecutable executable = serializeExecutableText('get f => 1;');
|
| checkDynamicTypeRef(executable.returnType);
|
| + expect(executable.hasImplicitReturnType, isTrue);
|
| expect(executable.parameters, isEmpty);
|
| }
|
|
|
| @@ -1090,6 +1105,13 @@ typedef F();
|
| UnlinkedExecutable executable =
|
| findExecutable('f', cls: serializeClassText('class C { f() {} }'));
|
| expect(executable.kind, UnlinkedExecutableKind.functionOrMethod);
|
| + expect(executable.hasImplicitReturnType, isTrue);
|
| + }
|
| +
|
| + test_executable_member_function_explicit_return() {
|
| + UnlinkedExecutable executable = findExecutable('f',
|
| + cls: serializeClassText('class C { dynamic f() => null; }'));
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| }
|
|
|
| test_executable_member_getter() {
|
| @@ -1097,6 +1119,7 @@ typedef F();
|
| UnlinkedExecutable executable =
|
| findExecutable('f', cls: cls, failIfAbsent: true);
|
| expect(executable.kind, UnlinkedExecutableKind.getter);
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| expect(findVariable('f', cls: cls), isNull);
|
| expect(findExecutable('f=', cls: cls), isNull);
|
| }
|
| @@ -1106,10 +1129,20 @@ typedef F();
|
| UnlinkedExecutable executable =
|
| findExecutable('f=', cls: cls, failIfAbsent: true);
|
| expect(executable.kind, UnlinkedExecutableKind.setter);
|
| + // For setters, hasImplicitReturnType is always false.
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| expect(findVariable('f', cls: cls), isNull);
|
| expect(findExecutable('f', cls: cls), isNull);
|
| }
|
|
|
| + test_executable_member_setter_implicit_return() {
|
| + UnlinkedClass cls = serializeClassText('class C { set f(value) {} }');
|
| + UnlinkedExecutable executable =
|
| + findExecutable('f=', cls: cls, failIfAbsent: true);
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| + checkDynamicTypeRef(executable.returnType);
|
| + }
|
| +
|
| test_executable_name() {
|
| UnlinkedExecutable executable = serializeExecutableText('f() {}');
|
| expect(executable.name, 'f');
|
| @@ -1138,6 +1171,16 @@ typedef F();
|
| test_executable_param_function_typed() {
|
| UnlinkedExecutable executable = serializeExecutableText('f(g()) {}');
|
| expect(executable.parameters[0].isFunctionTyped, isTrue);
|
| + // Since the parameter is function-typed it is considered to have an
|
| + // explicit type, even though that explicit type itself has an implicit
|
| + // return type.
|
| + expect(executable.parameters[0].hasImplicitType, isFalse);
|
| + }
|
| +
|
| + test_executable_param_function_typed_explicit_return_type() {
|
| + UnlinkedExecutable executable =
|
| + serializeExecutableText('f(dynamic g()) {}');
|
| + expect(executable.parameters[0].hasImplicitType, isFalse);
|
| }
|
|
|
| test_executable_param_function_typed_param() {
|
| @@ -1217,19 +1260,28 @@ typedef F();
|
| expect(executable.parameters[1].name, 'y');
|
| }
|
|
|
| + test_executable_param_type_explicit() {
|
| + UnlinkedExecutable executable = serializeExecutableText('f(dynamic x) {}');
|
| + checkDynamicTypeRef(executable.parameters[0].type);
|
| + expect(executable.parameters[0].hasImplicitType, isFalse);
|
| + }
|
| +
|
| test_executable_param_type_implicit() {
|
| UnlinkedExecutable executable = serializeExecutableText('f(x) {}');
|
| checkDynamicTypeRef(executable.parameters[0].type);
|
| + expect(executable.parameters[0].hasImplicitType, isTrue);
|
| }
|
|
|
| test_executable_return_type() {
|
| UnlinkedExecutable executable = serializeExecutableText('int f() => 1;');
|
| checkTypeRef(executable.returnType, 'dart:core', 'dart:core', 'int');
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| }
|
|
|
| test_executable_return_type_implicit() {
|
| UnlinkedExecutable executable = serializeExecutableText('f() {}');
|
| checkDynamicTypeRef(executable.returnType);
|
| + expect(executable.hasImplicitReturnType, isTrue);
|
| }
|
|
|
| test_executable_return_type_void() {
|
| @@ -1241,10 +1293,19 @@ typedef F();
|
| UnlinkedExecutable executable =
|
| serializeExecutableText('void set f(value) {}', 'f=');
|
| expect(executable.kind, UnlinkedExecutableKind.setter);
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| expect(findVariable('f'), isNull);
|
| expect(findExecutable('f'), isNull);
|
| }
|
|
|
| + test_executable_setter_implicit_return() {
|
| + UnlinkedExecutable executable =
|
| + serializeExecutableText('set f(value) {}', 'f=');
|
| + // For setters, hasImplicitReturnType is always false.
|
| + expect(executable.hasImplicitReturnType, isFalse);
|
| + checkDynamicTypeRef(executable.returnType);
|
| + }
|
| +
|
| test_executable_setter_type() {
|
| UnlinkedExecutable executable =
|
| serializeExecutableText('void set f(int value) {}', 'f=');
|
| @@ -1793,6 +1854,12 @@ class C {
|
| expect(variable.isConst, isTrue);
|
| }
|
|
|
| + test_variable_explicit_dynamic() {
|
| + UnlinkedVariable variable = serializeVariableText('dynamic v;');
|
| + checkDynamicTypeRef(variable.type);
|
| + expect(variable.hasImplicitType, isFalse);
|
| + }
|
| +
|
| test_variable_final_top_level() {
|
| UnlinkedVariable variable =
|
| serializeVariableText('final int i = 0;', variableName: 'i');
|
| @@ -1802,6 +1869,7 @@ class C {
|
| test_variable_implicit_dynamic() {
|
| UnlinkedVariable variable = serializeVariableText('var v;');
|
| checkDynamicTypeRef(variable.type);
|
| + expect(variable.hasImplicitType, isTrue);
|
| }
|
|
|
| test_variable_name() {
|
|
|