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) {}