@@ -11202,68 +11202,10 @@ class TypeAliasElementImpl extends _ExistingElementImpl
1120211202 required List <DartType > typeArguments,
1120311203 required NullabilitySuffix nullabilitySuffix,
1120411204 }) {
11205- if (hasSelfReference) {
11206- if (isNonFunctionTypeAliasesEnabled) {
11207- return DynamicTypeImpl .instance;
11208- } else {
11209- return _errorFunctionType (nullabilitySuffix);
11210- }
11211- }
11212-
11213- var substitution = Substitution .fromPairs (typeParameters, typeArguments);
11214- var type = substitution.substituteType (aliasedType);
11215-
11216- var resultNullability = type.nullabilitySuffix == NullabilitySuffix .question
11217- ? NullabilitySuffix .question
11218- : nullabilitySuffix;
11219-
11220- if (type is FunctionTypeImpl ) {
11221- return FunctionTypeImpl (
11222- typeFormals: type.typeFormals,
11223- parameters: type.parameters,
11224- returnType: type.returnType,
11225- nullabilitySuffix: resultNullability,
11226- alias: InstantiatedTypeAliasElementImpl (
11227- element: this ,
11228- // TODO(scheglov): remove this cast
11229- typeArguments: typeArguments.cast (),
11230- ),
11231- );
11232- } else if (type is InterfaceTypeImpl ) {
11233- return InterfaceTypeImpl (
11234- element: type.element3,
11235- typeArguments: type.typeArguments,
11236- nullabilitySuffix: resultNullability,
11237- alias: InstantiatedTypeAliasElementImpl (
11238- element: this ,
11239- // TODO(scheglov): remove this cast
11240- typeArguments: typeArguments.cast (),
11241- ),
11242- );
11243- } else if (type is RecordTypeImpl ) {
11244- return RecordTypeImpl (
11245- positionalFields: type.positionalFields,
11246- namedFields: type.namedFields,
11247- nullabilitySuffix: resultNullability,
11248- alias: InstantiatedTypeAliasElementImpl (
11249- element: this ,
11250- // TODO(scheglov): remove this cast
11251- typeArguments: typeArguments.cast (),
11252- ),
11253- );
11254- } else if (type is TypeParameterTypeImpl ) {
11255- return TypeParameterTypeImpl (
11256- element: type.element,
11257- nullabilitySuffix: resultNullability,
11258- alias: InstantiatedTypeAliasElementImpl (
11259- element: this ,
11260- // TODO(scheglov): remove this cast
11261- typeArguments: typeArguments.cast (),
11262- ),
11263- );
11264- } else {
11265- return type.withNullability (resultNullability);
11266- }
11205+ return element.instantiate (
11206+ typeArguments: typeArguments,
11207+ nullabilitySuffix: nullabilitySuffix,
11208+ );
1126711209 }
1126811210
1126911211 void setLinkedData (Reference reference, ElementLinkedData linkedData) {
@@ -11272,15 +11214,6 @@ class TypeAliasElementImpl extends _ExistingElementImpl
1127211214
1127311215 this .linkedData = linkedData;
1127411216 }
11275-
11276- FunctionTypeImpl _errorFunctionType (NullabilitySuffix nullabilitySuffix) {
11277- return FunctionTypeImpl (
11278- typeFormals: const [],
11279- parameters: const [],
11280- returnType: DynamicTypeImpl .instance,
11281- nullabilitySuffix: nullabilitySuffix,
11282- );
11283- }
1128411217}
1128511218
1128611219class TypeAliasElementImpl2 extends TypeDefiningElementImpl2
@@ -11370,11 +11303,88 @@ class TypeAliasElementImpl2 extends TypeDefiningElementImpl2
1137011303 }
1137111304
1137211305 @override
11373- TypeImpl instantiate (
11374- {required List <DartType > typeArguments,
11375- required NullabilitySuffix nullabilitySuffix}) =>
11376- firstFragment.instantiate (
11377- typeArguments: typeArguments, nullabilitySuffix: nullabilitySuffix);
11306+ TypeImpl instantiate ({
11307+ required List <DartType > typeArguments,
11308+ required NullabilitySuffix nullabilitySuffix,
11309+ }) {
11310+ return instantiateImpl (
11311+ typeArguments: typeArguments.cast <TypeImpl >(),
11312+ nullabilitySuffix: nullabilitySuffix,
11313+ );
11314+ }
11315+
11316+ TypeImpl instantiateImpl ({
11317+ required List <TypeImpl > typeArguments,
11318+ required NullabilitySuffix nullabilitySuffix,
11319+ }) {
11320+ if (firstFragment.hasSelfReference) {
11321+ if (firstFragment.isNonFunctionTypeAliasesEnabled) {
11322+ return DynamicTypeImpl .instance;
11323+ } else {
11324+ return _errorFunctionType (nullabilitySuffix);
11325+ }
11326+ }
11327+
11328+ var substitution = Substitution .fromPairs2 (typeParameters2, typeArguments);
11329+ var type = substitution.substituteType (aliasedType);
11330+
11331+ var resultNullability = type.nullabilitySuffix == NullabilitySuffix .question
11332+ ? NullabilitySuffix .question
11333+ : nullabilitySuffix;
11334+
11335+ if (type is FunctionTypeImpl ) {
11336+ return FunctionTypeImpl (
11337+ typeFormals: type.typeFormals,
11338+ parameters: type.parameters,
11339+ returnType: type.returnType,
11340+ nullabilitySuffix: resultNullability,
11341+ alias: InstantiatedTypeAliasElementImpl (
11342+ element2: this ,
11343+ typeArguments: typeArguments,
11344+ ),
11345+ );
11346+ } else if (type is InterfaceTypeImpl ) {
11347+ return InterfaceTypeImpl (
11348+ element: type.element3,
11349+ typeArguments: type.typeArguments,
11350+ nullabilitySuffix: resultNullability,
11351+ alias: InstantiatedTypeAliasElementImpl (
11352+ element2: this ,
11353+ typeArguments: typeArguments,
11354+ ),
11355+ );
11356+ } else if (type is RecordTypeImpl ) {
11357+ return RecordTypeImpl (
11358+ positionalFields: type.positionalFields,
11359+ namedFields: type.namedFields,
11360+ nullabilitySuffix: resultNullability,
11361+ alias: InstantiatedTypeAliasElementImpl (
11362+ element2: this ,
11363+ typeArguments: typeArguments,
11364+ ),
11365+ );
11366+ } else if (type is TypeParameterTypeImpl ) {
11367+ return TypeParameterTypeImpl (
11368+ element: type.element,
11369+ nullabilitySuffix: resultNullability,
11370+ alias: InstantiatedTypeAliasElementImpl (
11371+ element2: this ,
11372+ typeArguments: typeArguments,
11373+ ),
11374+ );
11375+ } else {
11376+ return type.withNullability (resultNullability);
11377+ }
11378+ }
11379+
11380+ FunctionTypeImpl _errorFunctionType (NullabilitySuffix nullabilitySuffix) {
11381+ return FunctionTypeImpl (
11382+ typeFormals: const [],
11383+ parameters: const [],
11384+ returnType: DynamicTypeImpl .instance,
11385+ nullabilitySuffix: nullabilitySuffix,
11386+ );
11387+ }
1137811388}
1137911389
1138011390abstract class TypeDefiningElementImpl2 extends ElementImpl2
0 commit comments