Skip to content

Commit fff2466

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Pass only 'firstFragment' to TypeParameterElementImpl constructor.
If we pass fragments at all currently, we can extract data from it. Change-Id: I09ad768dcf0971d0c69efc0966019e1f86b23efa Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/445107 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent 895afef commit fff2466

File tree

5 files changed

+15
-25
lines changed

5 files changed

+15
-25
lines changed

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

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9877,17 +9877,14 @@ class TypeParameterElementImpl extends ElementImpl
98779877
@override
98789878
final String? name;
98799879

9880-
TypeParameterElementImpl({required this.firstFragment, required this.name}) {
9881-
TypeParameterFragmentImpl? fragment = firstFragment;
9882-
while (fragment != null) {
9883-
fragment.element = this;
9884-
fragment = fragment.nextFragment;
9885-
}
9880+
TypeParameterElementImpl({required this.firstFragment})
9881+
: name = firstFragment.name {
9882+
firstFragment.element = this;
98869883
}
98879884

98889885
factory TypeParameterElementImpl.synthetic({required String name}) {
98899886
var fragment = TypeParameterFragmentImpl.synthetic(name: name);
9890-
return TypeParameterElementImpl(firstFragment: fragment, name: name);
9887+
return TypeParameterElementImpl(firstFragment: fragment);
98919888
}
98929889

98939890
@override
@@ -10078,10 +10075,7 @@ class TypeParameterFragmentImpl extends FragmentImpl
1007810075
}
1007910076
// As a side-effect of creating the element, all of the fragments in the
1008010077
// chain will have their `_element` set to the newly created element.
10081-
return TypeParameterElementImpl(
10082-
firstFragment: firstFragment,
10083-
name: firstFragment.name,
10084-
);
10078+
return TypeParameterElementImpl(firstFragment: firstFragment);
1008510079
}
1008610080

1008710081
set element(TypeParameterElementImpl element) {

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1896,7 +1896,6 @@ class ResolutionReader {
18961896
var typeParameterFragment = TypeParameterFragmentImpl(name: fragmentName);
18971897
var typeParameterElement = TypeParameterElementImpl(
18981898
firstFragment: typeParameterFragment,
1899-
name: typeParameterFragment.name,
19001899
);
19011900
_localElements.add(typeParameterElement);
19021901
// TODO(scheglov): why not element?

pkg/analyzer/lib/src/test_utilities/test_library_builder.dart

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ class _LibraryBuilder {
226226

227227
for (var name in spec.typeParameters) {
228228
var tpElement = _createTypeParameterElement(name);
229-
scope.addTypeParameter(name, tpElement);
229+
scope.addTypeParameter(tpElement);
230230
fragment.typeParameters.add(tpElement.firstFragment);
231231
}
232232

@@ -260,7 +260,7 @@ class _LibraryBuilder {
260260
fragment.typeParameters =
261261
spec.typeParameters.map((name) {
262262
var tpElement = _createTypeParameterElement(name);
263-
scope.addTypeParameter(name, tpElement);
263+
scope.addTypeParameter(tpElement);
264264
return tpElement.firstFragment;
265265
}).toList();
266266

@@ -279,7 +279,7 @@ class _LibraryBuilder {
279279

280280
TypeParameterElementImpl _createTypeParameterElement(String name) {
281281
var fragment = TypeParameterFragmentImpl(name: name);
282-
return TypeParameterElementImpl(firstFragment: fragment, name: name);
282+
return TypeParameterElementImpl(firstFragment: fragment);
283283
}
284284

285285
void _populateClasses(LibrarySpec libSpec) {
@@ -291,7 +291,7 @@ class _LibraryBuilder {
291291
fragment.typeParameters =
292292
classSpec.typeParameters.map((name) {
293293
var tpElement = _createTypeParameterElement(name);
294-
scope.addTypeParameter(name, tpElement);
294+
scope.addTypeParameter(tpElement);
295295
return tpElement.firstFragment;
296296
}).toList();
297297

@@ -406,11 +406,8 @@ class _PreFunctionType implements _PreType {
406406
var typeParameters =
407407
this.typeParameters.map((pre) {
408408
var fragment = TypeParameterFragmentImpl(name: pre.name);
409-
var element = TypeParameterElementImpl(
410-
firstFragment: fragment,
411-
name: pre.name,
412-
);
413-
functionScope.addTypeParameter(pre.name, element);
409+
var element = TypeParameterElementImpl(firstFragment: fragment);
410+
functionScope.addTypeParameter(element);
414411
return element;
415412
}).toList();
416413

@@ -510,8 +507,8 @@ class _Scope {
510507
_Scope.root(this._interfaces) : parent = null;
511508

512509
/// Adds a type parameter to the current scope.
513-
void addTypeParameter(String name, TypeParameterElementImpl element) {
514-
_typeParameters[name] = element;
510+
void addTypeParameter(TypeParameterElementImpl element) {
511+
_typeParameters[element.name!] = element;
515512
}
516513

517514
/// Looks up an interface by name.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ extension TypeParameterElement2Extension on TypeParameterElement {
414414
TypeParameterElementImpl freshCopy() {
415415
var fragment = TypeParameterFragmentImpl(name: name);
416416
fragment.bound = bound;
417-
return TypeParameterElementImpl(firstFragment: fragment, name: name);
417+
return TypeParameterElementImpl(firstFragment: fragment);
418418
}
419419
}
420420

pkg/analyzer/test/generated/elements_types_mixin.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ mixin ElementsTypesMixin {
666666
var fragment = TypeParameterFragmentImpl(name: name);
667667
fragment.bound = bound;
668668

669-
var element = TypeParameterElementImpl(firstFragment: fragment, name: name);
669+
var element = TypeParameterElementImpl(firstFragment: fragment);
670670
element.variance = variance;
671671
return element;
672672
}

0 commit comments

Comments
 (0)