@@ -24,34 +24,13 @@ enum TypeParameterKind {
2424
2525sealed class TypeParameterBuilder extends TypeDeclarationBuilderImpl
2626 implements TypeDeclarationBuilder {
27- @override
28- final int fileOffset;
29-
30- @override
31- final String name;
32-
33- TypeBuilder ? bound;
27+ abstract TypeBuilder ? bound;
3428
35- TypeBuilder ? defaultType;
29+ abstract TypeBuilder ? defaultType;
3630
37- TypeParameterBuilder ? get actualOrigin ;
31+ bool get isWildcard ;
3832
39- final TypeParameterKind kind;
40-
41- final bool isWildcard;
42-
43- @override
44- final Uri ? fileUri;
45-
46- final List <MetadataBuilder >? metadata;
47-
48- TypeParameterBuilder (this .name, this .fileOffset, this .fileUri,
49- {this .bound,
50- this .defaultType,
51- required this .kind,
52- Variance ? variableVariance,
53- this .metadata,
54- this .isWildcard = false });
33+ TypeParameterKind get kind;
5534
5635 @override
5736 // Coverage-ignore(suite): Not run.
@@ -74,9 +53,6 @@ sealed class TypeParameterBuilder extends TypeDeclarationBuilderImpl
7453 return sb.toString ();
7554 }
7655
77- // Coverage-ignore(suite): Not run.
78- TypeParameterBuilder get origin => actualOrigin ?? this ;
79-
8056 Variance get variance;
8157
8258 void set variance (Variance value);
@@ -192,88 +168,20 @@ sealed class TypeParameterBuilder extends TypeDeclarationBuilderImpl
192168 }
193169}
194170
195- class NominalParameterBuilder extends TypeParameterBuilder {
171+ abstract class NominalParameterBuilder extends TypeParameterBuilder {
196172 /// Sentinel value used to indicate that the variable has no name. This is
197173 /// used for error recovery.
198174 static const String noNameSentinel = 'no name sentinel' ;
199175
200- final TypeParameter actualParameter;
201-
202- @override
203- NominalParameterBuilder ? actualOrigin;
204-
205- /// [NominalParameterBuilder] overrides ==/hashCode in terms of
206- /// [actualParameter] making it vulnerable to use in sets and maps. This
207- /// fields tracks the first access to [hashCode] when asserts are enabled, to
208- /// signal if the [hashCode] is used before updates to [actualParameter] .
209- StackTrace ? _hasHashCode;
210-
211- NominalParameterBuilder (String name, int charOffset, Uri ? fileUri,
212- {TypeBuilder ? bound,
213- required TypeParameterKind kind,
214- Variance ? variableVariance,
215- List <MetadataBuilder >? metadata,
216- super .isWildcard = false })
217- : actualParameter =
218- new TypeParameter (name == noNameSentinel ? null : name, null )
219- ..fileOffset = charOffset
220- ..variance = variableVariance,
221- _varianceCalculationValue = new VarianceCalculationValue .fromVariance (
222- variableVariance ?? Variance .covariant ),
223- super (name, charOffset, fileUri,
224- bound: bound,
225- kind: kind,
226- variableVariance: variableVariance,
227- metadata: metadata);
228-
229- /// Restores a [NominalParameterBuilder] from kernel
230- ///
231- /// The [loader] parameter is supposed to be passed by the clients and be not
232- /// null. It is needed to restore [bound] and [defaultType] of the type
233- /// variable from dill. The null value of this parameter is used only once in
234- /// [TypeBuilderComputer] to break the infinite loop of recovering type
235- /// variables of some recursive declarations, like the declaration of `A` in
236- /// the example below.
237- ///
238- /// class A<X extends A<X>> {}
239- NominalParameterBuilder .fromKernel (TypeParameter parameter,
240- {required Loader ? loader, super .isWildcard = false })
241- : actualParameter = parameter,
242- // TODO(johnniwinther): Do we need to support synthesized type
243- // parameters from kernel?
244- _varianceCalculationValue =
245- new VarianceCalculationValue .fromVariance (parameter.variance),
246- super (parameter.name ?? "" , parameter.fileOffset, null ,
247- kind: TypeParameterKind .fromKernel,
248- bound: loader? .computeTypeBuilder (parameter.bound),
249- defaultType: loader? .computeTypeBuilder (parameter.defaultType)) {
250- _nullabilityFromParameterBound = parameter.computeNullabilityFromBound ();
176+ NominalParameterBuilder (
177+ {Variance ? variableVariance, Nullability ? nullability})
178+ : _varianceCalculationValue = new VarianceCalculationValue .fromVariance (
179+ variableVariance ?? Variance .covariant ) {
180+ _nullabilityFromParameterBound = nullability;
251181 }
252182
253- @override
254- NominalParameterBuilder get origin => actualOrigin ?? this ;
255-
256183 /// The [TypeParameter] built by this builder.
257- TypeParameter get parameter => origin.actualParameter;
258-
259- @override
260- // Coverage-ignore(suite): Not run.
261- void addAugmentation (covariant NominalParameterBuilder augmentation) {
262- assert (
263- _hasHashCode == null ,
264- "Cannot apply augmentation since to $this since hashCode has already "
265- "been computed from $actualParameter @\n $_hasHashCode " );
266- augmentation.actualOrigin = this ;
267- }
268-
269- @override
270- void applyAugmentation (covariant NominalParameterBuilder augmentation) {
271- assert (
272- _hasHashCode == null ,
273- "Cannot apply augmentation since to $this since hashCode has already "
274- "been computed from $actualParameter @\n $_hasHashCode " );
275- augmentation.actualOrigin = this ;
276- }
184+ TypeParameter get parameter;
277185
278186 VarianceCalculationValue ? _varianceCalculationValue;
279187
@@ -326,20 +234,6 @@ class NominalParameterBuilder extends TypeParameterBuilder {
326234 parameter.defaultType = defaultType;
327235 }
328236
329- @override
330- bool operator == (Object other) {
331- return other is NominalParameterBuilder && parameter == other.parameter;
332- }
333-
334- @override
335- int get hashCode {
336- assert (() {
337- _hasHashCode ?? = StackTrace .current;
338- return true ;
339- }());
340- return parameter.hashCode;
341- }
342-
343237 @override
344238 TypeParameterType buildAliasedTypeWithBuiltArguments (
345239 LibraryBuilder library,
@@ -394,15 +288,6 @@ class NominalParameterBuilder extends TypeParameterBuilder {
394288 return type;
395289 }
396290
397- void buildOutlineExpressions (
398- SourceLibraryBuilder libraryBuilder,
399- BodyBuilderContext bodyBuilderContext,
400- ClassHierarchy classHierarchy,
401- LookupScope scope) {
402- MetadataBuilder .buildAnnotations (parameter, metadata, bodyBuilderContext,
403- libraryBuilder, fileUri! , scope);
404- }
405-
406291 @override
407292 void finish (SourceLibraryBuilder library, ClassBuilder object,
408293 TypeBuilder dynamicType) {
@@ -432,14 +317,6 @@ class NominalParameterBuilder extends TypeParameterBuilder {
432317 : dynamicType.build (library, TypeUse .typeParameterDefaultType));
433318 }
434319 }
435-
436- static List <TypeParameter >? typeParametersFromBuilders (
437- List <NominalParameterBuilder >? builders) {
438- if (builders == null ) return null ;
439- return new List <TypeParameter >.generate (
440- builders.length, (int i) => builders[i].parameter,
441- growable: true );
442- }
443320}
444321
445322List <TypeParameterBuilder > sortAllTypeParametersTopologically (
@@ -557,41 +434,17 @@ void _sortAllTypeParametersTopologicallyFromRoot(TypeBuilder root,
557434 }
558435}
559436
560- class StructuralParameterBuilder extends TypeParameterBuilder {
437+ abstract class StructuralParameterBuilder extends TypeParameterBuilder {
561438 /// Sentinel value used to indicate that the variable has no name. This is
562439 /// used for error recovery.
563440 static const String noNameSentinel = 'no name sentinel' ;
564441
565- final StructuralParameter actualParameter;
566-
567- @override
568- StructuralParameterBuilder ? actualOrigin;
569-
570- StructuralParameterBuilder (String name, int charOffset, Uri ? fileUri,
571- {TypeBuilder ? bound,
572- Variance ? parameterVariance,
573- List <MetadataBuilder >? metadata,
574- super .isWildcard = false })
575- : actualParameter =
576- new StructuralParameter (name == noNameSentinel ? null : name, null )
577- ..fileOffset = charOffset
578- ..variance = parameterVariance,
579- super (name, charOffset, fileUri,
580- bound: bound,
581- kind: TypeParameterKind .function,
582- variableVariance: parameterVariance,
583- metadata: metadata);
584-
585- StructuralParameterBuilder .fromKernel (StructuralParameter parameter,
586- {super .isWildcard = false })
587- : actualParameter = parameter,
588- // TODO(johnniwinther): Do we need to support synthesized type
589- // parameters from kernel?
590- super (parameter.name ?? "" , parameter.fileOffset, null ,
591- kind: TypeParameterKind .fromKernel) {
592- _nullabilityFromParameterBound = parameter.computeNullabilityFromBound ();
442+ StructuralParameterBuilder ({Nullability ? nullability}) {
443+ _nullabilityFromParameterBound = nullability;
593444 }
594445
446+ StructuralParameter get parameter;
447+
595448 @override
596449 bool get isTypeParameter => true ;
597450
@@ -638,12 +491,6 @@ class StructuralParameterBuilder extends TypeParameterBuilder {
638491 @override
639492 int get hashCode => parameter.hashCode;
640493
641- @override
642- StructuralParameterBuilder get origin => actualOrigin ?? this ;
643-
644- /// The [StructuralParameter] built by this builder.
645- StructuralParameter get parameter => origin.actualParameter;
646-
647494 @override
648495 DartType buildAliasedType (
649496 LibraryBuilder library,
@@ -729,18 +576,6 @@ class StructuralParameterBuilder extends TypeParameterBuilder {
729576 : dynamicType.build (library, TypeUse .typeParameterDefaultType));
730577 }
731578 }
732-
733- @override
734- // Coverage-ignore(suite): Not run.
735- void addAugmentation (covariant StructuralParameterBuilder augmentation) {
736- augmentation.actualOrigin = this ;
737- }
738-
739- @override
740- // Coverage-ignore(suite): Not run.
741- void applyAugmentation (covariant StructuralParameterBuilder augmentation) {
742- augmentation.actualOrigin = this ;
743- }
744579}
745580
746581/// This enum is used internally for dependency analysis of potentially cyclic
0 commit comments