Skip to content

Commit 8a71b3f

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Add tracking annotations for TypeAliasElementImpl.
Change-Id: I182cd5cf05a1695ca15c4cd155cebbaa7d724b5e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449062 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent b7522da commit 8a71b3f

File tree

2 files changed

+46
-20
lines changed

2 files changed

+46
-20
lines changed

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

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9986,10 +9986,12 @@ class TopLevelVariableFragmentImpl extends PropertyInducingFragmentImpl
99869986
}
99879987
}
99889988

9989+
@elementClass
99899990
class TypeAliasElementImpl extends ElementImpl
99909991
with DeferredResolutionReadingMixin
99919992
implements TypeAliasElement {
99929993
@override
9994+
@trackedIncludedInId
99939995
final Reference reference;
99949996

99959997
@override
@@ -10003,6 +10005,7 @@ class TypeAliasElementImpl extends ElementImpl
1000310005
}
1000410006

1000510007
@override
10008+
@trackedIncludedInId
1000610009
ElementImpl? get aliasedElement {
1000710010
switch (_firstFragment.aliasedElement) {
1000810011
case InstanceFragmentImpl instance:
@@ -10015,11 +10018,13 @@ class TypeAliasElementImpl extends ElementImpl
1001510018

1001610019
@Deprecated('Use aliasedElement instead')
1001710020
@override
10021+
@trackedIndirectly
1001810022
Element? get aliasedElement2 {
1001910023
return aliasedElement;
1002010024
}
1002110025

1002210026
@override
10027+
@trackedIncludedInId
1002310028
TypeImpl get aliasedType {
1002410029
_ensureReadResolution();
1002510030
return _aliasedType!;
@@ -10032,39 +10037,44 @@ class TypeAliasElementImpl extends ElementImpl
1003210037
}
1003310038

1003410039
/// The aliased type, might be `null` if not yet linked.
10040+
@trackedInternal
1003510041
TypeImpl? get aliasedTypeRaw => _aliasedType;
1003610042

1003710043
@override
10044+
@trackedIncludedInId
1003810045
TypeAliasElementImpl get baseElement => this;
1003910046

1004010047
@override
10048+
@trackedIncludedInId
1004110049
LibraryElementImpl get enclosingElement => library;
1004210050

1004310051
@Deprecated('Use enclosingElement instead')
1004410052
@override
10053+
@trackedIndirectly
1004510054
LibraryElement get enclosingElement2 => enclosingElement;
1004610055

1004710056
@override
10048-
TypeAliasFragmentImpl get firstFragment => _firstFragment;
10057+
@trackedDirectlyOpaque
10058+
TypeAliasFragmentImpl get firstFragment {
10059+
globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
10060+
return _firstFragment;
10061+
}
1004910062

1005010063
@override
10064+
@trackedDirectlyOpaque
1005110065
List<TypeAliasFragmentImpl> get fragments {
10052-
return [
10053-
for (
10054-
TypeAliasFragmentImpl? fragment = _firstFragment;
10055-
fragment != null;
10056-
fragment = fragment.nextFragment
10057-
)
10058-
fragment,
10059-
];
10066+
globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
10067+
return _fragments;
1006010068
}
1006110069

10070+
@trackedIncludedInId
1006210071
bool get isNonFunctionTypeAliasesEnabled {
1006310072
return library.featureSet.isEnabled(Feature.nonfunction_type_aliases);
1006410073
}
1006510074

1006610075
/// Whether this alias is a "proper rename" of [aliasedType], as defined in
1006710076
/// the constructor-tearoffs specification.
10077+
@trackedIndirectly
1006810078
bool get isProperRename {
1006910079
var aliasedType_ = aliasedType;
1007010080
if (aliasedType_ is! InterfaceTypeImpl) {
@@ -10106,21 +10116,26 @@ class TypeAliasElementImpl extends ElementImpl
1010610116
}
1010710117

1010810118
@override
10119+
@trackedIncludedInId
1010910120
bool get isSynthetic {
1011010121
return _firstFragment.isSynthetic;
1011110122
}
1011210123

1011310124
@override
10125+
@trackedIncludedInId
1011410126
ElementKind get kind => ElementKind.TYPE_ALIAS;
1011510127

1011610128
@override
10129+
@trackedIncludedInId
1011710130
LibraryElementImpl get library => super.library!;
1011810131

1011910132
@Deprecated('Use library instead')
1012010133
@override
10134+
@trackedIndirectly
1012110135
LibraryElementImpl get library2 => library;
1012210136

1012310137
@override
10138+
@trackedIncludedInId
1012410139
MetadataImpl get metadata {
1012510140
var annotations = <ElementAnnotationImpl>[];
1012610141
for (var fragment in _fragments) {
@@ -10131,16 +10146,20 @@ class TypeAliasElementImpl extends ElementImpl
1013110146

1013210147
@Deprecated('Use metadata instead')
1013310148
@override
10149+
@trackedIndirectly
1013410150
MetadataImpl get metadata2 => metadata;
1013510151

1013610152
@override
10153+
@trackedIncludedInId
1013710154
String? get name => _firstFragment.name;
1013810155

1013910156
@Deprecated('Use name instead')
1014010157
@override
10158+
@trackedIndirectly
1014110159
String? get name3 => name;
1014210160

1014310161
@override
10162+
@trackedIncludedInId
1014410163
List<TypeParameterElementImpl> get typeParameters {
1014510164
return _firstFragment.typeParameters
1014610165
.map((fragment) => fragment.element)
@@ -10149,34 +10168,40 @@ class TypeAliasElementImpl extends ElementImpl
1014910168

1015010169
@Deprecated('Use typeParameters instead')
1015110170
@override
10171+
@trackedIndirectly
1015210172
List<TypeParameterElementImpl> get typeParameters2 => typeParameters;
1015310173

10154-
/// A list of all of the fragments from which this element is composed.
1015510174
List<TypeAliasFragmentImpl> get _fragments {
10156-
var result = <TypeAliasFragmentImpl>[];
10157-
TypeAliasFragmentImpl? current = _firstFragment;
10158-
while (current != null) {
10159-
result.add(current);
10160-
current = current.nextFragment;
10161-
}
10162-
return result;
10175+
return [
10176+
for (
10177+
TypeAliasFragmentImpl? fragment = _firstFragment;
10178+
fragment != null;
10179+
fragment = fragment.nextFragment
10180+
)
10181+
fragment,
10182+
];
1016310183
}
1016410184

1016510185
@override
10186+
@trackedDirectlyOpaque
1016610187
T? accept<T>(ElementVisitor2<T> visitor) {
10188+
globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
1016710189
return visitor.visitTypeAliasElement(this);
1016810190
}
1016910191

1017010192
@Deprecated('Use accept instead')
1017110193
@override
10194+
@trackedIndirectly
1017210195
T? accept2<T>(ElementVisitor2<T> visitor) => accept(visitor);
1017310196

1017410197
@override
10198+
@trackedIndirectly
1017510199
void appendTo(ElementDisplayStringBuilder builder) {
1017610200
builder.writeTypeAliasElement(this);
1017710201
}
1017810202

1017910203
@override
10204+
@trackedIndirectly
1018010205
TypeImpl instantiate({
1018110206
required List<DartType> typeArguments,
1018210207
required NullabilitySuffix nullabilitySuffix,
@@ -10187,6 +10212,7 @@ class TypeAliasElementImpl extends ElementImpl
1018710212
);
1018810213
}
1018910214

10215+
@trackedIndirectly
1019010216
TypeImpl instantiateImpl({
1019110217
required List<TypeImpl> typeArguments,
1019210218
required NullabilitySuffix nullabilitySuffix,

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,13 +259,13 @@ class NamedTypeBuilder extends TypeBuilder {
259259
}
260260

261261
TypeImpl _getAliasedType(TypeAliasElementImpl element) {
262-
var typedefNode = linker.getLinkingNode2(element.firstFragment);
263-
264262
// If the element is not being linked, the types have already been built.
265-
if (typedefNode == null) {
263+
if (!linker.isLinkingElement(element)) {
266264
return element.aliasedType;
267265
}
268266

267+
var typedefNode = linker.getLinkingNode2(element.firstFragment)!;
268+
269269
// Break a possible recursion.
270270
var existing = element.aliasedTypeRaw;
271271
if (existing != null) {

0 commit comments

Comments
 (0)