| 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 |