Skip to content

Commit 9f529ae

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Add TypeParameterFragment
This is a step towards only creating NominalParameterBuilders on the Builder. Change-Id: Ic47ca37e980cfe641180dc03053bb9b45cd3fac3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/408022 Reviewed-by: Chloe Stefantsova <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent 72963bf commit 9f529ae

18 files changed

+430
-220
lines changed

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ class RegularClassDeclaration implements ClassDeclaration {
4747
int get startOffset => _fragment.startOffset;
4848

4949
@override
50-
List<NominalParameterBuilder>? get typeParameters => _fragment.typeParameters;
50+
List<NominalParameterBuilder>? get typeParameters =>
51+
_fragment.typeParameters?.builders;
5152

5253
@override
5354
bool get isMixinDeclaration => false;
@@ -92,7 +93,8 @@ class EnumDeclaration implements ClassDeclaration {
9293
int get startOffset => _fragment.startOffset;
9394

9495
@override
95-
List<NominalParameterBuilder>? get typeParameters => _fragment.typeParameters;
96+
List<NominalParameterBuilder>? get typeParameters =>
97+
_fragment.typeParameters?.builders;
9698

9799
@override
98100
bool get isMixinDeclaration => false;
@@ -134,7 +136,8 @@ class NamedMixinApplication implements ClassDeclaration {
134136
int get startOffset => _fragment.startOffset;
135137

136138
@override
137-
List<NominalParameterBuilder>? get typeParameters => _fragment.typeParameters;
139+
List<NominalParameterBuilder>? get typeParameters =>
140+
_fragment.typeParameters?.builders;
138141

139142
@override
140143
bool get isMixinDeclaration => false;
@@ -222,7 +225,8 @@ class MixinDeclaration implements ClassDeclaration {
222225
int get startOffset => _fragment.startOffset;
223226

224227
@override
225-
List<NominalParameterBuilder>? get typeParameters => _fragment.typeParameters;
228+
List<NominalParameterBuilder>? get typeParameters =>
229+
_fragment.typeParameters?.builders;
226230

227231
@override
228232
bool get isMixinDeclaration => true;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class ConstructorFragment implements Fragment, FunctionFragment {
1414
final Modifiers modifiers;
1515
final List<MetadataBuilder>? metadata;
1616
final OmittedTypeBuilder returnType;
17-
final List<NominalParameterBuilder>? typeParameters;
17+
final List<TypeParameterFragment>? typeParameters;
1818
final NominalParameterNameSpace typeParameterNameSpace;
1919
final LookupScope typeParameterScope;
2020
final List<FormalParameterBuilder>? formals;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ part 'mixin.dart';
8080
part 'named_mixin_application.dart';
8181
part 'primary_constructor.dart';
8282
part 'setter.dart';
83+
part 'type_parameter.dart';
8384
part 'typedef.dart';
8485
part 'util.dart';
8586

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

Lines changed: 68 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class GetterFragment implements Fragment, FunctionFragment {
3333
///
3434
/// This is only non-null in erroneous cases since getters don't have type
3535
/// parameters.
36-
final List<NominalParameterBuilder>? declaredTypeParameters;
36+
final List<TypeParameterFragment>? declaredTypeParameters;
3737

3838
/// The scope that introduces type parameters on this getter.
3939
///
@@ -303,9 +303,16 @@ mixin _DirectGetterEncodingMixin implements _GetterEncoding {
303303
asyncMarker: _fragment.asyncModifier)
304304
..fileOffset = _fragment.formalsOffset
305305
..fileEndOffset = _fragment.endOffset;
306-
buildTypeParametersAndFormals(libraryBuilder, function,
307-
_fragment.declaredTypeParameters, _fragment.declaredFormals,
308-
classTypeParameters: classTypeParameters, supportsTypeParameters: true);
306+
buildTypeParametersAndFormals(
307+
libraryBuilder,
308+
function,
309+
_fragment
310+
.declaredTypeParameters
311+
// Coverage-ignore(suite): Not run.
312+
?.builders,
313+
_fragment.declaredFormals,
314+
classTypeParameters: classTypeParameters,
315+
supportsTypeParameters: true);
309316
if (_fragment.returnType is! InferableTypeBuilder) {
310317
function.returnType =
311318
_fragment.returnType.build(libraryBuilder, TypeUse.returnType);
@@ -349,7 +356,10 @@ mixin _DirectGetterEncodingMixin implements _GetterEncoding {
349356
libraryBuilder,
350357
bodyBuilderContext,
351358
_fragment.typeParameterScope,
352-
_fragment.declaredTypeParameters);
359+
_fragment
360+
.declaredTypeParameters
361+
// Coverage-ignore(suite): Not run.
362+
?.builders);
353363
_buildFormalsForOutlineExpressions(
354364
libraryBuilder, declarationBuilder, _fragment.declaredFormals,
355365
isClassInstanceMember: isClassInstanceMember);
@@ -368,8 +378,10 @@ mixin _DirectGetterEncodingMixin implements _GetterEncoding {
368378

369379
@override
370380
int computeDefaultTypes(ComputeDefaultTypeContext context) {
371-
bool hasErrors = context.reportSimplicityIssuesForTypeParameters(
372-
_fragment.declaredTypeParameters);
381+
bool hasErrors = context.reportSimplicityIssuesForTypeParameters(_fragment
382+
.declaredTypeParameters
383+
// Coverage-ignore(suite): Not run.
384+
?.builders);
373385
context.reportGenericFunctionTypesForFormals(_fragment.declaredFormals);
374386
if (_fragment.returnType is! OmittedTypeBuilder) {
375387
hasErrors |=
@@ -378,7 +390,10 @@ mixin _DirectGetterEncodingMixin implements _GetterEncoding {
378390
_fragment.returnType);
379391
}
380392
return context.computeDefaultTypesForVariables(
381-
_fragment.declaredTypeParameters,
393+
_fragment
394+
.declaredTypeParameters
395+
// Coverage-ignore(suite): Not run.
396+
?.builders,
382397
inErrorRecovery: hasErrors);
383398
}
384399

@@ -410,8 +425,10 @@ mixin _DirectGetterEncodingMixin implements _GetterEncoding {
410425
void checkTypes(SourceLibraryBuilder libraryBuilder,
411426
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder,
412427
{required bool isAbstract, required bool isExternal}) {
413-
List<TypeParameterBuilder>? typeParameters =
414-
_fragment.declaredTypeParameters;
428+
List<TypeParameterBuilder>? typeParameters = _fragment
429+
.declaredTypeParameters
430+
// Coverage-ignore(suite): Not run.
431+
?.builders;
415432
// Coverage-ignore(suite): Not run.
416433
if (typeParameters != null && typeParameters.isNotEmpty) {
417434
libraryBuilder.checkTypeParameterDependencies(typeParameters);
@@ -441,7 +458,11 @@ mixin _DirectGetterEncodingMixin implements _GetterEncoding {
441458
void checkVariance(
442459
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
443460
sourceClassBuilder.checkVarianceInTypeParameters(
444-
typeEnvironment, _fragment.declaredTypeParameters);
461+
typeEnvironment,
462+
_fragment
463+
.declaredTypeParameters
464+
// Coverage-ignore(suite): Not run.
465+
?.builders);
445466
sourceClassBuilder.checkVarianceInFormals(
446467
typeEnvironment, _fragment.declaredFormals);
447468
sourceClassBuilder.checkVarianceInReturnType(
@@ -451,7 +472,10 @@ mixin _DirectGetterEncodingMixin implements _GetterEncoding {
451472

452473
@override
453474
List<NominalParameterBuilder>? get clonedAndDeclaredTypeParameters =>
454-
_fragment.declaredTypeParameters;
475+
_fragment
476+
.declaredTypeParameters
477+
// Coverage-ignore(suite): Not run.
478+
?.builders;
455479

456480
@override
457481
// Coverage-ignore(suite): Not run.
@@ -541,9 +565,16 @@ mixin _ExtensionInstanceGetterEncodingMixin implements _GetterEncoding {
541565
asyncMarker: _fragment.asyncModifier)
542566
..fileOffset = _fragment.formalsOffset
543567
..fileEndOffset = _fragment.endOffset;
544-
buildTypeParametersAndFormals(libraryBuilder, function,
545-
_fragment.declaredTypeParameters, _fragment.declaredFormals,
546-
classTypeParameters: classTypeParameters, supportsTypeParameters: true);
568+
buildTypeParametersAndFormals(
569+
libraryBuilder,
570+
function,
571+
_fragment
572+
.declaredTypeParameters
573+
// Coverage-ignore(suite): Not run.
574+
?.builders,
575+
_fragment.declaredFormals,
576+
classTypeParameters: classTypeParameters,
577+
supportsTypeParameters: true);
547578
if (_fragment.returnType is! InferableTypeBuilder) {
548579
function.returnType =
549580
_fragment.returnType.build(libraryBuilder, TypeUse.returnType);
@@ -588,7 +619,10 @@ mixin _ExtensionInstanceGetterEncodingMixin implements _GetterEncoding {
588619
libraryBuilder,
589620
bodyBuilderContext,
590621
_fragment.typeParameterScope,
591-
_fragment.declaredTypeParameters);
622+
_fragment
623+
.declaredTypeParameters
624+
// Coverage-ignore(suite): Not run.
625+
?.builders);
592626
_buildFormalsForOutlineExpressions(
593627
libraryBuilder, declarationBuilder, _fragment.declaredFormals,
594628
isClassInstanceMember: isClassInstanceMember);
@@ -627,8 +661,10 @@ mixin _ExtensionInstanceGetterEncodingMixin implements _GetterEncoding {
627661

628662
@override
629663
int computeDefaultTypes(ComputeDefaultTypeContext context) {
630-
bool hasErrors = context.reportSimplicityIssuesForTypeParameters(
631-
_fragment.declaredTypeParameters);
664+
bool hasErrors = context.reportSimplicityIssuesForTypeParameters(_fragment
665+
.declaredTypeParameters
666+
// Coverage-ignore(suite): Not run.
667+
?.builders);
632668
context.reportGenericFunctionTypesForFormals(_fragment.declaredFormals);
633669
if (_fragment.returnType is! OmittedTypeBuilder) {
634670
hasErrors |=
@@ -646,15 +682,18 @@ mixin _ExtensionInstanceGetterEncodingMixin implements _GetterEncoding {
646682
// required and unnecessary.
647683
// ignore: unnecessary_non_null_assertion
648684
..._clonedDeclarationTypeParameters!,
649-
..._fragment.declaredTypeParameters!
685+
..._fragment.declaredTypeParameters!.builders
650686
], inErrorRecovery: hasErrors);
651687
} else if (_clonedDeclarationTypeParameters != null) {
652688
return context.computeDefaultTypesForVariables(
653689
_clonedDeclarationTypeParameters,
654690
inErrorRecovery: hasErrors);
655691
} else {
656692
return context.computeDefaultTypesForVariables(
657-
_fragment.declaredTypeParameters,
693+
_fragment
694+
.declaredTypeParameters
695+
// Coverage-ignore(suite): Not run.
696+
?.builders,
658697
inErrorRecovery: hasErrors);
659698
}
660699
}
@@ -700,8 +739,10 @@ mixin _ExtensionInstanceGetterEncodingMixin implements _GetterEncoding {
700739
void checkTypes(SourceLibraryBuilder libraryBuilder,
701740
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder,
702741
{required bool isAbstract, required bool isExternal}) {
703-
List<TypeParameterBuilder>? typeParameters =
704-
_fragment.declaredTypeParameters;
742+
List<TypeParameterBuilder>? typeParameters = _fragment
743+
.declaredTypeParameters
744+
// Coverage-ignore(suite): Not run.
745+
?.builders;
705746
// Coverage-ignore(suite): Not run.
706747
if (typeParameters != null && typeParameters.isNotEmpty) {
707748
libraryBuilder.checkTypeParameterDependencies(typeParameters);
@@ -732,7 +773,7 @@ mixin _ExtensionInstanceGetterEncodingMixin implements _GetterEncoding {
732773
void checkVariance(
733774
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
734775
sourceClassBuilder.checkVarianceInTypeParameters(
735-
typeEnvironment, _fragment.declaredTypeParameters);
776+
typeEnvironment, _fragment.declaredTypeParameters?.builders);
736777
sourceClassBuilder.checkVarianceInFormals(
737778
typeEnvironment, _fragment.declaredFormals);
738779
sourceClassBuilder.checkVarianceInReturnType(
@@ -746,7 +787,10 @@ mixin _ExtensionInstanceGetterEncodingMixin implements _GetterEncoding {
746787
_fragment.declaredTypeParameters != null
747788
? [
748789
...?_clonedDeclarationTypeParameters,
749-
...?_fragment.declaredTypeParameters
790+
...?_fragment
791+
.declaredTypeParameters
792+
// Coverage-ignore(suite): Not run.
793+
?.builders
750794
]
751795
: null;
752796

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class NamedMixinApplicationFragment implements Fragment {
1414
final int endOffset;
1515
final Modifiers modifiers;
1616
final List<MetadataBuilder>? metadata;
17-
final List<NominalParameterBuilder>? typeParameters;
17+
final List<TypeParameterFragment>? typeParameters;
1818
final TypeBuilder? supertype;
1919
final List<TypeBuilder> mixins;
2020
final List<TypeBuilder>? interfaces;

0 commit comments

Comments
 (0)