@@ -410,6 +410,107 @@ class C {
410410 same (decoratedType));
411411 }
412412
413+ test_fieldFormalParameter_function_namedParameter_typed () async {
414+ await analyze ('''
415+ class C {
416+ Object f;
417+ C(void this.f({int i}));
418+ }
419+ ''' );
420+ var ctor = findElement.unnamedConstructor ('C' );
421+ var ctorParam = ctor.parameters[0 ];
422+ var ctorType = variables.decoratedElementType (ctor);
423+ var ctorParamType = variables.decoratedElementType (ctorParam);
424+ expect (ctorType.positionalParameters[0 ], same (ctorParamType));
425+ expect (ctorParamType.node, TypeMatcher <NullabilityNodeMutable >());
426+ expect (ctorParamType.namedParameters['i' ],
427+ same (decoratedTypeAnnotation ('int' )));
428+ }
429+
430+ test_fieldFormalParameter_function_namedParameter_untyped () async {
431+ await analyze ('''
432+ class C {
433+ Object f;
434+ C(void this.f({i}));
435+ }
436+ ''' );
437+ var ctor = findElement.unnamedConstructor ('C' );
438+ var ctorParam = ctor.parameters[0 ];
439+ var ctorType = variables.decoratedElementType (ctor);
440+ var ctorParamType = variables.decoratedElementType (ctorParam);
441+ expect (ctorType.positionalParameters[0 ], same (ctorParamType));
442+ expect (ctorParamType.node, TypeMatcher <NullabilityNodeMutable >());
443+ expect (ctorParamType.namedParameters['i' ].type.toString (), 'dynamic' );
444+ expect (ctorParamType.namedParameters['i' ].node, same (always));
445+ }
446+
447+ test_fieldFormalParameter_function_positionalParameter_typed () async {
448+ await analyze ('''
449+ class C {
450+ Object f;
451+ C(void this.f(int i));
452+ }
453+ ''' );
454+ var ctor = findElement.unnamedConstructor ('C' );
455+ var ctorParam = ctor.parameters[0 ];
456+ var ctorType = variables.decoratedElementType (ctor);
457+ var ctorParamType = variables.decoratedElementType (ctorParam);
458+ expect (ctorType.positionalParameters[0 ], same (ctorParamType));
459+ expect (ctorParamType.node, TypeMatcher <NullabilityNodeMutable >());
460+ expect (ctorParamType.positionalParameters[0 ],
461+ same (decoratedTypeAnnotation ('int' )));
462+ }
463+
464+ test_fieldFormalParameter_function_positionalParameter_untyped () async {
465+ await analyze ('''
466+ class C {
467+ Object f;
468+ C(void this.f(i));
469+ }
470+ ''' );
471+ var ctor = findElement.unnamedConstructor ('C' );
472+ var ctorParam = ctor.parameters[0 ];
473+ var ctorType = variables.decoratedElementType (ctor);
474+ var ctorParamType = variables.decoratedElementType (ctorParam);
475+ expect (ctorType.positionalParameters[0 ], same (ctorParamType));
476+ expect (ctorParamType.node, TypeMatcher <NullabilityNodeMutable >());
477+ expect (ctorParamType.positionalParameters[0 ].type.toString (), 'dynamic' );
478+ expect (ctorParamType.positionalParameters[0 ].node, same (always));
479+ }
480+
481+ test_fieldFormalParameter_function_return_typed () async {
482+ await analyze ('''
483+ class C {
484+ Object f;
485+ C(int this.f());
486+ }
487+ ''' );
488+ var ctor = findElement.unnamedConstructor ('C' );
489+ var ctorParam = ctor.parameters[0 ];
490+ var ctorType = variables.decoratedElementType (ctor);
491+ var ctorParamType = variables.decoratedElementType (ctorParam);
492+ expect (ctorType.positionalParameters[0 ], same (ctorParamType));
493+ expect (ctorParamType.node, TypeMatcher <NullabilityNodeMutable >());
494+ expect (ctorParamType.returnType, same (decoratedTypeAnnotation ('int' )));
495+ }
496+
497+ test_fieldFormalParameter_function_return_untyped () async {
498+ await analyze ('''
499+ class C {
500+ Object f;
501+ C(this.f()) {}
502+ }
503+ ''' );
504+ var ctor = findElement.unnamedConstructor ('C' );
505+ var ctorParam = ctor.parameters[0 ];
506+ var ctorType = variables.decoratedElementType (ctor);
507+ var ctorParamType = variables.decoratedElementType (ctorParam);
508+ expect (ctorType.positionalParameters[0 ], same (ctorParamType));
509+ expect (ctorParamType.node, TypeMatcher <NullabilityNodeMutable >());
510+ expect (ctorParamType.returnType.type.toString (), 'dynamic' );
511+ expect (ctorParamType.returnType.node, same (always));
512+ }
513+
413514 test_fieldFormalParameter_typed () async {
414515 await analyze ('''
415516class C {
@@ -444,6 +545,87 @@ class C {
444545 // field.
445546 }
446547
548+ test_functionTypedFormalParameter_namedParameter_typed () async {
549+ await analyze ('''
550+ void f(void g({int i})) {}
551+ ''' );
552+ var f = findElement.function ('f' );
553+ var g = f.parameters[0 ];
554+ var fType = variables.decoratedElementType (f);
555+ var gType = variables.decoratedElementType (g);
556+ expect (fType.positionalParameters[0 ], same (gType));
557+ expect (gType.node, TypeMatcher <NullabilityNodeMutable >());
558+ expect (gType.namedParameters['i' ], same (decoratedTypeAnnotation ('int' )));
559+ }
560+
561+ test_functionTypedFormalParameter_namedParameter_untyped () async {
562+ await analyze ('''
563+ void f(void g({i})) {}
564+ ''' );
565+ var f = findElement.function ('f' );
566+ var g = f.parameters[0 ];
567+ var fType = variables.decoratedElementType (f);
568+ var gType = variables.decoratedElementType (g);
569+ expect (fType.positionalParameters[0 ], same (gType));
570+ expect (gType.node, TypeMatcher <NullabilityNodeMutable >());
571+ expect (gType.namedParameters['i' ].type.toString (), 'dynamic' );
572+ expect (gType.namedParameters['i' ].node, same (always));
573+ }
574+
575+ test_functionTypedFormalParameter_positionalParameter_typed () async {
576+ await analyze ('''
577+ void f(void g(int i)) {}
578+ ''' );
579+ var f = findElement.function ('f' );
580+ var g = f.parameters[0 ];
581+ var fType = variables.decoratedElementType (f);
582+ var gType = variables.decoratedElementType (g);
583+ expect (fType.positionalParameters[0 ], same (gType));
584+ expect (gType.node, TypeMatcher <NullabilityNodeMutable >());
585+ expect (gType.positionalParameters[0 ], same (decoratedTypeAnnotation ('int' )));
586+ }
587+
588+ test_functionTypedFormalParameter_positionalParameter_untyped () async {
589+ await analyze ('''
590+ void f(void g(i)) {}
591+ ''' );
592+ var f = findElement.function ('f' );
593+ var g = f.parameters[0 ];
594+ var fType = variables.decoratedElementType (f);
595+ var gType = variables.decoratedElementType (g);
596+ expect (fType.positionalParameters[0 ], same (gType));
597+ expect (gType.node, TypeMatcher <NullabilityNodeMutable >());
598+ expect (gType.positionalParameters[0 ].type.toString (), 'dynamic' );
599+ expect (gType.positionalParameters[0 ].node, same (always));
600+ }
601+
602+ test_functionTypedFormalParameter_return_typed () async {
603+ await analyze ('''
604+ void f(int g()) {}
605+ ''' );
606+ var f = findElement.function ('f' );
607+ var g = f.parameters[0 ];
608+ var fType = variables.decoratedElementType (f);
609+ var gType = variables.decoratedElementType (g);
610+ expect (fType.positionalParameters[0 ], same (gType));
611+ expect (gType.node, TypeMatcher <NullabilityNodeMutable >());
612+ expect (gType.returnType, same (decoratedTypeAnnotation ('int' )));
613+ }
614+
615+ test_functionTypedFormalParameter_return_untyped () async {
616+ await analyze ('''
617+ void f(g()) {}
618+ ''' );
619+ var f = findElement.function ('f' );
620+ var g = f.parameters[0 ];
621+ var fType = variables.decoratedElementType (f);
622+ var gType = variables.decoratedElementType (g);
623+ expect (fType.positionalParameters[0 ], same (gType));
624+ expect (gType.node, TypeMatcher <NullabilityNodeMutable >());
625+ expect (gType.returnType.type.toString (), 'dynamic' );
626+ expect (gType.returnType.node, same (always));
627+ }
628+
447629 test_generic_function_type_syntax_inferred_dynamic_return () async {
448630 await analyze ('''
449631abstract class C {
0 commit comments