Replace some uses of StaticTypeAnalyzer2TestShared.
R=brianwilkerson@google.com
Change-Id: Ic3ea45d3e894b3991593a2a349909bf289743e93
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/174489
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index d1ca7a3..3453f53 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -16,7 +16,6 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../src/dart/resolution/context_collection_resolution.dart';
-import 'resolver_test_case.dart';
main() {
defineReflectiveSuite(() {
@@ -78,34 +77,6 @@
}
}
-/// Tests for generic method and function resolution that do not use strong
-/// mode.
-@reflectiveTest
-class GenericMethodResolverTest extends StaticTypeAnalyzer2TestShared {
- test_genericMethod_propagatedType_promotion() async {
- // Regression test for:
- // https://github.com/dart-lang/sdk/issues/25340
- //
- // Note, after https://github.com/dart-lang/sdk/issues/25486 the original
- // strong mode example won't work, as we now compute a static type and
- // therefore discard the propagated type.
- //
- // So this test does not use strong mode.
- await assertNoErrorsInCode(r'''
-abstract class Iter {
- List<S> map<S>(S f(x));
-}
-class C {}
-C toSpan(dynamic element) {
- if (element is Iter) {
- var y = element.map(toSpan);
- }
- return null;
-}''');
- expectIdentifierType('y = ', 'dynamic');
- }
-}
-
@reflectiveTest
class PrefixedNamespaceTest extends PubPackageResolutionTest {
void test_lookup_missing() {
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
index aac7951..819c49a 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
@@ -11,7 +11,6 @@
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/resolver.dart' show ResolverVisitor;
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/static_type_analyzer.dart';
@@ -23,14 +22,12 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'elements_types_mixin.dart';
-import 'resolver_test_case.dart';
import 'test_analysis_context.dart';
import 'test_support.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(StaticTypeAnalyzerTest);
- defineReflectiveTests(StaticTypeAnalyzer2Test);
});
}
@@ -43,114 +40,6 @@
fail(message);
}
-/// Like [StaticTypeAnalyzerTest], but as end-to-end tests.
-@reflectiveTest
-class StaticTypeAnalyzer2Test extends StaticTypeAnalyzer2TestShared {
- test_FunctionExpressionInvocation_block() async {
- await assertErrorsInCode(r'''
-main() {
- var foo = (() { return 1; })();
-}
-''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 15, 3),
- ]);
- expectInitializerType('foo', 'int');
- }
-
- test_FunctionExpressionInvocation_curried() async {
- await assertErrorsInCode(r'''
-typedef int F();
-F f() => null;
-main() {
- var foo = f()();
-}
-''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 47, 3),
- ]);
- expectInitializerType('foo', 'int');
- }
-
- test_FunctionExpressionInvocation_expression() async {
- await assertErrorsInCode(r'''
-main() {
- var foo = (() => 1)();
-}
-''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 15, 3),
- ]);
- expectInitializerType('foo', 'int');
- }
-
- test_MethodInvocation_nameType_localVariable() async {
- await assertNoErrorsInCode(r"""
-typedef Foo();
-main() {
- Foo foo;
- foo();
-}
-""");
- // "foo" should be resolved to the "Foo" type
- expectIdentifierType("foo();", TypeMatcher<FunctionType>());
- }
-
- test_MethodInvocation_nameType_parameter_FunctionTypeAlias() async {
- await assertNoErrorsInCode(r"""
-typedef Foo();
-main(Foo foo) {
- foo();
-}
-""");
- // "foo" should be resolved to the "Foo" type
- expectIdentifierType("foo();", TypeMatcher<FunctionType>());
- }
-
- test_MethodInvocation_nameType_parameter_propagatedType() async {
- await assertNoErrorsInCode(r"""
-typedef Foo();
-main(p) {
- if (p is Foo) {
- p();
- }
-}
-""");
- expectIdentifierType("p()", 'dynamic Function()');
- }
-
- test_staticMethods_classTypeParameters() async {
- await assertNoErrorsInCode(r'''
-class C<T> {
- static void m() => null;
-}
-main() {
- print(C.m);
-}
-''');
- assertType(findNode.simple('m);'), 'void Function()');
- }
-
- test_staticMethods_classTypeParameters_genericMethod() async {
- await assertNoErrorsInCode(r'''
-class C<T> {
- static void m<S>(S s) {
- void f<U>(S s, U u) {}
- print(f);
- }
-}
-main() {
- print(C.m);
-}
-''');
- assertType(
- findNode.simple('f);'),
- 'void Function<U>(S, U)',
- );
- assertType(
- findNode.simple('m);'),
- 'void Function<S>(S)',
- );
- }
-}
-
@reflectiveTest
class StaticTypeAnalyzerTest with ResourceProviderMixin, ElementsTypesMixin {
/// The error listener to which errors will be reported.
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index 18dc935..28af7ee 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -1907,6 +1907,29 @@
}
}
+ test_noReceiver_parameter_functionTyped_typedef() async {
+ await assertNoErrorsInCode(r'''
+typedef F = void Function();
+
+void f(F a) {
+ a();
+}
+''');
+
+ var invocation = findNode.functionExpressionInvocation('a();');
+ assertFunctionExpressionInvocation(
+ invocation,
+ element: null,
+ typeArgumentTypes: [],
+ invokeType: 'void Function()',
+ type: 'void',
+ );
+
+ var aRef = invocation.function as SimpleIdentifier;
+ assertElement(aRef, findElement.parameter('a'));
+ assertType(aRef, 'void Function()');
+ }
+
test_noReceiver_topFunction() async {
await assertNoErrorsInCode(r'''
void foo(int _) {}
diff --git a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
index ff8104f..ed75ddb 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
@@ -104,6 +104,72 @@
);
}
+ test_read_staticMethod_generic() async {
+ await assertNoErrorsInCode('''
+class A<T> {
+ static void foo<U>(int a, U u) {}
+}
+
+void f() {
+ A.foo;
+}
+''');
+
+ var prefixed = findNode.prefixed('A.foo');
+ assertPrefixedIdentifier(
+ prefixed,
+ element: findElement.method('foo'),
+ type: 'void Function<U>(int, U)',
+ );
+
+ assertSimpleIdentifier(
+ prefixed.prefix,
+ readElement: findElement.class_('A'),
+ writeElement: null,
+ type: null,
+ );
+
+ assertSimpleIdentifier(
+ prefixed.identifier,
+ readElement: findElement.method('foo'),
+ writeElement: null,
+ type: 'void Function<U>(int, U)',
+ );
+ }
+
+ test_read_staticMethod_ofGenericClass() async {
+ await assertNoErrorsInCode('''
+class A<T> {
+ static void foo(int a) {}
+}
+
+void f() {
+ A.foo;
+}
+''');
+
+ var prefixed = findNode.prefixed('A.foo');
+ assertPrefixedIdentifier(
+ prefixed,
+ element: findElement.method('foo'),
+ type: 'void Function(int)',
+ );
+
+ assertSimpleIdentifier(
+ prefixed.prefix,
+ readElement: findElement.class_('A'),
+ writeElement: null,
+ type: null,
+ );
+
+ assertSimpleIdentifier(
+ prefixed.identifier,
+ readElement: findElement.method('foo'),
+ writeElement: null,
+ type: 'void Function(int)',
+ );
+ }
+
test_readWrite_assignment() async {
await assertNoErrorsInCode('''
class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
index 1214c58..88deb9e 100644
--- a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
@@ -83,6 +83,21 @@
assertType(identifier, 'A');
}
+ test_localFunction_generic() async {
+ await assertNoErrorsInCode('''
+class C<T> {
+ static void foo<S>(S s) {
+ void f<U>(S s, U u) {}
+ f;
+ }
+}
+''');
+
+ var identifier = findNode.simple('f;');
+ assertElement(identifier, findElement.localFunction('f'));
+ assertType(identifier, 'void Function<U>(S, U)');
+ }
+
test_tearOff_function_topLevel() async {
await assertNoErrorsInCode('''
void foo(int a) {}