Skip to content

Commit 3dc46c3

Browse files
fshcheglovCommit Queue
authored andcommitted
Update tests for class augmentations.
Change-Id: I886da67c840aa931716bf2be00533650fdcaa82b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/446702 Reviewed-by: Konstantin Shcheglov <[email protected]> Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 2f80a99 commit 3dc46c3

File tree

3 files changed

+3132
-8199
lines changed

3 files changed

+3132
-8199
lines changed

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

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,11 @@ class ElementBuilder {
275275
var interfaceFragment = fragment.enclosingFragment;
276276
interfaceFragment.addConstructor(fragment);
277277

278+
if (fragment.isAugmentation && lastFragment is ConstructorFragmentImpl) {
279+
lastFragment.addFragment(fragment);
280+
return;
281+
}
282+
278283
var element = ConstructorElementImpl(
279284
name: fragment.name,
280285
reference: _addInstanceReference(
@@ -284,6 +289,7 @@ class ElementBuilder {
284289
),
285290
firstFragment: fragment,
286291
);
292+
287293
interfaceElement.addConstructor(element);
288294
}
289295

@@ -435,19 +441,20 @@ class ElementBuilder {
435441

436442
if (lastFragment is MethodFragmentImpl && fragment.isAugmentation) {
437443
lastFragment.addFragment(fragment);
438-
} else {
439-
instanceElement.addMethod(
440-
MethodElementImpl(
441-
name: fragment.name,
442-
reference: _addInstanceReference(
443-
instanceElement,
444-
'@method',
445-
fragment.lookupName,
446-
),
447-
firstFragment: fragment,
448-
),
449-
);
444+
return;
450445
}
446+
447+
instanceElement.addMethod(
448+
MethodElementImpl(
449+
name: fragment.name,
450+
reference: _addInstanceReference(
451+
instanceElement,
452+
'@method',
453+
fragment.lookupName,
454+
),
455+
firstFragment: fragment,
456+
),
457+
);
451458
}
452459

453460
void _handleInstanceSetterFragment(

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

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -131,19 +131,22 @@ class TypesBuilder {
131131
var fragment = node.declaredFragment!;
132132
var element = fragment.element;
133133

134-
var extendsClause = node.extendsClause;
135-
if (extendsClause != null) {
136-
var type = extendsClause.superclass.type;
137-
if (type is InterfaceTypeImpl && _isInterfaceTypeClass(type)) {
138-
element.supertype = type;
134+
if (element.supertype == null) {
135+
var extendsClause = node.extendsClause;
136+
if (extendsClause != null) {
137+
var type = extendsClause.superclass.type;
138+
if (type is InterfaceTypeImpl && _isInterfaceTypeClass(type)) {
139+
element.supertype = type;
140+
}
141+
} else if (element.isDartCoreObject) {
142+
fragment.setModifier(Modifier.DART_CORE_OBJECT, true);
139143
}
140-
} else if (element.isDartCoreObject) {
141-
fragment.setModifier(Modifier.DART_CORE_OBJECT, true);
142144
}
143145

144-
element.interfaces = _toInterfaceTypeList(
145-
node.implementsClause?.interfaces,
146-
);
146+
element.interfaces = [
147+
...element.interfaces,
148+
..._toInterfaceTypeList(node.implementsClause?.interfaces),
149+
];
147150

148151
_addFragmentWithClause(fragment, node.withClause);
149152
}
@@ -345,7 +348,6 @@ class TypesBuilder {
345348
node.onClause?.superclassConstraints,
346349
);
347350
element.superclassConstraints = constraints;
348-
349351
element.interfaces = _toInterfaceTypeList(
350352
node.implementsClause?.interfaces,
351353
);
@@ -651,10 +653,10 @@ class _MixinsInference {
651653
library.featureSet,
652654
typeSystemOperations: typeSystemOperations,
653655
);
654-
for (var fragment in declaration.fragments) {
655-
var inferred = inference.perform(fragment.withClause);
656-
element.mixins = inferred;
657-
}
656+
element.mixins = [
657+
for (var fragment in declaration.fragments)
658+
...inference.perform(fragment.withClause),
659+
];
658660
} finally {
659661
element.mixinInferenceCallback = null;
660662
}

0 commit comments

Comments
 (0)