Test cases to illustrate #48500

Bug: https://github.com/dart-lang/sdk/issues/48500
Change-Id: I237e44d33cca1d2fe63c205e8bd3dcd775bf079f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/235062
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 66c764c..456f594 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
 import 'package:test/test.dart';
@@ -62,6 +63,20 @@
 ''');
   }
 
+  test_generic_staticParameterElement_annotation() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  const C.named({arg});
+}
+@C<bool>.named(arg: true)
+test() {}
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
   test_inconsistentMethodInheritance_accessors_typeParameters1() async {
     await assertNoErrorsInCode(r'''
 abstract class A<E> {
@@ -1367,6 +1382,107 @@
 ''');
   }
 
+  test_generic_staticParameterElement_annotation_implicitTypeArg() async {
+    var required = isNullSafetyEnabled ? 'required' : '';
+    await assertNoErrorsInCode('''
+class C<T> {
+  const C.named({$required T arg});
+}
+@C.named(arg: true)
+test() {}
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_explicitNew() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+test() => new C<bool>.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_explicitNew_implicitTypeArg() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+C<bool> test() => new C.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
+  test_generic_staticParameterElement_instanceCreation_implicitNew() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+test() => C<bool>.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_implicitNew_implicitTypeArg() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+C<bool> test() => C.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
+  test_generic_staticParameterElement_methodCall() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  T method<T>({arg});
+}
+test(C c) => c.method<bool>(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
+  test_generic_staticParameterElement_methodCall_implicitTypeArg() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  T method<T>({arg});
+}
+bool test(C c) => c.method<bool>(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
   test_genericTypeAlias_castsAndTypeChecks_hasTypeParameters() async {
     await assertNoErrorsInCode('''
 // @dart = 2.9