@@ -17,19 +17,117 @@ import '../builder/factory_builder.dart';
17
17
import '../builder/library_builder.dart' ;
18
18
import '../builder/type_builder.dart' ;
19
19
import '../kernel/type_algorithms.dart' ;
20
+ import 'source_class_builder.dart' ;
20
21
import 'source_declaration_builder.dart' ;
21
22
import 'source_library_builder.dart' ;
22
23
import 'source_loader.dart' ;
23
24
import 'source_member_builder.dart' ;
24
25
import 'source_type_parameter_builder.dart' ;
25
26
26
- mixin SourceDeclarationBuilderMixin
27
+ mixin SourceDeclarationBuilderBaseMixin
27
28
implements DeclarationBuilderMixin , SourceDeclarationBuilder {
28
29
@override
29
- SourceLibraryBuilder get libraryBuilder ;
30
+ List < SourceNominalParameterBuilder > ? get typeParameters ;
30
31
31
32
@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;
33
131
34
132
@override
35
133
Uri get fileUri;
@@ -117,45 +215,6 @@ mixin SourceDeclarationBuilderMixin
117
215
return count;
118
216
}
119
217
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
-
159
218
void _buildMember (SourceMemberBuilder memberBuilder, Member member,
160
219
Member ? tearOff, BuiltMemberKind memberKind,
161
220
{required bool addMembersToLibrary}) {
@@ -202,50 +261,4 @@ mixin SourceDeclarationBuilderMixin
202
261
BuiltMemberKind memberKind,
203
262
Reference memberReference,
204
263
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 ;
251
264
}
0 commit comments