@@ -558,6 +558,21 @@ D f(MyList<int>/*2*/ x) => D(x);
558558 decoratedTypeAnnotation ('int>/*1*/' ).node);
559559 }
560560
561+ test_class_alias_synthetic_constructor_with_parameters_generic () async {
562+ await analyze ('''
563+ class C<T> {
564+ C(T t);
565+ }
566+ mixin M {}
567+ class D<U> = C<U> with M;
568+ ''' );
569+ var syntheticConstructor = findElement.unnamedConstructor ('D' );
570+ var constructorType = variables.decoratedElementType (syntheticConstructor);
571+ var constructorParameterType = constructorType.positionalParameters[0 ];
572+ assertUnion (
573+ constructorParameterType.node, decoratedTypeAnnotation ('T t' ).node);
574+ }
575+
561576 test_class_alias_synthetic_constructor_with_parameters_named () async {
562577 await analyze ('''
563578class C {
@@ -707,6 +722,74 @@ class C {
707722 // exception to be thrown.
708723 }
709724
725+ test_constructorDeclaration_returnType_generic () async {
726+ await analyze ('''
727+ class C<T, U> {
728+ C();
729+ }
730+ ''' );
731+ var constructor = findElement.unnamedConstructor ('C' );
732+ var constructorDecoratedType = variables.decoratedElementType (constructor);
733+ expect (constructorDecoratedType.type.toString (), 'C<T, U> Function()' );
734+ expect (constructorDecoratedType.node, same (never));
735+ expect (constructorDecoratedType.typeFormals, isEmpty);
736+ expect (constructorDecoratedType.returnType.node, same (never));
737+ expect (constructorDecoratedType.returnType.type.toString (), 'C<T, U>' );
738+ var typeArguments = constructorDecoratedType.returnType.typeArguments;
739+ expect (typeArguments, hasLength (2 ));
740+ expect (typeArguments[0 ].type.toString (), 'T' );
741+ expect (typeArguments[0 ].node, same (never));
742+ expect (typeArguments[1 ].type.toString (), 'U' );
743+ expect (typeArguments[1 ].node, same (never));
744+ }
745+
746+ test_constructorDeclaration_returnType_generic_implicit () async {
747+ await analyze ('''
748+ class C<T, U> {}
749+ ''' );
750+ var constructor = findElement.unnamedConstructor ('C' );
751+ var constructorDecoratedType = variables.decoratedElementType (constructor);
752+ expect (constructorDecoratedType.type.toString (), 'C<T, U> Function()' );
753+ expect (constructorDecoratedType.node, same (never));
754+ expect (constructorDecoratedType.typeFormals, isEmpty);
755+ expect (constructorDecoratedType.returnType.node, same (never));
756+ expect (constructorDecoratedType.returnType.type.toString (), 'C<T, U>' );
757+ var typeArguments = constructorDecoratedType.returnType.typeArguments;
758+ expect (typeArguments, hasLength (2 ));
759+ expect (typeArguments[0 ].type.toString (), 'T' );
760+ expect (typeArguments[0 ].node, same (never));
761+ expect (typeArguments[1 ].type.toString (), 'U' );
762+ expect (typeArguments[1 ].node, same (never));
763+ }
764+
765+ test_constructorDeclaration_returnType_simple () async {
766+ await analyze ('''
767+ class C {
768+ C();
769+ }
770+ ''' );
771+ var constructorDecoratedType =
772+ variables.decoratedElementType (findElement.unnamedConstructor ('C' ));
773+ expect (constructorDecoratedType.type.toString (), 'C Function()' );
774+ expect (constructorDecoratedType.node, same (never));
775+ expect (constructorDecoratedType.typeFormals, isEmpty);
776+ expect (constructorDecoratedType.returnType.node, same (never));
777+ expect (constructorDecoratedType.returnType.typeArguments, isEmpty);
778+ }
779+
780+ test_constructorDeclaration_returnType_simple_implicit () async {
781+ await analyze ('''
782+ class C {}
783+ ''' );
784+ var constructorDecoratedType =
785+ variables.decoratedElementType (findElement.unnamedConstructor ('C' ));
786+ expect (constructorDecoratedType.type.toString (), 'C Function()' );
787+ expect (constructorDecoratedType.node, same (never));
788+ expect (constructorDecoratedType.typeFormals, isEmpty);
789+ expect (constructorDecoratedType.returnType.node, same (never));
790+ expect (constructorDecoratedType.returnType.typeArguments, isEmpty);
791+ }
792+
710793 test_doubleLiteral () async {
711794 await analyze ('''
712795double f() {
0 commit comments