Skip to content

Commit 4a2e529

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate InstantiatedTypeAliasElementImpl.
Change-Id: I04d60f3198f04ae8b3a8b233731de2feb85288a4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/415641 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 248f173 commit 4a2e529

File tree

14 files changed

+119
-108
lines changed

14 files changed

+119
-108
lines changed

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 86 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1128611219
class 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

1138011390
abstract class TypeDefiningElementImpl2 extends ElementImpl2

pkg/analyzer/lib/src/dart/element/replace_top_bottom_visitor.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class ReplaceTopBottomVisitor {
8989
);
9090
}
9191

92-
return aliasElement.instantiate(
92+
return aliasElement.instantiateImpl(
9393
typeArguments: newTypeArguments,
9494
nullabilitySuffix: type.nullabilitySuffix,
9595
);

pkg/analyzer/lib/src/dart/element/type.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -537,29 +537,29 @@ class FutureOrTypeImpl extends InterfaceTypeImpl {
537537

538538
class InstantiatedTypeAliasElementImpl implements InstantiatedTypeAliasElement {
539539
@override
540-
final TypeAliasElement element;
540+
final TypeAliasElementImpl2 element2;
541541

542542
@override
543543
final List<TypeImpl> typeArguments;
544544

545545
InstantiatedTypeAliasElementImpl({
546-
required this.element,
546+
required this.element2,
547547
required this.typeArguments,
548548
});
549549

550550
factory InstantiatedTypeAliasElementImpl.v2({
551-
required TypeAliasElement2 element,
551+
required TypeAliasElementImpl2 element,
552552
required List<TypeImpl> typeArguments,
553553
}) {
554554
return InstantiatedTypeAliasElementImpl(
555-
element: element.asElement,
555+
element2: element,
556556
typeArguments: typeArguments,
557557
);
558558
}
559559

560+
@Deprecated('Use element2 instead')
560561
@override
561-
TypeAliasElementImpl2 get element2 =>
562-
(element as TypeAliasFragment).element as TypeAliasElementImpl2;
562+
TypeAliasElementImpl get element => element2.firstFragment;
563563
}
564564

565565
/// A concrete implementation of an [InterfaceType].

pkg/analyzer/lib/src/dart/element/type_system.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,7 @@ class TypeSystemImpl implements TypeSystem {
731731
}) {
732732
var typeParameters = element.typeParameters2;
733733
var typeArguments = _defaultTypeArguments(typeParameters);
734-
return element.instantiate(
734+
return element.instantiateImpl(
735735
typeArguments: typeArguments,
736736
nullabilitySuffix: nullabilitySuffix,
737737
);

pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ class AnnotationResolver {
379379
constructorElement,
380380
argumentList,
381381
(typeArguments) {
382-
return typeAliasElement.instantiate(
382+
return typeAliasElement.instantiateImpl(
383383
typeArguments: typeArguments,
384384
nullabilitySuffix: NullabilitySuffix.none,
385385
) as InterfaceType;

pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,7 @@ class FunctionReferenceResolver {
843843
element.typeParameters2,
844844
CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS,
845845
);
846-
var type = element.instantiate(
846+
var type = element.instantiateImpl(
847847
typeArguments: typeArguments,
848848
nullabilitySuffix: NullabilitySuffix.none,
849849
);

pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ class NamedTypeResolver with ScopeHelpers {
223223
argumentList,
224224
element.typeParameters2.length,
225225
);
226-
var type = element.instantiate(
226+
var type = element.instantiateImpl(
227227
typeArguments: typeArguments,
228228
nullabilitySuffix: nullability,
229229
);

pkg/analyzer/lib/src/generated/resolver.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -851,10 +851,12 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
851851
contextType: matchedType.unwrapTypeView(),
852852
nodeForTesting: pattern,
853853
);
854-
return SharedTypeView(typeNode.type = typeNameElement.instantiate(
855-
typeArguments: typeArguments,
856-
nullabilitySuffix: NullabilitySuffix.none,
857-
));
854+
return SharedTypeView(
855+
typeNode.type = typeNameElement.instantiateImpl(
856+
typeArguments: typeArguments,
857+
nullabilitySuffix: NullabilitySuffix.none,
858+
),
859+
);
858860
}
859861
}
860862
}

pkg/analyzer/lib/src/summary2/bundle_reader.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2216,7 +2216,7 @@ class ResolutionReader {
22162216

22172217
TypeImpl _readAliasElementArguments(TypeImpl type) {
22182218
var aliasElement = _readRawElement();
2219-
if (aliasElement is TypeAliasElement) {
2219+
if (aliasElement is TypeAliasElementImpl) {
22202220
var aliasArguments = _readTypeList();
22212221
if (type is DynamicTypeImpl) {
22222222
// TODO(scheglov): add support for `dynamic` aliasing
@@ -2228,7 +2228,7 @@ class ResolutionReader {
22282228
returnType: type.returnType,
22292229
nullabilitySuffix: type.nullabilitySuffix,
22302230
alias: InstantiatedTypeAliasElementImpl(
2231-
element: aliasElement,
2231+
element2: aliasElement.asElement2,
22322232
typeArguments: aliasArguments,
22332233
),
22342234
);
@@ -2238,7 +2238,7 @@ class ResolutionReader {
22382238
typeArguments: type.typeArguments,
22392239
nullabilitySuffix: type.nullabilitySuffix,
22402240
alias: InstantiatedTypeAliasElementImpl(
2241-
element: aliasElement,
2241+
element2: aliasElement.asElement2,
22422242
typeArguments: aliasArguments,
22432243
),
22442244
);
@@ -2248,7 +2248,7 @@ class ResolutionReader {
22482248
namedFields: type.namedFields,
22492249
nullabilitySuffix: type.nullabilitySuffix,
22502250
alias: InstantiatedTypeAliasElementImpl(
2251-
element: aliasElement,
2251+
element2: aliasElement.asElement2,
22522252
typeArguments: aliasArguments,
22532253
),
22542254
);
@@ -2257,7 +2257,7 @@ class ResolutionReader {
22572257
element: type.element,
22582258
nullabilitySuffix: type.nullabilitySuffix,
22592259
alias: InstantiatedTypeAliasElementImpl(
2260-
element: aliasElement,
2260+
element2: aliasElement.asElement2,
22612261
typeArguments: aliasArguments,
22622262
),
22632263
);

pkg/analyzer/lib/src/summary2/bundle_writer.dart

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -869,18 +869,17 @@ class ResolutionSink extends _SummaryDataWriter {
869869
writeUInt30(elementIndex);
870870
}
871871

872-
void _writeElementList(List<Element> elements) {
872+
void _writeElement2(Element2? element) {
873+
_writeElement(element?.asElement);
874+
}
875+
876+
void _writeElementList2(List<Element2> elements) {
873877
writeUInt30(elements.length);
874878
for (var element in elements) {
875-
writeElement(element);
879+
writeElement2(element);
876880
}
877881
}
878882

879-
void _writeElementList2(List<Element2> elements2) {
880-
var elements = elements2.map((e) => e.asElement!).toList();
881-
_writeElementList(elements);
882-
}
883-
884883
void _writeFormalParameters(
885884
List<ParameterElement> parameters, {
886885
required bool withAnnotations,
@@ -962,7 +961,7 @@ class ResolutionSink extends _SummaryDataWriter {
962961

963962
void _writeTypeAliasElementArguments(TypeImpl type) {
964963
var alias = type.alias;
965-
_writeElement(alias?.element);
964+
_writeElement2(alias?.element2);
966965
if (alias != null) {
967966
_writeTypeList(alias.typeArguments);
968967
}

0 commit comments

Comments
 (0)