OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library fasta.class_builder; | 5 library fasta.class_builder; |
6 | 6 |
7 import '../deprecated_problems.dart' show deprecated_internalProblem; | 7 import '../problems.dart' show internalProblem; |
8 | 8 |
9 import 'builder.dart' | 9 import 'builder.dart' |
10 show | 10 show |
11 Builder, | 11 Builder, |
12 ConstructorReferenceBuilder, | 12 ConstructorReferenceBuilder, |
13 LibraryBuilder, | 13 LibraryBuilder, |
14 MemberBuilder, | 14 MemberBuilder, |
15 MetadataBuilder, | 15 MetadataBuilder, |
16 MixinApplicationBuilder, | 16 MixinApplicationBuilder, |
17 NamedTypeBuilder, | 17 NamedTypeBuilder, |
18 Scope, | 18 Scope, |
19 ScopeBuilder, | 19 ScopeBuilder, |
20 TypeBuilder, | 20 TypeBuilder, |
21 TypeDeclarationBuilder, | 21 TypeDeclarationBuilder, |
22 TypeVariableBuilder; | 22 TypeVariableBuilder; |
23 | 23 |
24 import '../fasta_codes.dart' show Message; | 24 import '../fasta_codes.dart' |
| 25 show |
| 26 Message, |
| 27 templateInternalProblemNotFoundIn, |
| 28 templateInternalProblemSuperclassNotFound; |
25 | 29 |
26 abstract class ClassBuilder<T extends TypeBuilder, R> | 30 abstract class ClassBuilder<T extends TypeBuilder, R> |
27 extends TypeDeclarationBuilder<T, R> { | 31 extends TypeDeclarationBuilder<T, R> { |
28 final List<TypeVariableBuilder> typeVariables; | 32 final List<TypeVariableBuilder> typeVariables; |
29 | 33 |
30 T supertype; | 34 T supertype; |
31 | 35 |
32 List<T> interfaces; | 36 List<T> interfaces; |
33 | 37 |
34 final Scope scope; | 38 final Scope scope; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 if (supertype is NamedTypeBuilder) { | 163 if (supertype is NamedTypeBuilder) { |
160 handleNamedTypeBuilder(supertype); | 164 handleNamedTypeBuilder(supertype); |
161 } else if (supertype is MixinApplicationBuilder) { | 165 } else if (supertype is MixinApplicationBuilder) { |
162 MixinApplicationBuilder t = supertype; | 166 MixinApplicationBuilder t = supertype; |
163 NamedTypeBuilder s = findSuperclass(t); | 167 NamedTypeBuilder s = findSuperclass(t); |
164 if (s != null) { | 168 if (s != null) { |
165 handleNamedTypeBuilder(s); | 169 handleNamedTypeBuilder(s); |
166 } | 170 } |
167 supertype = t.supertype; | 171 supertype = t.supertype; |
168 } else { | 172 } else { |
169 deprecated_internalProblem( | 173 internalProblem( |
170 "Superclass not found '${superclass.fullNameForErrors}'.", | 174 templateInternalProblemSuperclassNotFound |
171 fileUri, | 175 .withArguments(superclass.fullNameForErrors), |
172 charOffset); | 176 charOffset, |
| 177 fileUri); |
173 } | 178 } |
174 if (variables != null) { | 179 if (variables != null) { |
175 Map<TypeVariableBuilder, TypeBuilder> directSubstitutionMap = | 180 Map<TypeVariableBuilder, TypeBuilder> directSubstitutionMap = |
176 <TypeVariableBuilder, TypeBuilder>{}; | 181 <TypeVariableBuilder, TypeBuilder>{}; |
177 for (int i = 0; i < variables.length; i++) { | 182 for (int i = 0; i < variables.length; i++) { |
178 TypeBuilder argument = | 183 TypeBuilder argument = |
179 i < arguments.length ? arguments[i] : dynamicType; | 184 i < arguments.length ? arguments[i] : dynamicType; |
180 if (substitutionMap != null) { | 185 if (substitutionMap != null) { |
181 argument = argument.subst(substitutionMap); | 186 argument = argument.subst(substitutionMap); |
182 } | 187 } |
183 directSubstitutionMap[variables[i]] = argument; | 188 directSubstitutionMap[variables[i]] = argument; |
184 } | 189 } |
185 substitutionMap = directSubstitutionMap; | 190 substitutionMap = directSubstitutionMap; |
186 } | 191 } |
187 } | 192 } |
188 return substitutionMap; | 193 return substitutionMap; |
189 } | 194 } |
190 | 195 |
191 void forEach(void f(String name, MemberBuilder builder)) { | 196 void forEach(void f(String name, MemberBuilder builder)) { |
192 scope.forEach(f); | 197 scope.forEach(f); |
193 } | 198 } |
194 | 199 |
195 /// Don't use for scope lookup. Only use when an element is known to exist | 200 /// Don't use for scope lookup. Only use when an element is known to exist |
196 /// (and isn't a setter). | 201 /// (and isn't a setter). |
197 MemberBuilder operator [](String name) { | 202 MemberBuilder operator [](String name) { |
198 // TODO(ahe): Rename this to getLocalMember. | 203 // TODO(ahe): Rename this to getLocalMember. |
199 return scope.local[name] ?? | 204 return scope.local[name] ?? |
200 deprecated_internalProblem("Not found: '$name'."); | 205 internalProblem( |
| 206 templateInternalProblemNotFoundIn.withArguments( |
| 207 name, fullNameForErrors), |
| 208 -1, |
| 209 null); |
201 } | 210 } |
202 | 211 |
203 void addCompileTimeError(Message message, int charOffset) { | 212 void addCompileTimeError(Message message, int charOffset) { |
204 library.addCompileTimeError(message, charOffset, fileUri); | 213 library.addCompileTimeError(message, charOffset, fileUri); |
205 } | 214 } |
206 | 215 |
207 void addWarning(Message message, int charOffset) { | 216 void addWarning(Message message, int charOffset) { |
208 library.addWarning(message, charOffset, fileUri); | 217 library.addWarning(message, charOffset, fileUri); |
209 } | 218 } |
210 | 219 |
211 void addNit(Message message, int charOffset) { | 220 void addNit(Message message, int charOffset) { |
212 library.addNit(message, charOffset, fileUri); | 221 library.addNit(message, charOffset, fileUri); |
213 } | 222 } |
214 | 223 |
215 void deprecated_addCompileTimeError(int charOffset, String message) { | 224 void deprecated_addCompileTimeError(int charOffset, String message) { |
216 library.deprecated_addCompileTimeError(charOffset, message, | 225 library.deprecated_addCompileTimeError(charOffset, message, |
217 fileUri: fileUri); | 226 fileUri: fileUri); |
218 } | 227 } |
219 | 228 |
220 void deprecated_addWarning(int charOffset, String message) { | 229 void deprecated_addWarning(int charOffset, String message) { |
221 library.deprecated_addWarning(charOffset, message, fileUri: fileUri); | 230 library.deprecated_addWarning(charOffset, message, fileUri: fileUri); |
222 } | 231 } |
223 | 232 |
224 void deprecated_addNit(int charOffset, String message) { | 233 void deprecated_addNit(int charOffset, String message) { |
225 library.deprecated_addNit(charOffset, message, fileUri: fileUri); | 234 library.deprecated_addNit(charOffset, message, fileUri: fileUri); |
226 } | 235 } |
227 } | 236 } |
OLD | NEW |