@@ -4713,6 +4713,11 @@ abstract final class ConstructorDeclaration implements ClassMember {
47134713 /// is unnamed.
47144714 Token? get name;
47154715
4716+ /// The token for the `new` keyword, or `null` if the keyword is absent, so
4717+ /// either [factoryKeyword] is not `null`, or the old syntax with [typeName]
4718+ /// is used.
4719+ Token? get newKeyword;
4720+
47164721 /// The parameters associated with the constructor.
47174722 FormalParameterList get parameters;
47184723
@@ -4725,6 +4730,7 @@ abstract final class ConstructorDeclaration implements ClassMember {
47254730 ConstructorName? get redirectedConstructor;
47264731
47274732 /// The type of object being created.
4733+ @Deprecated('Use typeName instead')
47284734 Identifier get returnType;
47294735
47304736 /// The token for the separator (colon or equals) before the initializer list
@@ -4734,7 +4740,7 @@ abstract final class ConstructorDeclaration implements ClassMember {
47344740
47354741 /// The name of the enclosing type, e.g. `C` in `C() {}` or `C.named() {}`.
47364742 ///
4737- /// Or `null` if uses new syntax with ` newKeyword` or [factoryKeyword].
4743+ /// Or `null` if uses new syntax with [ newKeyword] or [factoryKeyword].
47384744 SimpleIdentifier? get typeName;
47394745}
47404746
@@ -4744,7 +4750,8 @@ abstract final class ConstructorDeclaration implements ClassMember {
47444750 GenerateNodeProperty('externalKeyword', tokenGroupId: 0),
47454751 GenerateNodeProperty('constKeyword', tokenGroupId: 0, isTokenFinal: false),
47464752 GenerateNodeProperty('factoryKeyword', tokenGroupId: 0),
4747- GenerateNodeProperty('returnType'),
4753+ GenerateNodeProperty('newKeyword', tokenGroupId: 0),
4754+ GenerateNodeProperty('typeName'),
47484755 GenerateNodeProperty('period'),
47494756 GenerateNodeProperty('name'),
47504757 GenerateNodeProperty('parameters'),
@@ -4773,7 +4780,11 @@ final class ConstructorDeclarationImpl extends ClassMemberImpl
47734780 final Token? factoryKeyword;
47744781
47754782 @generated
4776- IdentifierImpl _returnType;
4783+ @override
4784+ final Token? newKeyword;
4785+
4786+ @generated
4787+ SimpleIdentifierImpl? _typeName;
47774788
47784789 @generated
47794790 @override
@@ -4812,19 +4823,20 @@ final class ConstructorDeclarationImpl extends ClassMemberImpl
48124823 required this.externalKeyword,
48134824 required this.constKeyword,
48144825 required this.factoryKeyword,
4815- required IdentifierImpl returnType,
4826+ required this.newKeyword,
4827+ required SimpleIdentifierImpl? typeName,
48164828 required this.period,
48174829 required this.name,
48184830 required FormalParameterListImpl parameters,
48194831 required this.separator,
48204832 required List<ConstructorInitializerImpl> initializers,
48214833 required ConstructorNameImpl? redirectedConstructor,
48224834 required FunctionBodyImpl body,
4823- }) : _returnType = returnType ,
4835+ }) : _typeName = typeName ,
48244836 _parameters = parameters,
48254837 _redirectedConstructor = redirectedConstructor,
48264838 _body = body {
4827- _becomeParentOf(returnType );
4839+ _becomeParentOf(typeName );
48284840 _becomeParentOf(parameters);
48294841 this.initializers._initialize(this, initializers);
48304842 _becomeParentOf(redirectedConstructor);
@@ -4854,11 +4866,21 @@ final class ConstructorDeclarationImpl extends ClassMemberImpl
48544866 externalKeyword,
48554867 constKeyword,
48564868 factoryKeyword,
4869+ newKeyword,
48574870 )
48584871 case var result?) {
48594872 return result;
48604873 }
4861- return returnType.beginToken;
4874+ if (typeName case var typeName?) {
4875+ return typeName.beginToken;
4876+ }
4877+ if (period case var period?) {
4878+ return period;
4879+ }
4880+ if (name case var name?) {
4881+ return name;
4882+ }
4883+ return parameters.beginToken;
48624884 }
48634885
48644886 /// Whether this is a trivial constructor.
@@ -4891,27 +4913,31 @@ final class ConstructorDeclarationImpl extends ClassMemberImpl
48914913 _redirectedConstructor = _becomeParentOf(redirectedConstructor);
48924914 }
48934915
4916+ @Deprecated('Use typeName instead')
4917+ @override
4918+ IdentifierImpl get returnType {
4919+ // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
4920+ return typeName!;
4921+ }
4922+
48944923 @generated
48954924 @override
4896- IdentifierImpl get returnType => _returnType ;
4925+ SimpleIdentifierImpl? get typeName => _typeName ;
48974926
48984927 @generated
4899- set returnType(IdentifierImpl returnType ) {
4900- _returnType = _becomeParentOf(returnType );
4928+ set typeName(SimpleIdentifierImpl? typeName ) {
4929+ _typeName = _becomeParentOf(typeName );
49014930 }
49024931
4903- @override
4904- // TODO(scheglov): flip the implementation to make this property leading
4905- SimpleIdentifierImpl? get typeName => returnType as SimpleIdentifierImpl;
4906-
49074932 @generated
49084933 @override
49094934 ChildEntities get _childEntities => super._childEntities
49104935 ..addToken('augmentKeyword', augmentKeyword)
49114936 ..addToken('externalKeyword', externalKeyword)
49124937 ..addToken('constKeyword', constKeyword)
49134938 ..addToken('factoryKeyword', factoryKeyword)
4914- ..addNode('returnType', returnType)
4939+ ..addToken('newKeyword', newKeyword)
4940+ ..addNode('typeName', typeName)
49154941 ..addToken('period', period)
49164942 ..addToken('name', name)
49174943 ..addNode('parameters', parameters)
@@ -4929,7 +4955,7 @@ final class ConstructorDeclarationImpl extends ClassMemberImpl
49294955 @override
49304956 void visitChildren(AstVisitor visitor) {
49314957 super.visitChildren(visitor);
4932- returnType .accept(visitor);
4958+ typeName? .accept(visitor);
49334959 parameters.accept(visitor);
49344960 initializers.accept(visitor);
49354961 redirectedConstructor?.accept(visitor);
@@ -4942,8 +4968,10 @@ final class ConstructorDeclarationImpl extends ClassMemberImpl
49424968 if (super._childContainingRange(rangeOffset, rangeEnd) case var result?) {
49434969 return result;
49444970 }
4945- if (returnType._containsOffset(rangeOffset, rangeEnd)) {
4946- return returnType;
4971+ if (typeName case var typeName?) {
4972+ if (typeName._containsOffset(rangeOffset, rangeEnd)) {
4973+ return typeName;
4974+ }
49474975 }
49484976 if (parameters._containsOffset(rangeOffset, rangeEnd)) {
49494977 return parameters;
0 commit comments