Skip to content

Commit 535bda9

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Change the return type of 'name3' implementations to nullable, update some bodies.
In particular, MethodElementImpl2, which can have a fragment without a name, and can have a name without an actual fragment (when the fragment is synthetic). Change-Id: Ib3383867e4351e9a11ef39ce12bf5670a4db9ee2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/391701 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 1770e1a commit 535bda9

File tree

14 files changed

+50
-50
lines changed

14 files changed

+50
-50
lines changed

pkg/analysis_server/lib/src/protocol_server.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ Location? newLocation_fromElement2(engine.Element2? element) {
289289
return _locationForArgs2(fragment, range);
290290
} else if (element is engine.LabelElement2) {
291291
var offset = element.nameOffset;
292-
var length = element.name3.length;
292+
var length = element.name3?.length ?? 0;
293293
var range = engine.SourceRange(offset, length);
294294
var fragment = element.enclosingFunction;
295295
return _locationForArgs2(fragment, range);

pkg/analysis_server/lib/src/services/correction/dart/change_to.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ class ChangeTo extends ResolvedCorrectionProducer {
306306
if (superType == null) return;
307307

308308
for (var constructor in superType.constructors2) {
309-
if (constructor.name3.isEmpty) {
309+
if (constructor.name3 == 'new') {
310310
var list = _formalParameterSuggestions(constructor, formalParameters);
311311
finder._updateList(list);
312312
break;

pkg/analyzer/lib/dart/element/element2.dart

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ abstract class ConstructorElement2
253253
///
254254
/// The name of the unnamed constructor is `new`.
255255
@override
256-
String get name3;
256+
String? get name3;
257257

258258
/// The constructor to which this constructor is redirecting.
259259
///
@@ -977,9 +977,6 @@ abstract class GetterElement implements ExecutableElement2, FragmentedElement {
977977
@override
978978
GetterFragment? get firstFragment;
979979

980-
@override
981-
String? get name3;
982-
983980
/// The field or top-level variable associated with this getter.
984981
///
985982
/// If this getter was explicitly defined (is not synthetic) then the variable
@@ -1196,9 +1193,6 @@ abstract class LabelElement2 implements Element2 {
11961193
@override
11971194
LibraryElement2 get library2;
11981195

1199-
@override
1200-
String get name3;
1201-
12021196
/// The offset of the name in this element.
12031197
int get nameOffset;
12041198
}
@@ -1750,9 +1744,6 @@ abstract class PrefixElement2 implements Element2, FragmentedElement {
17501744
@override
17511745
LibraryElement2 get library2;
17521746

1753-
@override
1754-
String? get name3;
1755-
17561747
/// The name lookup scope for this import prefix.
17571748
///
17581749
/// It consists of elements imported into the enclosing library with this
@@ -1910,9 +1901,6 @@ abstract class SetterElement implements ExecutableElement2, FragmentedElement {
19101901
@override
19111902
SetterFragment? get firstFragment;
19121903

1913-
@override
1914-
String? get name3;
1915-
19161904
/// The field or top-level variable associated with this setter.
19171905
///
19181906
/// If this setter was explicitly defined (is not synthetic) then the variable

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

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,11 @@ class ClassElementImpl extends ClassOrMixinElementImpl
605605
implicitConstructor.name = name;
606606
implicitConstructor.nameOffset = -1;
607607

608+
implicitConstructor.element = ConstructorElementImpl2(
609+
superclassConstructor.element.name3,
610+
implicitConstructor,
611+
);
612+
608613
var containerRef = reference!.getChild('@constructor');
609614
var referenceName = name.ifNotEmptyOrElse('new');
610615
var implicitReference = containerRef.getChild(referenceName);
@@ -1372,15 +1377,21 @@ class ConstructorElementImpl extends ExecutableElementImpl
13721377
if (_element != null) {
13731378
return _element!;
13741379
}
1380+
13751381
ConstructorFragment firstFragment = this;
13761382
var previousFragment = firstFragment.previousFragment;
13771383
while (previousFragment != null) {
13781384
firstFragment = previousFragment;
13791385
previousFragment = firstFragment.previousFragment;
13801386
}
1387+
firstFragment as ConstructorElementImpl;
1388+
13811389
// As a side-effect of creating the element, all of the fragments in the
13821390
// chain will have their `_element` set to the newly created element.
1383-
return ConstructorElementImpl2(firstFragment as ConstructorElementImpl);
1391+
return ConstructorElementImpl2(
1392+
firstFragment.name2?.name ?? 'new',
1393+
firstFragment,
1394+
);
13841395
}
13851396

13861397
set element(ConstructorElement2 element) => _element = element;
@@ -1530,10 +1541,13 @@ class ConstructorElementImpl2 extends ExecutableElementImpl2
15301541
FragmentedAnnotatableElementMixin<ConstructorFragment>,
15311542
FragmentedElementMixin<ConstructorFragment>
15321543
implements ConstructorElement2 {
1544+
@override
1545+
final String? name3;
1546+
15331547
@override
15341548
final ConstructorElementImpl firstFragment;
15351549

1536-
ConstructorElementImpl2(this.firstFragment) {
1550+
ConstructorElementImpl2(this.name3, this.firstFragment) {
15371551
ConstructorElementImpl? fragment = firstFragment;
15381552
while (fragment != null) {
15391553
fragment.element = this;
@@ -1563,9 +1577,6 @@ class ConstructorElementImpl2 extends ExecutableElementImpl2
15631577
@override
15641578
ElementKind get kind => ElementKind.CONSTRUCTOR;
15651579

1566-
@override
1567-
String get name3 => firstFragment.name;
1568-
15691580
@override
15701581
ConstructorElement2? get redirectedConstructor2 =>
15711582
(firstFragment.redirectedConstructor?.declaration
@@ -3997,7 +4008,7 @@ class FieldElementImpl2 extends PropertyInducingElementImpl2
39974008
ElementKind get kind => ElementKind.FIELD;
39984009

39994010
@override
4000-
String get name3 => firstFragment.name;
4011+
String? get name3 => firstFragment.name;
40014012

40024013
@override
40034014
SetterElement? get setter2 => firstFragment.setter?.element as SetterElement?;
@@ -4167,7 +4178,7 @@ class FormalParameterElementImpl extends PromotableElementImpl2
41674178
as LibraryElement2;
41684179

41694180
@override
4170-
String get name3 => firstFragment.name;
4181+
String? get name3 => firstFragment.name;
41714182

41724183
@override
41734184
// TODO(augmentations): Implement the merge of formal parameters.
@@ -7578,15 +7589,18 @@ class MethodElementImpl extends ExecutableElementImpl
75787589
if (_element != null) {
75797590
return _element!;
75807591
}
7592+
75817593
MethodFragment firstFragment = this;
75827594
var previousFragment = firstFragment.previousFragment;
75837595
while (previousFragment != null) {
75847596
firstFragment = previousFragment;
75857597
previousFragment = firstFragment.previousFragment;
75867598
}
7599+
firstFragment as MethodElementImpl;
7600+
75877601
// As a side-effect of creating the element, all of the fragments in the
75887602
// chain will have their `_element` set to the newly created element.
7589-
return MethodElementImpl2(firstFragment as MethodElementImpl);
7603+
return MethodElementImpl2(firstFragment.name2?.name, firstFragment);
75907604
}
75917605

75927606
set element(MethodElement2 element) => _element = element;
@@ -7651,10 +7665,13 @@ class MethodElementImpl2 extends ExecutableElementImpl2
76517665
FragmentedAnnotatableElementMixin<MethodFragment>,
76527666
FragmentedElementMixin<MethodFragment>
76537667
implements MethodElement2 {
7668+
@override
7669+
final String? name3;
7670+
76547671
@override
76557672
final MethodElementImpl firstFragment;
76567673

7657-
MethodElementImpl2(this.firstFragment) {
7674+
MethodElementImpl2(this.name3, this.firstFragment) {
76587675
MethodElementImpl? fragment = firstFragment;
76597676
while (fragment != null) {
76607677
fragment.element = this;
@@ -7675,9 +7692,6 @@ class MethodElementImpl2 extends ExecutableElementImpl2
76757692
@override
76767693
ElementKind get kind => ElementKind.METHOD;
76777694

7678-
@override
7679-
String get name3 => firstFragment.name;
7680-
76817695
@override
76827696
T? accept2<T>(ElementVisitor2<T> visitor) {
76837697
return visitor.visitMethodElement(this);
@@ -9483,10 +9497,7 @@ abstract class PropertyInducingElementImpl
94839497
}
94849498

94859499
abstract class PropertyInducingElementImpl2 extends VariableElementImpl2
9486-
implements PropertyInducingElement2 {
9487-
@override
9488-
String get name3;
9489-
}
9500+
implements PropertyInducingElement2 {}
94909501

94919502
/// Instances of this class are set for fields and top-level variables
94929503
/// to perform top-level type inference during linking.
@@ -9810,7 +9821,7 @@ class TopLevelVariableElementImpl2 extends PropertyInducingElementImpl2
98109821
ElementKind get kind => ElementKind.TOP_LEVEL_VARIABLE;
98119822

98129823
@override
9813-
String get name3 => firstFragment.name;
9824+
String? get name3 => firstFragment.name;
98149825

98159826
@override
98169827
SetterElement? get setter2 =>
@@ -10129,7 +10140,7 @@ class TypeAliasElementImpl2 extends TypeDefiningElementImpl2
1012910140
ElementKind get kind => ElementKind.TYPE_ALIAS;
1013010141

1013110142
@override
10132-
String get name3 => firstFragment.name;
10143+
String? get name3 => firstFragment.name2?.name;
1013310144

1013410145
@override
1013510146
List<TypeParameterElement2> get typeParameters2 =>
@@ -10666,7 +10677,7 @@ mixin WrappedElementMixin implements ElementImpl2 {
1066610677
LibraryElement2? get library2 => _wrappedElement.library2;
1066710678

1066810679
@override
10669-
String get name3 => _wrappedElement.name!;
10680+
String? get name3 => _wrappedElement.name3;
1067010681

1067110682
ElementImpl get _wrappedElement;
1067210683

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,6 +1130,7 @@ class InheritanceManager3 {
11301130
result.typeParameters = resultType.typeFormals;
11311131
result.returnType = resultType.returnType;
11321132
result.parameters = resultType.parameters;
1133+
result.element = MethodElementImpl2(firstMethod.name, result);
11331134
return result;
11341135
} else {
11351136
var firstAccessor = first as PropertyAccessorElement;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class ConstructorMember extends ExecutableMember
7272
String get name => declaration.name;
7373

7474
@override
75-
String get name3 => declaration.name;
75+
String? get name3 => _element2.name3;
7676

7777
@override
7878
int? get nameEnd => declaration.nameEnd;
@@ -556,7 +556,7 @@ class FieldMember extends VariableMember
556556
String get name => declaration.name;
557557

558558
@override
559-
String get name3 => declaration.name;
559+
String? get name3 => _element2.name3;
560560

561561
@override
562562
Element2 get nonSynthetic2 => _element2.nonSynthetic2;
@@ -989,7 +989,7 @@ class MethodMember extends ExecutableMember
989989
String get name => declaration.name;
990990

991991
@override
992-
String get name3 => declaration.name;
992+
String? get name3 => _element2.name3;
993993

994994
@override
995995
Source get source => _declaration.source!;
@@ -1247,7 +1247,7 @@ abstract class PropertyAccessorMember extends ExecutableMember
12471247
String get name => declaration.name;
12481248

12491249
@override
1250-
String get name3 => declaration.name;
1250+
String? get name3 => _element2.name3;
12511251

12521252
@override
12531253
Source get source => _declaration.source!;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ abstract class _FindElementBase {
503503
return _findInClassesLike(
504504
className: name,
505505
fromClass: (e) => e.constructors2.firstWhereOrNull((element) {
506-
return element.name3.isEmpty;
506+
return element.name3 == 'new';
507507
}),
508508
fromExtension: (_) => null,
509509
);

pkg/analyzer/test/src/summary/element_text.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -253,13 +253,10 @@ class _Element2Writer extends _AbstractElementWriter {
253253
}
254254

255255
String _elementName(Element2 e) {
256-
var name = e.name3 ?? '<null>';
256+
var name = e.name3 ?? '<null-name>';
257257
if (e is SetterElement) {
258258
expect(name, endsWith('='));
259259
}
260-
if (name.isEmpty && e is ConstructorElement2) {
261-
return 'new';
262-
}
263260
return name;
264261
}
265262

pkg/analyzer/test/src/summary/elements/class_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18252,7 +18252,7 @@ library
1825218252
synthetic new
1825318253
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
1825418254
methods
18255-
18255+
<null-name>
1825618256
firstFragment: <testLibraryFragment>::@class::A::@method::0
1825718257
''');
1825818258
}

pkg/analyzer/test/src/summary/elements/extension_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ library
670670
reference: <testLibraryFragment>::@extension::0
671671
element: <testLibraryFragment>::@extension::0#element
672672
extensions
673-
extension <null>
673+
extension <null-name>
674674
firstFragment: <testLibraryFragment>::@extension::0
675675
''');
676676
}

0 commit comments

Comments
 (0)