Skip to content

Commit 2ee25c7

Browse files
fshcheglovCommit Queue
authored andcommitted
Implement augmentation tests for Extension and ExtensionType.
This CL also adds typeParameter linking between fragments in ExtensionElement and ExtensionTypeElement. Change-Id: If375c9f1b6a6d422be1d22067f6c8960002e1363 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449383 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 7b2df64 commit 2ee25c7

File tree

5 files changed

+3950
-8218
lines changed

5 files changed

+3950
-8218
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2524,6 +2524,10 @@ class ExtensionElementImpl extends InstanceElementImpl
25242524
previous.addFragment(current);
25252525
return current;
25262526
});
2527+
TypeParameterFragmentImpl._linkFragments(
2528+
fragments,
2529+
getFragments: (f) => f.typeParameters,
2530+
);
25272531
}
25282532
}
25292533

@@ -2708,6 +2712,10 @@ class ExtensionTypeElementImpl extends InterfaceElementImpl
27082712
previous.addFragment(current);
27092713
return current;
27102714
});
2715+
TypeParameterFragmentImpl._linkFragments(
2716+
fragments,
2717+
getFragments: (f) => f.typeParameters,
2718+
);
27112719
}
27122720
}
27132721

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,13 @@ class ElementBuilder {
255255

256256
if (fragment.isAugmentation && lastFragment is ExtensionFragmentImpl) {
257257
lastFragment.addFragment(fragment);
258+
259+
_linkTypeParameters(
260+
lastFragments: lastFragment.typeParameters,
261+
fragments: fragment.typeParameters,
262+
add: fragment.addTypeParameter,
263+
);
264+
258265
return;
259266
}
260267

@@ -276,6 +283,13 @@ class ElementBuilder {
276283

277284
if (fragment.isAugmentation && lastFragment is ExtensionTypeFragmentImpl) {
278285
lastFragment.addFragment(fragment);
286+
287+
_linkTypeParameters(
288+
lastFragments: lastFragment.typeParameters,
289+
fragments: fragment.typeParameters,
290+
add: fragment.addTypeParameter,
291+
);
292+
279293
return;
280294
}
281295

@@ -1841,6 +1855,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
18411855
var fieldFragment = FieldFragmentImpl(
18421856
name: _getFragmentName(fieldNameToken),
18431857
);
1858+
fieldFragment.isAugmentation = extensionFragment.isAugmentation;
18441859
fieldFragment.isFinal = true;
18451860
fieldFragment.metadata = _buildMetadata(representation.fieldMetadata);
18461861

@@ -1860,7 +1875,7 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
18601875
ConstructorFragmentImpl(
18611876
name: representation.constructorName?.name.lexeme ?? 'new',
18621877
)
1863-
..isAugmentation = extensionNode.augmentKeyword != null
1878+
..isAugmentation = extensionFragment.isAugmentation
18641879
..isConst = extensionNode.constKeyword != null
18651880
..formalParameters = [formalParameterFragment];
18661881
constructorFragment.typeName = extensionFragment.name;

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,10 +222,12 @@ class TypesBuilder {
222222
}
223223

224224
void _extensionDeclaration(ExtensionDeclarationImpl node) {
225-
var fragment = node.declaredFragment!;
226225
if (node.onClause case var onClause?) {
227-
var extendedType = onClause.extendedType.typeOrThrow;
228-
fragment.element.extendedType = extendedType;
226+
var fragment = node.declaredFragment!;
227+
if (fragment.previousFragment == null) {
228+
var extendedType = onClause.extendedType.typeOrThrow;
229+
fragment.element.extendedType = extendedType;
230+
}
229231
}
230232
}
231233

@@ -240,7 +242,7 @@ class TypesBuilder {
240242
.where(typeSystem.isValidExtensionTypeSuperinterface)
241243
.toFixedList();
242244
if (interfaces != null) {
243-
element.interfaces = interfaces;
245+
element.interfaces = [...element.interfaces, ...interfaces];
244246
}
245247
}
246248

0 commit comments

Comments
 (0)