Skip to content

Commit 0df705a

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Don't store 'InstanceElementImpl2.methods', build from 'methods2'.
Change-Id: I5804fe3f0b246bf8184c06d6ca05763c751e6139 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394563 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent e0e4b41 commit 0df705a

File tree

6 files changed

+61
-33
lines changed

6 files changed

+61
-33
lines changed

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

Lines changed: 53 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5340,9 +5340,6 @@ abstract class InstanceElementImpl2 extends ElementImpl2
53405340
@override
53415341
List<PropertyAccessorElement> accessors = [];
53425342

5343-
@override
5344-
List<MethodElement> methods = [];
5345-
53465343
@override
53475344
List<MethodElementImpl2> methods2 = [];
53485345

@@ -5409,6 +5406,42 @@ abstract class InstanceElementImpl2 extends ElementImpl2
54095406
@override
54105407
Metadata get metadata2 => firstFragment.metadata2;
54115408

5409+
@override
5410+
List<MethodElement> get methods {
5411+
return methods2.map((element) {
5412+
var firstTypeParameters = firstFragment.typeParameters;
5413+
5414+
var lastFragment = element.lastFragment;
5415+
var lastInstance = lastFragment.enclosingFragment;
5416+
if (identical(lastInstance, firstFragment)) {
5417+
return lastFragment;
5418+
}
5419+
5420+
var lastTypeParameters = lastInstance.typeParameters2;
5421+
if (firstTypeParameters.isEmpty && lastTypeParameters.isEmpty) {
5422+
return lastFragment;
5423+
}
5424+
5425+
MapSubstitution toFirstFragment;
5426+
if (lastTypeParameters.length == firstTypeParameters.length) {
5427+
toFirstFragment = Substitution.fromPairs(
5428+
lastTypeParameters,
5429+
firstTypeParameters.instantiateNone(),
5430+
);
5431+
} else {
5432+
toFirstFragment = Substitution.fromPairs(
5433+
lastTypeParameters,
5434+
List.filled(
5435+
lastTypeParameters.length,
5436+
InvalidTypeImpl.instance,
5437+
),
5438+
);
5439+
}
5440+
5441+
return MethodMember(lastFragment, toFirstFragment, Substitution.empty);
5442+
}).toList();
5443+
}
5444+
54125445
@override
54135446
String? get name3 => firstFragment.name;
54145447

@@ -7640,8 +7673,8 @@ class MethodElementImpl extends ExecutableElementImpl
76407673
}
76417674

76427675
@override
7643-
InstanceFragment? get enclosingFragment =>
7644-
enclosingElement3 as InstanceFragment;
7676+
InstanceElementImpl get enclosingFragment =>
7677+
enclosingElement3 as InstanceElementImpl;
76457678

76467679
/// Set whether this class is abstract.
76477680
set isAbstract(bool isAbstract) {
@@ -7674,7 +7707,7 @@ class MethodElementImpl extends ExecutableElementImpl
76747707
}
76757708

76767709
@override
7677-
MethodFragment? get nextFragment => augmentation;
7710+
MethodElementImpl? get nextFragment => augmentation;
76787711

76797712
@override
76807713
Element get nonSynthetic {
@@ -7685,7 +7718,7 @@ class MethodElementImpl extends ExecutableElementImpl
76857718
}
76867719

76877720
@override
7688-
MethodFragment? get previousFragment => augmentationTarget;
7721+
MethodElementImpl? get previousFragment => augmentationTarget;
76897722

76907723
@override
76917724
T? accept<T>(ElementVisitor<T> visitor) => visitor.visitMethodElement(this);
@@ -7726,6 +7759,17 @@ class MethodElementImpl2 extends ExecutableElementImpl2
77267759
@override
77277760
ElementKind get kind => ElementKind.METHOD;
77287761

7762+
MethodElementImpl get lastFragment {
7763+
var lastFragment = firstFragment;
7764+
while (true) {
7765+
if (lastFragment.nextFragment case var nextFragment?) {
7766+
lastFragment = nextFragment;
7767+
} else {
7768+
return lastFragment;
7769+
}
7770+
}
7771+
}
7772+
77297773
@override
77307774
T? accept2<T>(ElementVisitor2<T> visitor) {
77317775
return visitor.visitMethodElement(this);
@@ -10583,8 +10627,8 @@ mixin TypeParameterizedElementMixin on ElementImpl
1058310627
}
1058410628

1058510629
@override
10586-
List<TypeParameterFragment> get typeParameters2 =>
10587-
typeParameters.cast<TypeParameterFragment>();
10630+
List<TypeParameterElementImpl> get typeParameters2 =>
10631+
typeParameters.cast<TypeParameterElementImpl>();
1058810632

1058910633
List<TypeParameterElement> get typeParameters_unresolved {
1059010634
return _typeParameters;

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,6 @@ abstract class InstanceElementBuilder<E extends InstanceElementImpl2,
269269

270270
augmented.fields.addAll(firstFragment.fields);
271271
augmented.accessors.addAll(firstFragment.accessors);
272-
augmented.methods.addAll(firstFragment.methods);
273272

274273
if (augmented is InterfaceElementImpl2) {
275274
if (firstFragment is InterfaceElementImpl) {
@@ -359,16 +358,6 @@ abstract class InstanceElementBuilder<E extends InstanceElementImpl2,
359358
element, toFirstFragment, Substitution.empty);
360359
}),
361360
];
362-
363-
element.methods = [
364-
...element.methods.notAugmented,
365-
...augmentation.methods.notAugmented.map((element) {
366-
if (toFirstFragment.map.isEmpty) {
367-
return element;
368-
}
369-
return MethodMember(element, toFirstFragment, Substitution.empty);
370-
}),
371-
];
372361
}
373362
}
374363

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ class ClassElementLinkedData extends ElementLinkedData<ClassElementImpl> {
147147
augmented.fields = reader.readElementList();
148148
augmented.constructors = reader.readElementList();
149149
augmented.accessors = reader.readElementList();
150-
augmented.methods = reader.readElementList();
151150
}
152151

153152
applyConstantOffsets?.perform();
@@ -372,7 +371,6 @@ class EnumElementLinkedData extends ElementLinkedData<EnumElementImpl> {
372371
augmented.fields = reader.readElementList();
373372
augmented.constructors = reader.readElementList();
374373
augmented.accessors = reader.readElementList();
375-
augmented.methods = reader.readElementList();
376374
}
377375
applyConstantOffsets?.perform();
378376
}
@@ -405,7 +403,6 @@ class ExtensionElementLinkedData
405403
var augmented = element.augmentedInternal;
406404
augmented.fields = reader.readElementList();
407405
augmented.accessors = reader.readElementList();
408-
augmented.methods = reader.readElementList();
409406
augmented.extendedType = extendedType;
410407
}
411408

@@ -442,7 +439,6 @@ class ExtensionTypeElementLinkedData
442439
augmented.fields = reader.readElementList();
443440
augmented.accessors = reader.readElementList();
444441
augmented.constructors = reader.readElementList();
445-
augmented.methods = reader.readElementList();
446442
augmented
447443
..primaryConstructor = element.constructors.first
448444
..representation = element.fields.first
@@ -1946,7 +1942,6 @@ class MixinElementLinkedData extends ElementLinkedData<MixinElementImpl> {
19461942
augmented.interfaces = reader._readInterfaceTypeList();
19471943
augmented.fields = reader.readElementList();
19481944
augmented.accessors = reader.readElementList();
1949-
augmented.methods = reader.readElementList();
19501945
}
19511946

19521947
applyConstantOffsets?.perform();

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ class BundleWriter {
165165
_resolutionSink._writeElementList(augmented.fields);
166166
_resolutionSink._writeElementList(augmented.constructors);
167167
_resolutionSink._writeElementList(augmented.accessors);
168-
_resolutionSink._writeElementList(augmented.methods);
169168
}
170169

171170
if (!element.isMixinApplication) {
@@ -258,7 +257,6 @@ class BundleWriter {
258257
_resolutionSink._writeElementList(augmented.fields);
259258
_resolutionSink._writeElementList(augmented.constructors);
260259
_resolutionSink._writeElementList(augmented.accessors);
261-
_resolutionSink._writeElementList(augmented.methods);
262260
}
263261

264262
_writeList(
@@ -320,7 +318,6 @@ class BundleWriter {
320318
_resolutionSink.writeType(augmented.extendedType);
321319
_resolutionSink._writeElementList(augmented.fields);
322320
_resolutionSink._writeElementList(augmented.accessors);
323-
_resolutionSink._writeElementList(augmented.methods);
324321
}
325322

326323
_writeList(
@@ -353,7 +350,6 @@ class BundleWriter {
353350
_resolutionSink._writeElementList(augmented.fields);
354351
_resolutionSink._writeElementList(augmented.accessors);
355352
_resolutionSink._writeElementList(augmented.constructors);
356-
_resolutionSink._writeElementList(augmented.methods);
357353
_resolutionSink.writeType(augmented.typeErasure);
358354
}
359355

@@ -532,7 +528,6 @@ class BundleWriter {
532528
_resolutionSink._writeTypeList(augmented.interfaces);
533529
_resolutionSink._writeElementList(augmented.fields);
534530
_resolutionSink._writeElementList(augmented.accessors);
535-
_resolutionSink._writeElementList(augmented.methods);
536531
}
537532

538533
_writeList(

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,14 @@ class _MockSdkElementsBuilder {
925925
element.fields = fragment.fields;
926926
element.constructors = fragment.constructors;
927927
element.accessors = fragment.accessors;
928-
element.methods = fragment.methods;
928+
929+
element.methods2 = fragment.methods.map((firstFragment) {
930+
return MethodElementImpl2(
931+
Reference.root(),
932+
firstFragment.name2,
933+
firstFragment,
934+
);
935+
}).toList();
929936
}
930937

931938
LibraryElementImpl _buildCore() {

pkg/analyzer/test/generated/elements_types_mixin.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ mixin ElementsTypesMixin {
147147
var element = ClassElementImpl2(Reference.root(), fragment);
148148
element.mixins = fragment.mixins;
149149
element.interfaces = fragment.interfaces;
150-
element.methods = fragment.methods;
151150

152151
return fragment;
153152
}
@@ -434,7 +433,6 @@ mixin ElementsTypesMixin {
434433
var element = MixinElementImpl2(Reference.root(), fragment);
435434
element.superclassConstraints = fragment.superclassConstraints;
436435
element.interfaces = fragment.interfaces;
437-
element.methods = fragment.methods;
438436

439437
return fragment;
440438
}

0 commit comments

Comments
 (0)