Skip to content

Commit b9348c7

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Handle patches as parts
Change-Id: I50a965b8061572af8a5e408b037648b1f7ff2e0b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/413201 Reviewed-by: Chloe Stefantsova <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent 24b14ce commit b9348c7

File tree

140 files changed

+4238
-1407
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

140 files changed

+4238
-1407
lines changed

pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15370,6 +15370,28 @@ const MessageCode messagePatchDeclarationOrigin = const MessageCode(
1537015370
problemMessage: r"""This is the origin declaration.""",
1537115371
);
1537215372

15373+
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
15374+
const Code<Null> codePatchExtensionOrigin = messagePatchExtensionOrigin;
15375+
15376+
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
15377+
const MessageCode messagePatchExtensionOrigin = const MessageCode(
15378+
"PatchExtensionOrigin",
15379+
severity: Severity.context,
15380+
problemMessage: r"""This is the origin extension.""",
15381+
);
15382+
15383+
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
15384+
const Code<Null> codePatchExtensionTypeParametersMismatch =
15385+
messagePatchExtensionTypeParametersMismatch;
15386+
15387+
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
15388+
const MessageCode messagePatchExtensionTypeParametersMismatch =
15389+
const MessageCode(
15390+
"PatchExtensionTypeParametersMismatch",
15391+
problemMessage:
15392+
r"""A patch extension must have the same number of type variables as its origin extension.""",
15393+
);
15394+
1537315395
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
1537415396
const Template<Message Function(String name, Uri uri_)>
1537515397
templatePatchInjectionFailed =

pkg/front_end/lib/src/base/incremental_compiler.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1635,7 +1635,6 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
16351635
List<Library> removedLibraries = <Library>[];
16361636
bool removedDillBuilders = false;
16371637
for (Uri uri in potentiallyReferencedLibraries.keys) {
1638-
// Coverage-ignore-block(suite): Not run.
16391638
if (uri.isScheme("package")) continue;
16401639
LibraryBuilder? builder =
16411640
currentKernelTarget.loader.deregisterLoadedLibraryBuilder(uri);
@@ -1655,12 +1654,13 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
16551654
_componentProblems.removeLibrary(lib, uriTranslator, partsUsed);
16561655

16571656
// Technically this isn't necessary as the uri is not a package-uri.
1658-
_incrementalSerializer?.invalidate(builder.fileUri);
1657+
_incrementalSerializer
1658+
// Coverage-ignore(suite): Not run.
1659+
?.invalidate(builder.fileUri);
16591660
}
16601661
}
16611662
hierarchy.applyTreeChanges(removedLibraries, const [], const []);
16621663
if (removedDillBuilders) {
1663-
// Coverage-ignore-block(suite): Not run.
16641664
_makeDillLoaderLibrariesUpToDateWithBuildersMap();
16651665
}
16661666

@@ -1693,7 +1693,6 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
16931693
[Map<Uri, Source>? uriToSourceExtra,
16941694
Set<Uri?>? partsUsed]) {
16951695
uriToSource.remove(builder.fileUri);
1696-
// Coverage-ignore(suite): Not run.
16971696
uriToSourceExtra?.remove(builder.fileUri);
16981697
Library lib = builder.library;
16991698
for (LibraryPart part in lib.parts) {

pkg/front_end/lib/src/base/scope.dart

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,6 +1237,7 @@ abstract class MergedScope<T extends Builder> {
12371237

12381238
SourceLibraryBuilder get originLibrary;
12391239

1240+
// Coverage-ignore(suite): Not run.
12401241
void _addBuilderToMergedScope(
12411242
String name, Builder newBuilder, Builder? existingBuilder,
12421243
{required bool setter, required bool inPatchLibrary}) {
@@ -1276,7 +1277,6 @@ abstract class MergedScope<T extends Builder> {
12761277
? templateNonPatchLibraryConflict.withArguments(name)
12771278
: templateNonAugmentationLibraryConflict.withArguments(name);
12781279
} else {
1279-
// Coverage-ignore-block(suite): Not run.
12801280
message = inPatchLibrary
12811281
? templateNonPatchClassMemberConflict.withArguments(name)
12821282
: templateNonAugmentationClassMemberConflict
@@ -1312,9 +1312,7 @@ abstract class MergedScope<T extends Builder> {
13121312
} else {
13131313
message = inPatchLibrary
13141314
? templateUnmatchedPatchDeclaration.withArguments(name)
1315-
:
1316-
// Coverage-ignore(suite): Not run.
1317-
templateUnmatchedAugmentationDeclaration.withArguments(name);
1315+
: templateUnmatchedAugmentationDeclaration.withArguments(name);
13181316
}
13191317
originLibrary.addProblem(
13201318
message, newBuilder.fileOffset, name.length, newBuilder.fileUri);
@@ -1351,6 +1349,7 @@ abstract class MergedScope<T extends Builder> {
13511349
if (augmentationMember == null) {
13521350
augmentationNameSpace.addLocalMember(name, member, setter: setter);
13531351
if (member is ExtensionBuilder) {
1352+
// Coverage-ignore-block(suite): Not run.
13541353
augmentationNameSpace.addExtension(member);
13551354
}
13561355
}
@@ -1364,7 +1363,9 @@ abstract class MergedScope<T extends Builder> {
13641363
// `scope.forEachLocalMember`/`scope.forEachLocalSetter`.
13651364

13661365
// Include all augmentation scope members to the origin scope.
1367-
nameSpace.forEachLocalMember((String name, Builder member) {
1366+
nameSpace.forEachLocalMember(
1367+
// Coverage-ignore(suite): Not run.
1368+
(String name, Builder member) {
13681369
// In case of duplicates we use the first declaration.
13691370
while (member.isDuplicate) {
13701371
member = member.next!;
@@ -1374,6 +1375,7 @@ abstract class MergedScope<T extends Builder> {
13741375
setter: false, inPatchLibrary: inPatchLibrary);
13751376
});
13761377
if (augmentations != null) {
1378+
// Coverage-ignore-block(suite): Not run.
13771379
for (String augmentedName in augmentations.keys) {
13781380
for (Builder augmentation in augmentations[augmentedName]!) {
13791381
_addBuilderToMergedScope(augmentedName, augmentation,
@@ -1382,7 +1384,9 @@ abstract class MergedScope<T extends Builder> {
13821384
}
13831385
}
13841386
}
1385-
nameSpace.forEachLocalSetter((String name, Builder member) {
1387+
nameSpace.forEachLocalSetter(
1388+
// Coverage-ignore(suite): Not run.
1389+
(String name, Builder member) {
13861390
// In case of duplicates we use the first declaration.
13871391
while (member.isDuplicate) {
13881392
member = member.next!;
@@ -1392,6 +1396,7 @@ abstract class MergedScope<T extends Builder> {
13921396
setter: true, inPatchLibrary: inPatchLibrary);
13931397
});
13941398
if (setterAugmentations != null) {
1399+
// Coverage-ignore-block(suite): Not run.
13951400
for (String augmentedName in setterAugmentations.keys) {
13961401
for (Builder augmentation in setterAugmentations[augmentedName]!) {
13971402
_addBuilderToMergedScope(augmentedName, augmentation,
@@ -1400,7 +1405,9 @@ abstract class MergedScope<T extends Builder> {
14001405
}
14011406
}
14021407
}
1403-
nameSpace.forEachLocalExtension((ExtensionBuilder extensionBuilder) {
1408+
nameSpace.forEachLocalExtension(
1409+
// Coverage-ignore(suite): Not run.
1410+
(ExtensionBuilder extensionBuilder) {
14041411
if (extensionBuilder is SourceExtensionBuilder &&
14051412
extensionBuilder.isUnnamedExtension) {
14061413
_originNameSpace.addExtension(extensionBuilder);
@@ -1420,7 +1427,9 @@ abstract class MergedScope<T extends Builder> {
14201427
_addBuilderToAugmentationNameSpace(nameSpace, name, originMember,
14211428
setter: true);
14221429
});
1423-
_originNameSpace.forEachLocalExtension((ExtensionBuilder extensionBuilder) {
1430+
_originNameSpace.forEachLocalExtension(
1431+
// Coverage-ignore(suite): Not run.
1432+
(ExtensionBuilder extensionBuilder) {
14241433
if (extensionBuilder is SourceExtensionBuilder &&
14251434
extensionBuilder.isUnnamedExtension) {
14261435
nameSpace.addExtension(extensionBuilder);
@@ -1433,6 +1442,7 @@ abstract class MergedScope<T extends Builder> {
14331442
bool _allowInjectedPublicMember(Builder newBuilder);
14341443
}
14351444

1445+
// Coverage-ignore(suite): Not run.
14361446
class MergedLibraryScope extends MergedScope<SourceLibraryBuilder> {
14371447
MergedLibraryScope(SourceLibraryBuilder origin)
14381448
: super(origin, origin.libraryNameSpace);
@@ -1464,11 +1474,14 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
14641474
super(origin, origin.nameSpace);
14651475

14661476
@override
1477+
// Coverage-ignore(suite): Not run.
14671478
SourceLibraryBuilder get originLibrary => _origin.libraryBuilder;
14681479

14691480
void _addAugmentationConstructorScope(DeclarationNameSpace nameSpace,
14701481
{required bool inPatchLibrary}) {
1471-
nameSpace.forEachConstructor((String name, MemberBuilder newConstructor) {
1482+
nameSpace.forEachConstructor(
1483+
// Coverage-ignore(suite): Not run.
1484+
(String name, MemberBuilder newConstructor) {
14721485
MemberBuilder? existingConstructor =
14731486
_originConstructorNameSpace.lookupConstructor(name);
14741487
bool isAugmentationBuilder = inPatchLibrary
@@ -1483,9 +1496,7 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
14831496
inPatchLibrary
14841497
? templateNonPatchConstructorConflict
14851498
.withArguments(newConstructor.fullNameForErrors)
1486-
:
1487-
// Coverage-ignore(suite): Not run.
1488-
templateNonAugmentationConstructorConflict
1499+
: templateNonAugmentationConstructorConflict
14891500
.withArguments(newConstructor.fullNameForErrors),
14901501
newConstructor.fileOffset,
14911502
noLength,
@@ -1503,9 +1514,7 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
15031514
inPatchLibrary
15041515
? templateUnmatchedPatchConstructor
15051516
.withArguments(newConstructor.fullNameForErrors)
1506-
:
1507-
// Coverage-ignore(suite): Not run.
1508-
templateUnmatchedAugmentationConstructor
1517+
: templateUnmatchedAugmentationConstructor
15091518
.withArguments(newConstructor.fullNameForErrors),
15101519
newConstructor.fileOffset,
15111520
noLength,
@@ -1514,15 +1523,13 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
15141523
_originConstructorNameSpace.addConstructor(name, newConstructor);
15151524
for (DeclarationNameSpace augmentationConstructorNameSpace
15161525
in _augmentationConstructorNameSpaces.values) {
1517-
// Coverage-ignore-block(suite): Not run.
15181526
_addConstructorToAugmentationScope(
15191527
augmentationConstructorNameSpace, name, newConstructor);
15201528
}
15211529
}
15221530
if (inPatchLibrary &&
15231531
!name.startsWith('_') &&
15241532
!_allowInjectedPublicMember(newConstructor)) {
1525-
// Coverage-ignore-block(suite): Not run.
15261533
originLibrary.addProblem(
15271534
templatePatchInjectionFailed.withArguments(
15281535
name, originLibrary.importUri),
@@ -1561,13 +1568,13 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
15611568
}
15621569

15631570
@override
1571+
// Coverage-ignore(suite): Not run.
15641572
bool _allowInjectedPublicMember(Builder newBuilder) {
15651573
if (originLibrary.importUri.isScheme("dart") &&
15661574
originLibrary.importUri.path.startsWith("_")) {
15671575
return true;
15681576
}
15691577
if (newBuilder.isStatic) {
1570-
// Coverage-ignore-block(suite): Not run.
15711578
return _origin.name.startsWith('_');
15721579
}
15731580
// TODO(johnniwinther): Restrict the use of injected public class members.
@@ -1576,10 +1583,10 @@ class MergedClassMemberScope extends MergedScope<SourceClassBuilder> {
15761583
}
15771584

15781585
extension on Builder {
1586+
// Coverage-ignore(suite): Not run.
15791587
bool get isAugmentation {
15801588
Builder self = this;
15811589
if (self is SourceLibraryBuilder) {
1582-
// Coverage-ignore-block(suite): Not run.
15831590
return self.isAugmentationLibrary;
15841591
} else if (self is SourceClassBuilder) {
15851592
return self.isAugmentation;
@@ -1602,6 +1609,7 @@ extension on Builder {
16021609
return false;
16031610
}
16041611

1612+
// Coverage-ignore(suite): Not run.
16051613
void set isConflictingAugmentationMember(bool value) {
16061614
Builder self = this;
16071615
if (self is SourceMemberBuilder) {
@@ -1612,6 +1620,7 @@ extension on Builder {
16121620
// TODO(johnniwinther): Handle all cases here.
16131621
}
16141622

1623+
// Coverage-ignore(suite): Not run.
16151624
bool _hasPatchAnnotation(Iterable<MetadataBuilder>? metadata) {
16161625
if (metadata == null) {
16171626
return false;
@@ -1624,6 +1633,7 @@ extension on Builder {
16241633
return false;
16251634
}
16261635

1636+
// Coverage-ignore(suite): Not run.
16271637
bool get hasPatchAnnotation {
16281638
Builder self = this;
16291639
if (self is SourceFunctionBuilder) {
@@ -1636,9 +1646,7 @@ extension on Builder {
16361646
return _hasPatchAnnotation(self.metadata);
16371647
} else if (self is SourceMethodBuilder) {
16381648
return _hasPatchAnnotation(self.metadata);
1639-
}
1640-
// Coverage-ignore(suite): Not run.
1641-
else if (self is SourceExtensionTypeDeclarationBuilder) {
1649+
} else if (self is SourceExtensionTypeDeclarationBuilder) {
16421650
return _hasPatchAnnotation(self.metadata);
16431651
}
16441652
return false;

pkg/front_end/lib/src/builder/builder.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,10 @@ abstract class Builder {
248248

249249
bool get isTypeParameter;
250250

251+
/// Adds [augmentation] to this declaration.
252+
// TODO(johnniwinther): Remove this augmentations are based on fragments.
253+
void addAugmentation(Builder augmentation);
254+
251255
/// Applies [augmentation] to this declaration.
252256
void applyAugmentation(Builder augmentation);
253257

@@ -354,6 +358,12 @@ abstract class BuilderImpl implements Builder {
354358
@override
355359
bool get isTypeParameter => false;
356360

361+
@override
362+
// Coverage-ignore(suite): Not run.
363+
void addAugmentation(Builder augmentation) {
364+
unsupported("${runtimeType}.addAugmentation", fileOffset, fileUri);
365+
}
366+
357367
@override
358368
// Coverage-ignore(suite): Not run.
359369
void applyAugmentation(Builder augmentation) {

pkg/front_end/lib/src/builder/class_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
207207
forStaticAccess: true);
208208
}
209209
if (declaration == null && isAugmenting) {
210+
// Coverage-ignore-block(suite): Not run.
210211
return origin.findStaticBuilder(
211212
name, fileOffset, fileUri, accessingLibrary,
212213
isSetter: isSetter);

pkg/front_end/lib/src/builder/declaration_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ abstract class DeclarationBuilderImpl extends TypeDeclarationBuilderImpl
7373
MemberBuilder? declaration =
7474
nameSpace.lookupConstructor(name == 'new' ? '' : name);
7575
if (declaration == null && isAugmenting) {
76+
// Coverage-ignore-block(suite): Not run.
7677
return origin.findConstructorOrFactory(
7778
name, charOffset, uri, accessingLibrary);
7879
}

pkg/front_end/lib/src/builder/library_builder.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,8 @@ abstract class SourceCompilationUnit
221221
LibraryNameSpaceBuilder libraryNameSpaceBuilder,
222222
SourceCompilationUnit parentCompilationUnit,
223223
List<SourceCompilationUnit> includedParts,
224-
Set<Uri> usedParts);
224+
Set<Uri> usedParts,
225+
{required bool allowPartInParts});
225226

226227
void buildOutlineExpressions(
227228
Annotatable annotatable, BodyBuilderContext bodyBuilderContext,
@@ -234,6 +235,10 @@ abstract class SourceCompilationUnit
234235
Message reportFeatureNotEnabled(
235236
LibraryFeature feature, Uri fileUri, int charOffset, int length);
236237

238+
/// Registers that [augmentation] is a part of the library for which this is
239+
/// the main compilation unit.
240+
void registerAugmentation(CompilationUnit augmentation);
241+
237242
/// Reports [message] on all compilation units that access this compilation
238243
/// unit.
239244
void addProblemAtAccessors(Message message);

pkg/front_end/lib/src/builder/synthesized_type_builder.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,6 @@ class SynthesizedTypeBuilder extends FixedTypeBuilder {
8888
DartType type = _typeBuilder.buildAliased(library, typeUse, hierarchy);
8989
Substitution substitution =
9090
_computeSubstitution(library, typeUse, hierarchy);
91-
if ('$type'.contains('T*')) {
92-
// Coverage-ignore-block(suite): Not run.
93-
_typeBuilder.buildAliased(library, typeUse, hierarchy);
94-
}
9591
return substitution.substituteType(type);
9692
}
9793

pkg/front_end/lib/src/builder/type_parameter_builder.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,16 @@ class NominalParameterBuilder extends TypeParameterBuilder {
257257
/// The [TypeParameter] built by this builder.
258258
TypeParameter get parameter => origin.actualParameter;
259259

260+
@override
261+
// Coverage-ignore(suite): Not run.
262+
void addAugmentation(covariant NominalParameterBuilder augmentation) {
263+
assert(
264+
_hasHashCode == null,
265+
"Cannot apply augmentation since to $this since hashCode has already "
266+
"been computed from $actualParameter @\n$_hasHashCode");
267+
augmentation.actualOrigin = this;
268+
}
269+
260270
@override
261271
void applyAugmentation(covariant NominalParameterBuilder augmentation) {
262272
assert(
@@ -723,6 +733,12 @@ class StructuralParameterBuilder extends TypeParameterBuilder {
723733
}
724734
}
725735

736+
@override
737+
// Coverage-ignore(suite): Not run.
738+
void addAugmentation(covariant StructuralParameterBuilder augmentation) {
739+
augmentation.actualOrigin = this;
740+
}
741+
726742
@override
727743
// Coverage-ignore(suite): Not run.
728744
void applyAugmentation(covariant StructuralParameterBuilder augmentation) {

pkg/front_end/lib/src/fragment/class.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class ClassFragment extends DeclarationFragmentImpl implements Fragment {
4848
}
4949

5050
@override
51-
// Coverage-ignore(suite): Not run.
5251
bool get isPatch => enclosingCompilationUnit.isPatch && modifiers.isAugment;
5352

5453
@override

0 commit comments

Comments
 (0)