Skip to content

Commit 19794aa

Browse files
fshcheglovCommit Queue
authored andcommitted
Fix bug regarding augmenting a field with a field after a non-field augment.
In the commit https://dart-review.googlesource.com/c/sdk/+/446702 these tests were landed with several known flaws. One of these was the processing of the chain: field -> augment getter -> augment field, creating two fields. This CL fixes the behavior such that augment field genuinely augments the existing field instead of creating a new field. Test expectations were correspondingly updated. Change-Id: I6e3c822441a7fb5d2f94a673ed36d409ee5d03e6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/448226 Reviewed-by: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Paul Berry <[email protected]>
1 parent 33f6649 commit 19794aa

File tree

3 files changed

+110
-206
lines changed

3 files changed

+110
-206
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2680,6 +2680,17 @@ class FieldElementImpl extends PropertyInducingElementImpl
26802680
@override
26812681
ElementKind get kind => ElementKind.FIELD;
26822682

2683+
FieldFragmentImpl get lastFragment {
2684+
var result = _firstFragment;
2685+
while (true) {
2686+
if (result.nextFragment case var nextFragment?) {
2687+
result = nextFragment;
2688+
} else {
2689+
return result;
2690+
}
2691+
}
2692+
}
2693+
26832694
@Deprecated('Use library instead')
26842695
@override
26852696
LibraryElementImpl get library2 => library;

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,12 +295,15 @@ class ElementBuilder {
295295

296296
void _handleInstanceFieldFragment(
297297
InstanceElementImpl instanceElement,
298-
FragmentImpl? lastFieldFragment,
298+
FragmentImpl? lastFragment,
299299
FieldFragmentImpl fieldFragment,
300300
) {
301301
var instanceFragment = fieldFragment.enclosingFragment;
302302
instanceFragment.addField(fieldFragment);
303303

304+
var lastFieldElement = _fieldElement(lastFragment);
305+
var lastFieldFragment = lastFieldElement?.lastFragment;
306+
304307
if (fieldFragment.isAugmentation &&
305308
lastFieldFragment is FieldFragmentImpl) {
306309
lastFieldFragment.addFragment(fieldFragment);

0 commit comments

Comments
 (0)