@@ -17,19 +17,117 @@ import '../builder/factory_builder.dart';
1717import '../builder/library_builder.dart' ;
1818import '../builder/type_builder.dart' ;
1919import '../kernel/type_algorithms.dart' ;
20+ import 'source_class_builder.dart' ;
2021import 'source_declaration_builder.dart' ;
2122import 'source_library_builder.dart' ;
2223import 'source_loader.dart' ;
2324import 'source_member_builder.dart' ;
2425import 'source_type_parameter_builder.dart' ;
2526
26- mixin SourceDeclarationBuilderMixin
27+ mixin SourceDeclarationBuilderBaseMixin
2728 implements DeclarationBuilderMixin , SourceDeclarationBuilder {
2829 @override
29- SourceLibraryBuilder get libraryBuilder ;
30+ List < SourceNominalParameterBuilder > ? get typeParameters ;
3031
3132 @override
32- List <SourceNominalParameterBuilder >? get typeParameters;
33+ int get typeParametersCount => typeParameters? .length ?? 0 ;
34+
35+ @override
36+ int computeDefaultTypes (ComputeDefaultTypeContext context) {
37+ bool hasErrors = context.reportNonSimplicityIssues (this , typeParameters);
38+ int count = context.computeDefaultTypesForVariables (typeParameters,
39+ inErrorRecovery: hasErrors);
40+
41+ Iterator <SourceMemberBuilder > constructorIterator =
42+ filteredConstructorsIterator <SourceMemberBuilder >(
43+ includeDuplicates: false );
44+ while (constructorIterator.moveNext ()) {
45+ count += constructorIterator.current
46+ .computeDefaultTypes (context, inErrorRecovery: hasErrors);
47+ }
48+
49+ Iterator <SourceMemberBuilder > memberIterator =
50+ filteredMembersIterator (includeDuplicates: false );
51+ while (memberIterator.moveNext ()) {
52+ count += memberIterator.current
53+ .computeDefaultTypes (context, inErrorRecovery: hasErrors);
54+ }
55+ return count;
56+ }
57+
58+ void checkTypesInOutline (TypeEnvironment typeEnvironment) {
59+ Iterator <SourceMemberBuilder > memberIterator =
60+ filteredMembersIterator (includeDuplicates: false );
61+
62+ SourceDeclarationBuilder enclosingDeclarationBuilder = this ;
63+ SourceClassBuilder ? enclosingClassBuilder =
64+ enclosingDeclarationBuilder is SourceClassBuilder
65+ ? enclosingDeclarationBuilder
66+ : null ;
67+ while (memberIterator.moveNext ()) {
68+ SourceMemberBuilder builder = memberIterator.current;
69+ if (enclosingClassBuilder != null ) {
70+ builder.checkVariance (enclosingClassBuilder, typeEnvironment);
71+ }
72+ builder.checkTypes (libraryBuilder, nameSpace, typeEnvironment);
73+ }
74+
75+ Iterator <SourceMemberBuilder > constructorIterator =
76+ filteredConstructorsIterator (includeDuplicates: false );
77+ while (constructorIterator.moveNext ()) {
78+ constructorIterator.current
79+ .checkTypes (libraryBuilder, nameSpace, typeEnvironment);
80+ }
81+ }
82+
83+ @override
84+ List <DartType > buildAliasedTypeArguments (LibraryBuilder library,
85+ List <TypeBuilder >? arguments, ClassHierarchyBase ? hierarchy) {
86+ if (arguments == null && typeParameters == null ) {
87+ return < DartType > [];
88+ }
89+
90+ if (arguments == null && typeParameters != null ) {
91+ List <DartType > result =
92+ new List <DartType >.generate (typeParameters! .length, (int i) {
93+ if (typeParameters! [i].defaultType == null ) {
94+ throw 'here' ;
95+ }
96+ return typeParameters! [i].defaultType! .buildAliased (
97+ library, TypeUse .defaultTypeAsTypeArgument, hierarchy);
98+ }, growable: true );
99+ return result;
100+ }
101+
102+ if (arguments != null && arguments.length != typeParametersCount) {
103+ // Coverage-ignore-block(suite): Not run.
104+ assert (libraryBuilder.loader.assertProblemReportedElsewhere (
105+ "$runtimeType .buildAliasedTypeArguments: "
106+ "the numbers of type parameters and type arguments don't match." ,
107+ expectedPhase: CompilationPhaseForProblemReporting .outline));
108+ return unhandled (
109+ templateTypeArgumentMismatch
110+ .withArguments (typeParametersCount)
111+ .problemMessage,
112+ "buildTypeArguments" ,
113+ - 1 ,
114+ null );
115+ }
116+
117+ assert (arguments! .length == typeParametersCount);
118+ List <DartType > result =
119+ new List <DartType >.generate (arguments! .length, (int i) {
120+ return arguments[i]
121+ .buildAliased (library, TypeUse .typeArgument, hierarchy);
122+ }, growable: true );
123+ return result;
124+ }
125+ }
126+
127+ mixin SourceDeclarationBuilderMixin
128+ implements DeclarationBuilderMixin , SourceDeclarationBuilder {
129+ @override
130+ SourceLibraryBuilder get libraryBuilder;
33131
34132 @override
35133 Uri get fileUri;
@@ -117,45 +215,6 @@ mixin SourceDeclarationBuilderMixin
117215 return count;
118216 }
119217
120- @override
121- int computeDefaultTypes (ComputeDefaultTypeContext context) {
122- bool hasErrors = context.reportNonSimplicityIssues (this , typeParameters);
123- int count = context.computeDefaultTypesForVariables (typeParameters,
124- inErrorRecovery: hasErrors);
125-
126- Iterator <SourceMemberBuilder > constructorIterator =
127- filteredConstructorsIterator <SourceMemberBuilder >(
128- includeDuplicates: false );
129- while (constructorIterator.moveNext ()) {
130- count += constructorIterator.current
131- .computeDefaultTypes (context, inErrorRecovery: hasErrors);
132- }
133-
134- Iterator <SourceMemberBuilder > memberIterator =
135- filteredMembersIterator (includeDuplicates: false );
136- while (memberIterator.moveNext ()) {
137- count += memberIterator.current
138- .computeDefaultTypes (context, inErrorRecovery: hasErrors);
139- }
140- return count;
141- }
142-
143- void checkTypesInOutline (TypeEnvironment typeEnvironment) {
144- Iterator <SourceMemberBuilder > memberIterator =
145- filteredMembersIterator (includeDuplicates: false );
146- while (memberIterator.moveNext ()) {
147- memberIterator.current
148- .checkTypes (libraryBuilder, nameSpace, typeEnvironment);
149- }
150-
151- Iterator <SourceMemberBuilder > constructorIterator =
152- filteredConstructorsIterator (includeDuplicates: false );
153- while (constructorIterator.moveNext ()) {
154- constructorIterator.current
155- .checkTypes (libraryBuilder, nameSpace, typeEnvironment);
156- }
157- }
158-
159218 void _buildMember (SourceMemberBuilder memberBuilder, Member member,
160219 Member ? tearOff, BuiltMemberKind memberKind,
161220 {required bool addMembersToLibrary}) {
@@ -202,50 +261,4 @@ mixin SourceDeclarationBuilderMixin
202261 BuiltMemberKind memberKind,
203262 Reference memberReference,
204263 Reference ? tearOffReference);
205-
206- @override
207- List <DartType > buildAliasedTypeArguments (LibraryBuilder library,
208- List <TypeBuilder >? arguments, ClassHierarchyBase ? hierarchy) {
209- if (arguments == null && typeParameters == null ) {
210- return < DartType > [];
211- }
212-
213- if (arguments == null && typeParameters != null ) {
214- List <DartType > result =
215- new List <DartType >.generate (typeParameters! .length, (int i) {
216- if (typeParameters! [i].defaultType == null ) {
217- throw 'here' ;
218- }
219- return typeParameters! [i].defaultType! .buildAliased (
220- library, TypeUse .defaultTypeAsTypeArgument, hierarchy);
221- }, growable: true );
222- return result;
223- }
224-
225- if (arguments != null && arguments.length != typeParametersCount) {
226- // Coverage-ignore-block(suite): Not run.
227- assert (libraryBuilder.loader.assertProblemReportedElsewhere (
228- "SourceDeclarationBuilderMixin.buildAliasedTypeArguments: "
229- "the numbers of type parameters and type arguments don't match." ,
230- expectedPhase: CompilationPhaseForProblemReporting .outline));
231- return unhandled (
232- templateTypeArgumentMismatch
233- .withArguments (typeParametersCount)
234- .problemMessage,
235- "buildTypeArguments" ,
236- - 1 ,
237- null );
238- }
239-
240- assert (arguments! .length == typeParametersCount);
241- List <DartType > result =
242- new List <DartType >.generate (arguments! .length, (int i) {
243- return arguments[i]
244- .buildAliased (library, TypeUse .typeArgument, hierarchy);
245- }, growable: true );
246- return result;
247- }
248-
249- @override
250- int get typeParametersCount => typeParameters? .length ?? 0 ;
251264}
0 commit comments