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